Browse Source

Merge branch 'devel' of https://github.com/bashmak/djing into devel

devel
http 9 years ago
parent
commit
7ebfd1fef1
  1. 19
      abonapp/models.py
  2. 19
      agent/mod_mikrotik.py
  3. 8
      agent/structs.py
  4. 13
      cron.py

19
abonapp/models.py

@ -332,7 +332,7 @@ class Abon(UserProfile):
agent_trf = TariffStruct(inst_tariff.id, inst_tariff.speedIn, inst_tariff.speedOut) agent_trf = TariffStruct(inst_tariff.id, inst_tariff.speedIn, inst_tariff.speedOut)
else: else:
agent_trf = TariffStruct() agent_trf = TariffStruct()
return AbonStruct(self.pk, user_ip, agent_trf)
return AbonStruct(self.pk, user_ip, agent_trf, bool(self.is_active))
class InvoiceForPayment(models.Model): class InvoiceForPayment(models.Model):
@ -403,21 +403,20 @@ def abon_post_save(sender, instance, **kwargs):
timeout = None timeout = None
if hasattr(instance, 'opt82'): if hasattr(instance, 'opt82'):
timeout = 3600 timeout = 3600
tm = Transmitter()
agent_abon = instance.build_agent_struct() agent_abon = instance.build_agent_struct()
if agent_abon is None: if agent_abon is None:
return True return True
try:
tm = Transmitter()
if kwargs['created']: if kwargs['created']:
# создаём абонента # создаём абонента
tm.add_user(agent_abon, ip_timeout=timeout) tm.add_user(agent_abon, ip_timeout=timeout)
else: else:
# обновляем абонента на NAS # обновляем абонента на NAS
tm.update_user(agent_abon, ip_timeout=timeout) tm.update_user(agent_abon, ip_timeout=timeout)
# если не активен то приостановим услугу
if instance.is_active:
tm.start_user(agent_abon)
else:
tm.pause_user(agent_abon)
except (NasFailedResult, NasNetworkError):
return True
def abon_del_signal(sender, instance, **kwargs): def abon_del_signal(sender, instance, **kwargs):
@ -427,7 +426,7 @@ def abon_del_signal(sender, instance, **kwargs):
tm = Transmitter() tm = Transmitter()
# нашли абонента, и удаляем его на NAS # нашли абонента, и удаляем его на NAS
tm.remove_user(ab) tm.remove_user(ab)
except NasFailedResult:
except (NasFailedResult, NasNetworkError):
return True return True
@ -444,7 +443,7 @@ def abontariff_post_save(sender, instance, **kwargs):
return True return True
tm = Transmitter() tm = Transmitter()
tm.update_user(agent_abon) tm.update_user(agent_abon)
except NasFailedResult:
except (NasFailedResult, NasNetworkError):
return True return True
@ -459,7 +458,7 @@ def abontariff_del_signal(sender, instance, **kwargs):
agent_abon = instance.abon.build_agent_struct() agent_abon = instance.abon.build_agent_struct()
tm = Transmitter() tm = Transmitter()
tm.pause_user(agent_abon) tm.pause_user(agent_abon)
except NasFailedResult:
except (NasFailedResult, NasNetworkError):
return True return True

19
agent/mod_mikrotik.py

