From 666a8f0e4b4d7b7a965ec8fc75d0bc1d5a7c11b9 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Wed, 3 Apr 2019 11:58:30 +0300 Subject: [PATCH] complemented docs --- docs/dev.md | 37 +++++-------------------------------- docs/services.md | 30 ++++-------------------------- 2 files changed, 9 insertions(+), 58 deletions(-) diff --git a/docs/dev.md b/docs/dev.md index 5d427d8..90de72b 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -80,12 +80,14 @@ class EltexSwitch(DLinkDevice): ``` Свойство **@description** Просто отображает человекопонятное название вашего устройства в биллинге. Заметьте что строка на английском и заключена в процедуру **_** (это ugettext_lazy, см. в импорте вверху файла), -это локализация для текущего языка. Про локализацию можно почитать в соответствующем разделе [django translation](https://docs.djangoproject.com/en/1.11/topics/i18n/translation/). +это локализация для текущего языка. Про локализацию можно почитать в соответствующем разделе документации *Django* +[django translation](https://docs.djangoproject.com/en/1.11/topics/i18n/translation/). Метод **@get_ports** чаще всего редко изменяется по алгоритму, так что вам, в большенстве случаев, достаточно добавить нужные SNMP OID в соответствующие места процедуры. Но вы вольны реализовать ваш метод получения портов как вам угодно, главное чтоб возвращался список объектов определённого выше класса порта для этого свича. -В данном случае возвращается список объектов *EltexPort*. +В данном случае возвращается список объектов *EltexPort*. На самом деле не обязательно список, можете вернуть кортеж +или генератор, что-то итериуемое. Метод **@get_device_name** получает по SNMP имя устройства, просто укажите в вашей реализации нужный OID. @@ -101,7 +103,7 @@ class EltexSwitch(DLinkDevice): а не к порту, то нужно указать False, На обычных свичах где мы авторизуем абонента на порту возвращаем True. Реализация SNMPBaseWorker по сути не нужна, класс абстрактных методов не имеет. -Потому когда наследуем наследуемся от *DevBase* то в базовые классы добавим и SNMPBaseWorker, как это сделано в *DLinkDevice*: +Потому когда наследуемся от *DevBase* то в базовые классы добавим и SNMPBaseWorker, как это сделано в *DLinkDevice*: ```python class DLinkDevice(DevBase, SNMPBaseWorker): @@ -117,35 +119,6 @@ class DLinkDevice(DevBase, SNMPBaseWorker): >П.С. Не изучайте как пример реализацию для PON, она, как по мне, костыльна. Это связано с тем что PON сильно отличается от >принципа работы обычного свича, и чтоб подружить свичи и PON был реализован такой костыль. - -## Добавим платёжную систему -Для того чтоб добавить платёжную систему добавьте в файл *abonapp/pay_systems.py* процедуру которая будет принимать -request, далее он пригодится в теле вашей процедуры. это тот самый request который передаётся в *view*. Пустая процедура, возвращающая xml, будет выглядеть так: - -```python -def my_custom_pay_system(request): - return "\n" \ - "Pay ok\n" -``` - -Затем импортируйте её в процедуру *terminal_pay* в файле views.py каталога abonapp. -Для примера это будет выглядеть так: - -```python -from django.db import transaction - -@transaction.atomic -def terminal_pay(request): - from .pay_systems import my_custom_pay_system - ret_text = my_custom_pay_system(request) - return HttpResponse(ret_text) -``` - -Проследите чтоб ваша процедура не вызывала исключений, обрабатывайте всё внутри тела процедуры. -Про декоратор **@atomic** вы можете прочитать в документации к [Django](https://docs.djangoproject.com/en/1.11/topics/db/transactions). -В кратце этот декоратор защищает от незавешённых транзакций, например при высокой нагрузке. - - ## Реализация своего NAS Сейчас биллинг работает с Mikrotik в роли устройства для доступа абонентов в интернет. Как можно реализовать такой-же для вашего роутера, например на GNU/Linux. diff --git a/docs/services.md b/docs/services.md index d6e237f..073f6ca 100644 --- a/docs/services.md +++ b/docs/services.md @@ -2,8 +2,6 @@ — это скрипты которые, зачастую, оформлены в юниты systemd. Сейчас есть такие сервисы: * [dhcp_lever](#dhcp_lever) -* [dialing](#dialing) -* [telebot](#telebot) * [monitoring_agent](#monitoring_agent) * [periodic](#periodic) @@ -26,34 +24,13 @@ Беспокоится о том что не будет обновлена другая информация не нужно, об этом позаботится [periodic](#periodic). А если вам нужно немедленно обновить абонента без ожидания то просто нажмите на кномку *Сохранить* на странице абонента. - -### dialing -Этот сервис общается с автоматической телефонной станцией на основе [Asterisk](https://www.asterisk.org/). -Слушает в ожидании событий и отправляет комманды в asterisk. Пока умеет только смс, слушает входящие и отправляет те -что были созданы из web интерфейса. - -**Настройка** — В самом скрипте нужно указать параметры досупа к asterisk, секретное слово, и адрес web сервера -биллинга. Секретное слово *API_AUTH_SECRET* должно совпадать с тем что в настройках биллинга. Но аккуратно, если -кто-то узнает это секретное слово то безопасность будет под угрозой, ведь зло настроенный человек или бот сможет -выполнять удалённо комманды через api. Правда это если он находится в доверенной подсети, хотя адрес отправителя, -как известно, можно подменить. Так что поставьте на этот скрипт ограниченные для чтения права. - - -### telebot -Этот сервис разговаривает с вами когда вы пишете в Telegram канал биллинга. - -**Настройка** — В настройках биллинга укажите *telegram bot token* в директиве *TELEGRAM_BOT_TOKEN*. -Это вся настройка. Теперь запустите его с помощью юнита *djing_telebot.service*, предварительно скопировав -его в папку с юнитами systemd. - - ### monitoring_agent Это тоже не совсем сервис, как и [dhcp_lever](#dhcp_lever) он связывает систему мониторинга с биллингом. Сейчас работает с Nagios, но изменить его для любой другой системы мониторинга совсем не сложно, достаточно подправить параметры приходящиие от этой системы. -Каждый раз когда в биллинге происходит событие, Nagios дёргает этот скрипт и он даёт знать биллингу какое устройство +Каждый раз когда в сети происходит событие, Nagios дёргает этот скрипт и он даёт знать биллингу какое устройство не в сети или появилось после сбоя. Дальше биллинг на основе этого посылает оповещения ответственным за участок на -котором находится оборудование и выставляет статусы на карте и в списке устройств. +котором находится оборудование и выставляет статусы в списке устройств. **Настройка** — Для работы этому скрипту так же надо передать секретное слово биллинга, так что тоже рекомендую ограничить права на чтение. Кроме этого надо указать адрес web сервера биллинга. @@ -62,4 +39,5 @@ ### periodic Периодически запускается чтоб проверить совпадает-ли информация в биллинге с тем что находится в NAS. Завершает закончившие действовать услуги, проводит периодические платежи. -Просто укажите в cron или *systemd.timer* этот скрипт на периодичность, например, в пол часа. +Просто укажите в cron или *systemd.timer* этот скрипт на периодичность, например, в пол часа, или по ночам, +как вам удобнее.