#!/usr/bin/env python # -*- coding: utf-8 -*- import os import django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings") django.setup() from abonapp.models import Abon, LogicError from agent import Transmitter, NasNetworkError, NasFailedResult def main(): tm = Transmitter() # получим инфу о записях в NAS queues = [queue for queue in tm.read_users_iter()] users = Abon.objects.all() for user in users: try: # бдим за услугами абонента: просроченные отключить, заказанные подключить user.activate_next_tariff(user) # если нет 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 abons 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']) except NasNetworkError as er: print("Error:", er) except NasFailedResult as er: print("Error:", er) except LogicError as er: print("Notice:", er) if __name__ == "__main__": try: main() except NasNetworkError as e: print(e) except NasFailedResult as e: print(e)