From 2cb98c5d3f093b2945bed2910765d33f3bb5c3ce Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Wed, 3 Apr 2019 23:48:22 +0300 Subject: [PATCH] doc --- docs/dev.md | 41 +++++++++++++++++++++---------------- docs/services.md | 31 +++++++++++++++++++++------- docs/user/add_customer.md | 0 docs/user/user_doc.md | 16 ++++++++++++++- systemd_units/djing.service | 4 ++-- 5 files changed, 64 insertions(+), 28 deletions(-) delete mode 100644 docs/user/add_customer.md diff --git a/docs/dev.md b/docs/dev.md index 90de72b..45d0ca0 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -7,7 +7,6 @@ - [Дополнительная инфа в устройствах](#дополнительная-инфа-в-устройствах) - ## Добавление поддерживаемого устройства (Свича) Для того чтоб добавить новый тип устройства с которым потом сможет работать биллинг нужно открыть файл *devapp/dev_types.py* и переопределить 2 интерфейса. Первый это *BasePort* для порта свича, а второй *DevBase* для самого свича соответственно. @@ -51,23 +50,18 @@ class EltexSwitch(DLinkDevice): has_attachable_to_subscriber = False description = _('Eltex switch') is_use_device_port = False + tech_code = 'eltex_sw' 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): return self.get_item('.1.3.6.1.2.1.1.5.0') @@ -76,7 +70,19 @@ class EltexSwitch(DLinkDevice): uptimestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0')) tm = RuTimedelta(timedelta(seconds=uptimestamp/100)) or RuTimedelta(timedelta()) return tm - + + def monitoring_template(self, *args, **kwargs) -> Optional[str]: + """ + Рендерит отрывок конфига для системы мониторинга. + При вызове agent/downloader.py генерируется конфиг для Nagios, вызывая + для каждого устройства конфиг возовом метода monitoring_template. + """ + + def register_device(self): + """ + Вызывается при сохранении устройства, может быть использовано для + обновления конфига в различных сервисах. + """ ``` Свойство **@description** Просто отображает человекопонятное название вашего устройства в биллинге. Заметьте что строка на английском и заключена в процедуру **_** (это ugettext_lazy, см. в импорте вверху файла), @@ -328,4 +334,3 @@ def check_news(request): Тут в секции *telnet* находятся данные для доступа к устройствам ZTE-C320 для возможности настроить ONU устройства по шаблону при поможи кнопки **Зарегистрировать устройство** рядом с кнопкой **Техническая информация**. Знчение *default_vid* это влан который будет использован в шаблоне настройки ONU для ZTE. - diff --git a/docs/services.md b/docs/services.md index 073f6ca..9b5d3a6 100644 --- a/docs/services.md +++ b/docs/services.md @@ -22,22 +22,39 @@ сервере доступа к сети (NAS - Network Access Server). Беспокоится о том что не будет обновлена другая информация не нужно, об этом позаботится [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 Это тоже не совсем сервис, как и [dhcp_lever](#dhcp_lever) он связывает систему мониторинга с биллингом. Сейчас работает с Nagios, но изменить его для любой другой системы мониторинга совсем не сложно, достаточно подправить параметры -приходящиие от этой системы. -Каждый раз когда в сети происходит событие, Nagios дёргает этот скрипт и он даёт знать биллингу какое устройство -не в сети или появилось после сбоя. Дальше биллинг на основе этого посылает оповещения ответственным за участок на +приходящиие от этой системы. Располагать скрипт следует, обычно, на той же машине где выполняется мониторинг, чтоб он мог +запускать скрипт при возникновении событий. + +Каждый раз когда в сети происходит событие, *Nagios* дёргает этот скрипт и даёт знать биллингу какое устройство +не в сети или появилось после сбоя. Дальше биллинг на основе этого посылает оповещения ответственным за участок в котором находится оборудование и выставляет статусы в списке устройств. -**Настройка** — Для работы этому скрипту так же надо передать секретное слово биллинга, так что тоже рекомендую -ограничить права на чтение. Кроме этого надо указать адрес web сервера биллинга. +**Настройка** — Для работы этому скрипту так же надо передать секретное слово биллинга *API_AUTH_SECRET*, +указывается в *settings.py*, так что тоже рекомендую ограничить права на чтение. Кроме этого надо указать адрес web +сервера биллинга, откройте содержимое *agent/monitoring_agent.py* и всё поймёте. ### periodic Периодически запускается чтоб проверить совпадает-ли информация в биллинге с тем что находится в NAS. Завершает закончившие действовать услуги, проводит периодические платежи. Просто укажите в 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*. diff --git a/docs/user/add_customer.md b/docs/user/add_customer.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/user/user_doc.md b/docs/user/user_doc.md index df0775d..7bf4822 100644 --- a/docs/user/user_doc.md +++ b/docs/user/user_doc.md @@ -2,6 +2,7 @@ ## Содержание * [Группы](#Группы) * [Добавление абонента](#Добавление-абонента) +* [Сотрудники](#Сотрудники) ## Введение Web интерфейс задумывался интуитивно понятным, так что если у вас есть опыт пользования сайтами в интернете, @@ -31,4 +32,17 @@ Web интерфейс задумывался интуитивно понятн нажмите на меню "Абоненты" слева, перед вами выведется список доступных групп, в которых можно создавать абонентов. По аналогии с созданием групп, кнопка находится снизу от списка абонентов группы. Нажав на эту кнопку биллинг предложит заполнить базовую информацию абонента, это номер телефона, группа, улица и пр. Если какой-то информации у вас сейчас нет -не переживайте, в любой момент её можно будет изменить отредактировав учётную запись этого абонента. \ No newline at end of file +не переживайте, в любой момент её можно будет изменить отредактировав учётную запись этого абонента. + +## Сотрудники +Самым первым пунктом меню распологается пункт *Сотрудники*, там перечислены их учётные записи. Если нажать на учётную +запись то можно увидеть базовую информация сотрудника и кнопки для редактирования, при условии что ваша учётная запись +имеет достаточно прав. Кнопка *Редактировать*, понятное дело, позволит вам изменить основную информацию учётной записи. +Кнопка *Права* позволит назначить разрешения(права) для учётной записи. Важно, чтоб выбрать несколько пунктов одновременно +надо нажать *Ctrl* и шёлкнуть по нужным пунктам, затем сохраниться. Галка *Статус суперпользователя* означает что учётная +запись будет обладать не ограниченными правами не зависимо от того какие пункты прав будут выбраны. + +Так же на странице учётной записи есть несколько вкладок, *Ответственность за группы* позволит выбрать какие группы будет +обслуживать сотрудник этой учётной записи. Если вы имеете статус суперпользователя то вам будет доступны ещё 2 вкладки: +*Доступ к группам* и *Лог действий*. Доступ к группам позволяет контролировать к данным каких групп будет иметь доступ +учётная запись. А "Лог действий" показывает последние важные действия учётной записи в биллинге. diff --git a/systemd_units/djing.service b/systemd_units/djing.service index 79be6fa..adfa308 100644 --- a/systemd_units/djing.service +++ b/systemd_units/djing.service @@ -2,8 +2,8 @@ Description=A job for djing [Service] -Type=simple -ExecStart=/usr/bin/python3 periodic.py +Type=oneshot +ExecStart=/var/www/djing/venv/bin/python periodic.py WorkingDirectory=/var/www/djing User=www-data Group=www-data