Browse Source

complemented docs

devel
Dmitry Novikov 7 years ago
parent
commit
666a8f0e4b
  1. 37
      docs/dev.md
  2. 30
      docs/services.md

37
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 "<?xml version='1.0' encoding='UTF-8'?>\n" \
"<pay-response>Pay ok</pay-response>\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.

30
docs/services.md

@ -2,8 +2,6 @@
&mdash; это скрипты которые, зачастую, оформлены в юниты 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 интерфейса.
**Настройка** &mdash; В самом скрипте нужно указать параметры досупа к asterisk, секретное слово, и адрес web сервера
биллинга. Секретное слово *API_AUTH_SECRET* должно совпадать с тем что в настройках биллинга. Но аккуратно, если
кто-то узнает это секретное слово то безопасность будет под угрозой, ведь зло настроенный человек или бот сможет
выполнять удалённо комманды через api. Правда это если он находится в доверенной подсети, хотя адрес отправителя,
как известно, можно подменить. Так что поставьте на этот скрипт ограниченные для чтения права.
### telebot
Этот сервис разговаривает с вами когда вы пишете в Telegram канал биллинга.
**Настройка** &mdash; В настройках биллинга укажите *telegram bot token* в директиве *TELEGRAM_BOT_TOKEN*.
Это вся настройка. Теперь запустите его с помощью юнита *djing_telebot.service*, предварительно скопировав
его в папку с юнитами systemd.
### monitoring_agent
Это тоже не совсем сервис, как и [dhcp_lever](#dhcp_lever) он связывает систему мониторинга с биллингом. Сейчас работает
с Nagios, но изменить его для любой другой системы мониторинга совсем не сложно, достаточно подправить параметры
приходящиие от этой системы.
Каждый раз когда в биллинге происходит событие, Nagios дёргает этот скрипт и он даёт знать биллингу какое устройство
Каждый раз когда в сети происходит событие, Nagios дёргает этот скрипт и он даёт знать биллингу какое устройство
не в сети или появилось после сбоя. Дальше биллинг на основе этого посылает оповещения ответственным за участок на
котором находится оборудование и выставляет статусы на карте и в списке устройств.
котором находится оборудование и выставляет статусы в списке устройств.
**Настройка** &mdash; Для работы этому скрипту так же надо передать секретное слово биллинга, так что тоже рекомендую
ограничить права на чтение. Кроме этого надо указать адрес web сервера биллинга.
@ -62,4 +39,5 @@
### periodic
Периодически запускается чтоб проверить совпадает-ли информация в биллинге с тем что находится в NAS.
Завершает закончившие действовать услуги, проводит периодические платежи.
Просто укажите в cron или *systemd.timer* этот скрипт на периодичность, например, в пол часа.
Просто укажите в cron или *systemd.timer* этот скрипт на периодичность, например, в пол часа, или по ночам,
как вам удобнее.
Loading…
Cancel
Save