@ -10,7 +10,7 @@ from . import settings
import re import re
DEBUG=False
DEBUG=True
LIST_USERS_ALLOWED = 'DjingUsersAllowed' LIST_USERS_ALLOWED = 'DjingUsersAllowed'
LIST_USERS_BLOCKED = 'DjingUsersBlocked' LIST_USERS_BLOCKED = 'DjingUsersBlocked'
@ -205,7 +205,8 @@ class TransmitterManager(BaseTransmitter):
uid=int(info['=name'][3:]), uid=int(info['=name'][3:]),
#FIXME: тут в разных микротиках или =target-addresses или =target #FIXME: тут в разных микротиках или =target-addresses или =target
ip=info['=target'][:-3], ip=info['=target'][:-3],
tariff=t
tariff=t,
is_active=False if info['=disabled'] == 'false' else True
) )
return ShapeItem(abon=a, sid=info['=.id'].replace('*', '')) return ShapeItem(abon=a, sid=info['=.id'].replace('*', ''))
except KeyError: except KeyError:
@ -388,6 +389,14 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
#ищем ip абонента в списке ip #ищем ip абонента в списке ip
find_res = IpAddressListManager.find(self, user.ip, LIST_USERS_ALLOWED) find_res = IpAddressListManager.find(self, user.ip, LIST_USERS_ALLOWED)
if not user.is_active:
# если не активен - то и обновлять не надо
# но и выключить на всяк случай надо, а то вдруг был включён
if len(find_res) > 1:
# и если найден был - то удалим ip из разрешённых
IpAddressListManager.remove(self, find_res[0]['=.id'])
return
# если не найден (mikrotik возвращает пустой словарь в списке если ничего нет) # если не найден (mikrotik возвращает пустой словарь в списке если ничего нет)
if len(find_res) < 2: if len(find_res) < 2:
# добавим запись об абоненте # добавим запись об абоненте
@ -408,13 +417,11 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
# приостановливаем обслуживание абонента # приостановливаем обслуживание абонента
def pause_user(self, user): def pause_user(self, user):
IpAddressListManager.disable(self, user)
QueueManager.disable(self, user)
pass
# продолжаем обслуживание абонента # продолжаем обслуживание абонента
def start_user(self, user): def start_user(self, user):
QueueManager.enable(self, user)
IpAddressListManager.enable(self, user)
pass
# Тарифы хранить нам не надо, так что методы тарифов ниже не реализуем # Тарифы хранить нам не надо, так что методы тарифов ниже не реализуем
def add_tariff_range(self, tariff_list): def add_tariff_range(self, tariff_list):

8
agent/structs.py

@ -80,25 +80,27 @@ class TariffStruct(BaseStruct):
# Абонент из базы # Абонент из базы
class AbonStruct(BaseStruct): class AbonStruct(BaseStruct):
def __init__(self, uid=None, ip=None, tariff=None):
def __init__(self, uid=None, ip=None, tariff=None, is_active=True):
self.uid = int(uid) self.uid = int(uid)
self.ip = IpStruct(ip) self.ip = IpStruct(ip)
assert isinstance(tariff, TariffStruct) assert isinstance(tariff, TariffStruct)
self.tariff = tariff self.tariff = tariff
self.is_active = is_active
def serialize(self): def serialize(self):
assert isinstance(self.tariff, TariffStruct) assert isinstance(self.tariff, TariffStruct)
assert isinstance(self.ip, IpStruct) assert isinstance(self.ip, IpStruct)
dt = pack("!LII", self.uid, self.ip.get_int(), self.tariff.tid)
dt = pack("!LII?", self.uid, self.ip.get_int(), self.tariff.tid, self.is_active)
return dt return dt
def deserialize(self, data, tariff=None): def deserialize(self, data, tariff=None):
dt = unpack("!LII", data)
dt = unpack("!LII?", data)
self.uid = dt[0] self.uid = dt[0]
self.ip = IpStruct(dt[1]) self.ip = IpStruct(dt[1])
if tariff is not None: if tariff is not None:
assert isinstance(tariff, TariffStruct) assert isinstance(tariff, TariffStruct)
self.tariff = tariff self.tariff = tariff
self.is_active = dt['3']
return self return self
def __eq__(self, other): def __eq__(self, other):

13
cron.py

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
import django import django
@ -34,11 +34,6 @@ def main():
# ищем абонента в списке инфы из nas # ищем абонента в списке инфы из nas
tm.update_user(ab) tm.update_user(ab)
# если не активен то приостановим услугу
if user.is_active:
tm.start_user(ab)
else:
tm.pause_user(ab)
except NasNetworkError as er: except NasNetworkError as er:
print("Error:", er) print("Error:", er)
@ -51,7 +46,5 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
try: try:
main() main()
except NasNetworkError as e:
print(e)
except NasFailedResult as e:
print(e)
except (NasNetworkError, NasFailedResult) as e:
print('NAS:', e)
Loading…
Cancel
Save