38 changed files with 418 additions and 176 deletions
-
5README.md
-
3abonapp/locale/ru/LC_MESSAGES/django.po
-
8abonapp/templates/abonapp/buy_tariff.html
-
3abonapp/templates/abonapp/editAbon.html
-
4abonapp/templates/abonapp/group_list.html
-
184abonapp/tests.py
-
2abonapp/urls.py
-
52abonapp/views.py
-
2accounts_app/models.py
-
4agent/core.py
-
60agent/mod_mikrotik.py
-
8agent/structs.py
-
16agent/utils.py
-
19chatbot/email_bot.py
-
5chatbot/send_func.py
-
9devapp/dev_types.py
-
13devapp/views.py
-
2dhcp_lever.py
-
12djing/fields.py
-
23djing/lib/tln/tln.py
-
7djing/local_settings.py.template
-
14djing/settings.py
-
2docs/dev.md
-
28docs/dhcp.md
-
20docs/extra_func.md
-
5docs/install.md
-
2docs/map.md
-
3docs/netflow.md
-
14docs/user_page.md
-
6docs/views.md
-
1group_app/views.py
-
2msg_app/models.py
-
6periodic.py
-
14tariff_app/custom_tariffs.py
-
3tariff_app/locale/ru/LC_MESSAGES/django.po
-
4tariff_app/views.py
-
2taskapp/handle.py
-
19taskapp/models.py
@ -1,16 +0,0 @@ |
|||
import socket |
|||
import struct |
|||
|
|||
|
|||
def ip2int(addr): |
|||
try: |
|||
return struct.unpack("!I", socket.inet_aton(addr))[0] |
|||
except: |
|||
return 0 |
|||
|
|||
|
|||
def int2ip(addr): |
|||
try: |
|||
return socket.inet_ntoa(struct.pack("!I", addr)) |
|||
except: |
|||
return '' |
|||
@ -0,0 +1,19 @@ |
|||
from smtplib import SMTPException |
|||
from django.core.mail import send_mail |
|||
from django.conf import settings |
|||
|
|||
from chatbot.models import ChatException, MessageQueue |
|||
|
|||
|
|||
def send_notify(msg_text, account, tag='none'): |
|||
try: |
|||
MessageQueue.objects.push(msg=msg_text, user=account, tag=tag) |
|||
target_email = account.email |
|||
send_mail( |
|||
subject=getattr(settings, 'COMPANY_NAME', 'Djing notify'), |
|||
message=msg_text, |
|||
from_email=getattr(settings, 'DEFAULT_FROM_EMAIL'), |
|||
recipient_list=(target_email,) |
|||
) |
|||
except SMTPException as e: |
|||
raise ChatException('SMTPException: %s' % e) |
|||
@ -0,0 +1,5 @@ |
|||
# send via email |
|||
from .email_bot import send_notify |
|||
|
|||
# for Telegram |
|||
# from chatbot.telebot import send_notify |
|||
@ -0,0 +1,28 @@ |
|||
## ISC-DHCP Сервер, взаимодействие с биллингом. |
|||
Вобщих чертах взаимодействие происходит с помощью скрипта **dhcp_lever.py** |
|||
в корне проекта. Запущенный DHCP сервер, при возникновении событий запускает |
|||
этот сценарий , а тот говорит биллингу подробнее что произошло. |
|||
|
|||
При событии *expiry* или *release* биллингу нужно освободить ip, а при *commit* |
|||
нужно назначить динамическую аренду ip для учётной записи абонента в биллинге. |
|||
|
|||
Сам скрипт не выполняет все эти действия, он просто отправляет полученные от dhcp |
|||
сервера параметры на url адрес для обработки dhcp. View распологается в **abonapp.views.DhcpLever**. |
|||
|
|||
### Выделение аренды ip |
|||
Как происходит выделение аренды ip, от события в dhcp сервере и до появления интернета у |
|||
абонента. |
|||
|
|||
Когда в dhcp сервере происходит событие *commit* то из **abonapp.views.DhcpLever** вызывается |
|||
функция **agent.commands.dhcp.dhcp_commit**, с помощью DHCP OPTION.82 получаем mac адрес управляемого |
|||
свича и порт через который пришёл запрос. Каждое такое устройство должно быть зарегистрировано в биллинге. |
|||
Далее ищем в базе абонента, или абонентов к которому привязано устройство с переданным mac адресом. |
|||
Проверяем может-ли данный тип устройства содержать несколько подключённых абонентов(напрмер PON ONU, в основном, |
|||
содержит одного абонента). Проверка происходит по свойству **is_use_device_port** из менеджера устройства, |
|||
которое открыто для кастомизации, подробнее в [Менеджер устройства](./docs/dev.md). |
|||
А далее, если может быть несколько абонентов, то фильтруем вывод ещё по порту свича. |
|||
Получется что на управляемом свиче мы авторизуем абонентов при помощи dhcp option.82 по маку свича и порту абонента. |
|||
Если наше устройство PON ONU(ONT) то авторизуем только по mac адресу оптического юнита(onu). |
|||
|
|||
После добавления абоненту аренды динамического ip, он(абонент) синхронизуется с nas сервером и открывается доступ |
|||
к интернету в соответствии с тарифом абонента. |
|||
@ -0,0 +1,20 @@ |
|||
## Дополнительный фунционал |
|||
В процессе реализации проекта понадобился функционал, который отсутствует в базовой поставке **Django**. |
|||
Его совсем не много, но без внимания оставить нельзя. |
|||
|
|||
Все вспомогательные модули можно найти в пакете **djing.lib**. |
|||
### tln |
|||
Это модуль работы по *telnet* |
|||
|
|||
### messaging |
|||
Этот модуль помогает работать с форматами СМС сообщений. |
|||
|
|||
|
|||
### init |
|||
Содержит всякие мелкие примочки, код прост и с комментариями, зайдите посмотрите. |
|||
|
|||
## auth_decorators |
|||
Бэкенд авторизации |
|||
|
|||
## decorators |
|||
Дополнительные декораторы. |
|||
@ -0,0 +1,14 @@ |
|||
## Особенности страницы абонента. |
|||
Находится она в разделе **Абоненты** внутри группы. На этой странице вы увидите несколько логических блоков, |
|||
из которых самые важные, пожалуй, 2. Первый это **Изменение абонента** а второй **Выберите устройство**. |
|||
На первом блоке можно редактировать базовую информацию абонента. Если снять галку *Активен* то абонент перестанет |
|||
получать услуги даже при подключённой услуге. |
|||
|
|||
Блок с устройством содержит то самое устройство, к которому подключён абонент. Если это устройство не будет назначено |
|||
то биллинг не сможет авторизовать абонента по dhcp option.82. Галочка **Динамические настройки по dhcp** означает что |
|||
учётная запись абонента сможет получать динамический ip. Это означает что если галка не будет выставлена, то сколько бы |
|||
запросов не приходило с этого устройства абонент не изменить свой ip, это полезно когда абонент работает со статическим |
|||
ip. |
|||
|
|||
Вверху есть вкладки. с соответствующим названию функционалом. Например на вкладке **Тарифы** вы можете назначить |
|||
абоненту услугу или добавить периодический платёж, который абонент увидит в своём личном кабинете. |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue