Browse Source

Merge branch 'devel' of github.com:nerosketch/djing into devel

devel
bashmak 8 years ago
parent
commit
247865be85
  1. 9
      README.md
  2. 8
      abonapp/templates/abonapp/editAbon.html
  3. 9
      docs/map.md
  4. 65
      docs/services.md
  5. 4
      docs/views.md
  6. 0
      periodic.py
  7. 2
      systemd_units/djing.service

9
README.md

@ -1,6 +1,8 @@
# djing
Попытка интернет биллинга. djing сокращение от **dj**ango-bill**ing**. Это web интерфейс управления абонентами интернет-провайдера.
Сейчас идёт тестирвоание работы на Mikrotik, функционал пока минимальный, т.к. пишу в свободное время. Работа планируется в реальных условиях и на реальных абонентах.
Попытка интернет биллинга. djing сокращение от **dj**ango-bill**ing**. Это web интерфейс управления абонентами
интернет-провайдера.
Сейчас идёт тестирвоание работы на Mikrotik, функционал пока минимальный, т.к. пишу в свободное время.
Работа планируется в реальных условиях и на реальных абонентах.
Использовано python 3, django 1.11, bootstrap 3, и другое в файле requirements.txt
P.S. Возможно понадобится **Python 3.5** и выше из-за указания статических типов. [typing — Support for type hints](https://docs.python.org/3/library/typing.html).
@ -8,7 +10,8 @@ P.S. Возможно понадобится **Python 3.5** и выше из-з
## Содержание
* [Установка](./docs/install.md)
* [Сервисы и API](./docs/services.md)
* [Разработка расширений](./docs/dev.md)
* [Сбор информации трафика по netflow](./docs/netflow.md)
* [Работа с представлениями](./docs/views.md)
* [Карта](./docs/map.md)
* [Карта](./docs/map.md)

8
abonapp/templates/abonapp/editAbon.html

@ -112,7 +112,13 @@
{% if perms.abonapp.change_abon %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans 'Select the device' %}</h3>
<h3 class="panel-title">
{% if device %}
{% trans 'Device' %}
{% else %}
{% trans 'Select the device' %}
{% endif %}
</h3>
</div>
<div class="panel-body">

9
docs/map.md

@ -16,3 +16,12 @@
Справа есть блок в котором перечислены список групп, созданных в меню *Группы*, при нажатии
на какую-либо из элементов этого списка будут показаны все точки, устройства которых
состоят в этой группе.
### Добавить точку
Для этого двойной клик по месту на карте где вы хотите создать новую точку. Появится диалог
в котором вы сможете увидеть подробности новой точки и сможете указать точные широту и долготу.
### Другое
Статусы устройств на точках с одним устройством обновляются автоматически 2 раза в минуту.
Это означает что когда вы изучаете карту и какое-либо устройство пропало из сети то вы
увидите это сразу без перезагрузки карты.

65
docs/services.md

@ -0,0 +1,65 @@
## Сервисы
&mdash; это скрипты которые, зачастую, оформлены в юниты systemd.
Сейчас есть такие сервисы:
* [dhcp_lever](#dhcp_lever)
* [dialing](#dialing)
* [telebot](#telebot)
* [monitoring_agent](#monitoring_agent)
* [periodic](#periodic)
### dhcp_lever
Этот скрипт не очень похож на сервис, т.к. выполняется при каждом запросе от DHCP сервера.
Работа DHCP организована так:
- Запрос приходит от абонента с опцией-82, далее с помощью dhcp-relay направляется на dhcp сервер где
и находится этот скрипт
- ISC-DHCP-server выполняет этот скрипт, передавая параметры в таком порядке: действие, ip адрес для
абонента, мак адрес абонента, мак адрес свича через которые получен запрос, порт свича с которого пришёл запрос.
- Биллинг оповещается через *http get* запрос о событии в dhcp сервере
- По мак адресу свича и его порту ищется абонент.
- Если он найден то проверяется установлен-ли флаг "Динамические настройки по dhcp" в блоке "Устройство"
на странице абонента.
- Если флаг динамических настроек есть то проверяется совпадает ли новый ip с dhcp сервера с тем что есть у
абонента, и если он совпадает то ничего не происходит. В противном случае обновляем информацию об абоненте на
сервере доступа к сети (NAS - Network Access Server).
Беспокоится о том что не будет обновлена другая информация не нужно, об этом позаботится [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 дёргает этот скрипт и он даёт знать биллингу какое устройство
не в сети или появилось после сбоя. Дальше биллинг на основе этого посылает оповещения ответственным за участок на
котором находится оборудование и выставляет статусы на карте и в списке устройств.
**Настройка** &mdash; Для работы этому скрипту так же надо передать секретное слово биллинга, так что тоже рекомендую
ограничить права на чтение. Кроме этого надо указать адрес web сервера биллинга.
### periodic
Периодически запускается чтоб проверить совпадает-ли информация в биллинге с тем что находится в NAS.
Завершает закончившие действовать услуги, проводит периодические платежи.
Просто укажите в cron или *systemd.timer* этот скрипт на периодичность, например, в пол часа.

4
docs/views.md

@ -3,8 +3,8 @@
При разработке представлений мне пришлось реализовать несколько алгоритмов, которых
нет в поставке Django. Они связаны с особенностями реализации системы.
* [Пагинатор](#markdown-header-пагинатор)
* [Сортировка по полям объектов из списка](markdown-header-сортировка-по-полям-объектов-из-списка)
* [Пагинатор](#пагинатор)
* [Сортировка по полям объектов из списка](#сортировка-по-полям-объектов-из-списка)
### Пагинатор

0
cron.py → periodic.py

2
systemd_units/djing.service

@ -3,7 +3,7 @@ Description=A job for djing
[Service]
Type=simple
ExecStart=/usr/bin/python3 cron.py
ExecStart=/usr/bin/python3 periodic.py
WorkingDirectory=/srv/http/djing
User=http
Group=http

Loading…
Cancel
Save