You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.3 KiB
61 lines
2.3 KiB
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
import os
|
|
import django
|
|
|
|
|
|
if __name__ == "__main__":
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings")
|
|
django.setup()
|
|
from abonapp.models import Abon
|
|
from agent import Transmitter
|
|
|
|
tm = Transmitter()
|
|
|
|
# получим инфу о записях в NAS
|
|
queues = [queue for queue in tm.read_users_iter()]
|
|
|
|
users = Abon.objects.all()
|
|
for user in users:
|
|
|
|
# если нет ip то и нет смысла лезть в NAS
|
|
if user.ip_address is None:
|
|
continue
|
|
|
|
# а есть-ли у абонента доступ к услуге
|
|
if not user.is_access():
|
|
continue
|
|
|
|
# строим структуру агента
|
|
ab = user.build_agent_struct()
|
|
if ab is None:
|
|
# если не построилась структура агента, значит нет ip
|
|
# а если нет ip то и синхронизировать абонента без ip нельзя
|
|
continue
|
|
|
|
# ищем абонента в списке инфы из nas
|
|
abons = [queue for queue in queues if queue is not None]
|
|
abons = [{'abon': queue.abon, 'mikro_id': queue.sid} for queue in queues if queue.abon.uid == user.pk]
|
|
abons_len = len(abons)
|
|
if abons_len < 1:
|
|
# абонент не найден в nas, добавим
|
|
tm.add_user(ab)
|
|
continue
|
|
elif abons_len > 1:
|
|
# удаляем срез из nas, всё кроме 1й записи
|
|
tm.remove_user_range(
|
|
[mkid['mikro_id'] for mkid in abons[1:]]
|
|
)
|
|
# один абонент
|
|
# сравним совпадает-ли инфа об абоненте в базе и в nas
|
|
if ab == abons[0]['abon']:
|
|
# если всё совпадает, то менять нечего
|
|
continue
|
|
else:
|
|
# иначе обновляем абонента
|
|
tm.update_user(ab, abons[0]['mikro_id'])
|
|
# если не активен то приостановим услугу
|
|
if user.is_active:
|
|
tm.start_user(abons[0]['mikro_id'])
|
|
else:
|
|
tm.pause_user(abons[0]['mikro_id'])
|