Dmitry Novikov 7 years ago
parent
commit
2cb98c5d3f
  1. 39
      docs/dev.md
  2. 31
      docs/services.md
  3. 0
      docs/user/add_customer.md
  4. 14
      docs/user/user_doc.md
  5. 4
      systemd_units/djing.service

39
docs/dev.md

@ -7,7 +7,6 @@
- [Дополнительная инфа в устройствах](#дополнительная-инфа-в-устройствах) - [Дополнительная инфа в устройствах](#дополнительная-инфа-в-устройствах)
## Добавление поддерживаемого устройства (Свича) ## Добавление поддерживаемого устройства (Свича)
Для того чтоб добавить новый тип устройства с которым потом сможет работать биллинг нужно открыть файл *devapp/dev_types.py* Для того чтоб добавить новый тип устройства с которым потом сможет работать биллинг нужно открыть файл *devapp/dev_types.py*
и переопределить 2 интерфейса. Первый это *BasePort* для порта свича, а второй *DevBase* для самого свича соответственно. и переопределить 2 интерфейса. Первый это *BasePort* для порта свича, а второй *DevBase* для самого свича соответственно.
@ -51,23 +50,18 @@ class EltexSwitch(DLinkDevice):
has_attachable_to_subscriber = False has_attachable_to_subscriber = False
description = _('Eltex switch') description = _('Eltex switch')
is_use_device_port = False is_use_device_port = False
tech_code = 'eltex_sw'
def get_ports(self): def get_ports(self):
#nams = self.get_list('.1.3.6.1.4.1.171.10.134.2.1.1.100.2.1.3')
stats = self.get_list('.1.3.6.1.2.1.2.2.1.7')
oper_stats = self.get_list('.1.3.6.1.2.1.2.2.1.8')
#macs = self.get_list('.1.3.6.1.2.1.2.2.1.6')
speeds = self.get_list('.1.3.6.1.2.1.31.1.1.1.15')
res = []
for n in range(28):
res.append(EltexPort(self,
n+1,
'',#nams[n] if len(nams) > 0 else _('does not fetch the name'),
True if int(stats[n]) == 1 else False,
'',#macs[n] if len(macs) > 0 else _('does not fetch the mac'),
int(speeds[n]) if len(speeds) > 0 and int(oper_stats[n]) == 1 else 0,
))
return res
for i, n in enumerate(range(49, 77), 1):
speed = self.get_item('.1.3.6.1.2.1.2.2.1.5.%d' % n)
yield EltexPort(self,
num=i,
name=self.get_item('.1.3.6.1.2.1.31.1.1.1.18.%d' % n),
status=self.get_item('.1.3.6.1.2.1.2.2.1.8.%d' % n),
mac=self.get_item('.1.3.6.1.2.1.2.2.1.6.%d' % n),
speed=int(speed or 0)
)
def get_device_name(self): def get_device_name(self):
return self.get_item('.1.3.6.1.2.1.1.5.0') return self.get_item('.1.3.6.1.2.1.1.5.0')
@ -77,6 +71,18 @@ class EltexSwitch(DLinkDevice):
tm = RuTimedelta(timedelta(seconds=uptimestamp/100)) or RuTimedelta(timedelta()) tm = RuTimedelta(timedelta(seconds=uptimestamp/100)) or RuTimedelta(timedelta())
return tm return tm
def monitoring_template(self, *args, **kwargs) -> Optional[str]:
"""
Рендерит отрывок конфига для системы мониторинга.
При вызове agent/downloader.py генерируется конфиг для Nagios, вызывая
для каждого устройства конфиг возовом метода monitoring_template.
"""
def register_device(self):
"""
Вызывается при сохранении устройства, может быть использовано для
обновления конфига в различных сервисах.
"""
``` ```
Свойство **@description** Просто отображает человекопонятное название вашего устройства в биллинге. Свойство **@description** Просто отображает человекопонятное название вашего устройства в биллинге.
Заметьте что строка на английском и заключена в процедуру **_** (это ugettext_lazy, см. в импорте вверху файла), Заметьте что строка на английском и заключена в процедуру **_** (это ugettext_lazy, см. в импорте вверху файла),
@ -328,4 +334,3 @@ def check_news(request):
Тут в секции *telnet* находятся данные для доступа к устройствам ZTE-C320 для возможности настроить ONU устройства Тут в секции *telnet* находятся данные для доступа к устройствам ZTE-C320 для возможности настроить ONU устройства
по шаблону при поможи кнопки **Зарегистрировать устройство** рядом с кнопкой **Техническая информация**. по шаблону при поможи кнопки **Зарегистрировать устройство** рядом с кнопкой **Техническая информация**.
Знчение *default_vid* это влан который будет использован в шаблоне настройки ONU для ZTE. Знчение *default_vid* это влан который будет использован в шаблоне настройки ONU для ZTE.

31
docs/services.md

@ -22,22 +22,39 @@
сервере доступа к сети (NAS - Network Access Server). сервере доступа к сети (NAS - Network Access Server).
Беспокоится о том что не будет обновлена другая информация не нужно, об этом позаботится [periodic](#periodic). Беспокоится о том что не будет обновлена другая информация не нужно, об этом позаботится [periodic](#periodic).
А если вам нужно немедленно обновить абонента без ожидания то просто нажмите на кномку *Сохранить* на странице абонента.
А если вам нужно немедленно обновить абонента без ожидания то просто нажмите на кнопку *Сохранить* на странице абонента.
P.S. *dhcp_lever* это python сценарий, который импортирует *urllib* для отправки http запроса, при большой частоте
запросов из dhcp это может начать чувствоваться, потому есть его аналог написанный на C++, ледит он на github:
[github.com/nerosketch/dhcp_lever.git](https://github.com/nerosketch/dhcp_lever.git). Клонируйте репозиторий, соберите
с помощью *Make* и получите исполняемый файл *dhcp_lever* с такой же логикой, но значительно шустрее.
### monitoring_agent ### monitoring_agent
Это тоже не совсем сервис, как и [dhcp_lever](#dhcp_lever) он связывает систему мониторинга с биллингом. Сейчас работает Это тоже не совсем сервис, как и [dhcp_lever](#dhcp_lever) он связывает систему мониторинга с биллингом. Сейчас работает
с Nagios, но изменить его для любой другой системы мониторинга совсем не сложно, достаточно подправить параметры с Nagios, но изменить его для любой другой системы мониторинга совсем не сложно, достаточно подправить параметры
приходящиие от этой системы.
Каждый раз когда в сети происходит событие, Nagios дёргает этот скрипт и он даёт знать биллингу какое устройство
не в сети или появилось после сбоя. Дальше биллинг на основе этого посылает оповещения ответственным за участок на
приходящиие от этой системы. Располагать скрипт следует, обычно, на той же машине где выполняется мониторинг, чтоб он мог
запускать скрипт при возникновении событий.
Каждый раз когда в сети происходит событие, *Nagios* дёргает этот скрипт и даёт знать биллингу какое устройство
не в сети или появилось после сбоя. Дальше биллинг на основе этого посылает оповещения ответственным за участок в
котором находится оборудование и выставляет статусы в списке устройств. котором находится оборудование и выставляет статусы в списке устройств.
**Настройка** — Для работы этому скрипту так же надо передать секретное слово биллинга, так что тоже рекомендую
ограничить права на чтение. Кроме этого надо указать адрес web сервера биллинга.
**Настройка** — Для работы этому скрипту так же надо передать секретное слово биллинга *API_AUTH_SECRET*,
указывается в *settings.py*, так что тоже рекомендую ограничить права на чтение. Кроме этого надо указать адрес web
сервера биллинга, откройте содержимое *agent/monitoring_agent.py* и всё поймёте.
### periodic ### periodic
Периодически запускается чтоб проверить совпадает-ли информация в биллинге с тем что находится в NAS. Периодически запускается чтоб проверить совпадает-ли информация в биллинге с тем что находится в NAS.
Завершает закончившие действовать услуги, проводит периодические платежи. Завершает закончившие действовать услуги, проводит периодические платежи.
Просто укажите в cron или *systemd.timer* этот скрипт на периодичность, например, в пол часа, или по ночам, Просто укажите в cron или *systemd.timer* этот скрипт на периодичность, например, в пол часа, или по ночам,
как вам удобнее.
как вам удобнее. Кстати, готовый юнит *Systemd* есть в папке *systemd_units* и называется *djing.timer* и *djing.service*
соответственно. Так же скопируйте их в */etc/systemd/system*, перечитайте юниты с помощью *systemctl daemon-reload* и
запустите таймер, примерно так:
```bash
# cp /var/www/djing/systemd_units/djing.timer /etc/systemd/system
# systemctl daemon-reload
# systemctl enable djing.timer
# systemctl start djing.timer*
```
Каждую ночь в 2 часа скрипт будет обслуживать вашу систему. Можете выставить вашу частоту отредактировав *djing.timer*.

0
docs/user/add_customer.md

14
docs/user/user_doc.md

@ -2,6 +2,7 @@
## Содержание ## Содержание
* [Группы](#Группы) * [Группы](#Группы)
* [Добавление абонента](#Добавление-абонента) * [Добавление абонента](#Добавление-абонента)
* [Сотрудники](#Сотрудники)
## Введение ## Введение
Web интерфейс задумывался интуитивно понятным, так что если у вас есть опыт пользования сайтами в интернете, Web интерфейс задумывался интуитивно понятным, так что если у вас есть опыт пользования сайтами в интернете,
@ -32,3 +33,16 @@ Web интерфейс задумывался интуитивно понятн
По аналогии с созданием групп, кнопка находится снизу от списка абонентов группы. Нажав на эту кнопку биллинг предложит По аналогии с созданием групп, кнопка находится снизу от списка абонентов группы. Нажав на эту кнопку биллинг предложит
заполнить базовую информацию абонента, это номер телефона, группа, улица и пр. Если какой-то информации у вас сейчас нет заполнить базовую информацию абонента, это номер телефона, группа, улица и пр. Если какой-то информации у вас сейчас нет
не переживайте, в любой момент её можно будет изменить отредактировав учётную запись этого абонента. не переживайте, в любой момент её можно будет изменить отредактировав учётную запись этого абонента.
## Сотрудники
Самым первым пунктом меню распологается пункт *Сотрудники*, там перечислены их учётные записи. Если нажать на учётную
запись то можно увидеть базовую информация сотрудника и кнопки для редактирования, при условии что ваша учётная запись
имеет достаточно прав. Кнопка *Редактировать*, понятное дело, позволит вам изменить основную информацию учётной записи.
Кнопка *Права* позволит назначить разрешения(права) для учётной записи. Важно, чтоб выбрать несколько пунктов одновременно
надо нажать *Ctrl* и шёлкнуть по нужным пунктам, затем сохраниться. Галка *Статус суперпользователя* означает что учётная
запись будет обладать не ограниченными правами не зависимо от того какие пункты прав будут выбраны.
Так же на странице учётной записи есть несколько вкладок, *Ответственность за группы* позволит выбрать какие группы будет
обслуживать сотрудник этой учётной записи. Если вы имеете статус суперпользователя то вам будет доступны ещё 2 вкладки:
*Доступ к группам* и *Лог действий*. Доступ к группам позволяет контролировать к данным каких групп будет иметь доступ
учётная запись. А "Лог действий" показывает последние важные действия учётной записи в биллинге.

4
systemd_units/djing.service

@ -2,8 +2,8 @@
Description=A job for djing Description=A job for djing
[Service] [Service]
Type=simple
ExecStart=/usr/bin/python3 periodic.py
Type=oneshot
ExecStart=/var/www/djing/venv/bin/python periodic.py
WorkingDirectory=/var/www/djing WorkingDirectory=/var/www/djing
User=www-data User=www-data
Group=www-data Group=www-data

Loading…
Cancel
Save