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** Просто отображает человекопонятное название вашего устройства в биллинге. Свойство **@description** Просто отображает человекопонятное название вашего устройства в биллинге.
Заметьте что строка на английском и заключена в процедуру **_** (это ugettext_lazy, см. в импорте вверху файла), Заметьте что строка на английском и заключена в процедуру **_** (это 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** чаще всего редко изменяется по алгоритму, так что вам, в большенстве случаев, достаточно добавить Метод **@get_ports** чаще всего редко изменяется по алгоритму, так что вам, в большенстве случаев, достаточно добавить
нужные SNMP OID в соответствующие места процедуры. Но вы вольны реализовать ваш метод получения портов нужные SNMP OID в соответствующие места процедуры. Но вы вольны реализовать ваш метод получения портов
как вам угодно, главное чтоб возвращался список объектов определённого выше класса порта для этого свича. как вам угодно, главное чтоб возвращался список объектов определённого выше класса порта для этого свича.
В данном случае возвращается список объектов *EltexPort*.
В данном случае возвращается список объектов *EltexPort*. На самом деле не обязательно список, можете вернуть кортеж
или генератор, что-то итериуемое.
Метод **@get_device_name** получает по SNMP имя устройства, просто укажите в вашей реализации нужный OID. Метод **@get_device_name** получает по SNMP имя устройства, просто укажите в вашей реализации нужный OID.
@ -101,7 +103,7 @@ class EltexSwitch(DLinkDevice):
а не к порту, то нужно указать False, На обычных свичах где мы авторизуем абонента на порту возвращаем True. а не к порту, то нужно указать False, На обычных свичах где мы авторизуем абонента на порту возвращаем True.
Реализация SNMPBaseWorker по сути не нужна, класс абстрактных методов не имеет. Реализация SNMPBaseWorker по сути не нужна, класс абстрактных методов не имеет.
Потому когда наследуем наследуемся от *DevBase* то в базовые классы добавим и SNMPBaseWorker, как это сделано в *DLinkDevice*:
Потому когда наследуемся от *DevBase* то в базовые классы добавим и SNMPBaseWorker, как это сделано в *DLinkDevice*:
```python ```python
class DLinkDevice(DevBase, SNMPBaseWorker): class DLinkDevice(DevBase, SNMPBaseWorker):
@ -117,35 +119,6 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
>П.С. Не изучайте как пример реализацию для PON, она, как по мне, костыльна. Это связано с тем что PON сильно отличается от >П.С. Не изучайте как пример реализацию для PON, она, как по мне, костыльна. Это связано с тем что 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 ## Реализация своего NAS
Сейчас биллинг работает с Mikrotik в роли устройства для доступа абонентов в интернет. Сейчас биллинг работает с Mikrotik в роли устройства для доступа абонентов в интернет.
Как можно реализовать такой-же для вашего роутера, например на GNU/Linux. Как можно реализовать такой-же для вашего роутера, например на GNU/Linux.

30
docs/services.md

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