Browse Source

fixes

devel
bashmak 9 years ago
parent
commit
febbe124ef
  1. 56
      agent/core.py
  2. 18
      agent/mod_mikrotik.py
  3. 10
      devapp/dev_types.py

56
agent/core.py

@ -13,18 +13,18 @@ class NasNetworkError(Exception):
pass
# Проверяет входной тип на принадлежность классу.
# Можно передать объект или коллекцию объектов
# Проверяет входной объект на принадлежность типу.
# Можно передать несколько типов в соответствии количеству параметров
# В общем желание организовать строгую типизацию :)
def check_input_type(class_or_type):
def check_input_type(*types):
def real_check(fn):
def wrapped(self, user):
try:
for usr in user:
assert isinstance(usr, class_or_type)
except TypeError:
assert isinstance(user, class_or_type)
return fn(self, user)
def wrapped(self, *args):
if len(types) != len(args):
raise AttributeError("length of @types must be equivalent for length of @args")
for param_type, param in zip(types, args):
if not isinstance(param, param_type):
raise TypeError("%s must be %s, but is %s" % (str(param), str(param_type), type(param)))
return fn(self, *args)
return wrapped
return real_check
@ -56,40 +56,45 @@ class BaseTransmitter(metaclass=ABCMeta):
def update_user(self, user, *args):
"""чтоб обновить абонента можно изменить всё кроме его uid, по uid абонент будет найден"""
@abstractmethod
@check_input_type(AbonStruct)
def pause_user(self, user):
"""Приостановить обслуживание абонента"""
@abstractmethod
@check_input_type(AbonStruct)
def start_user(self, user):
"""Продолжить обслуживание абонента"""
@abstractmethod
@check_input_type(TariffStruct)
def add_tariff_range(self, tariff_list):
"""добавляем список тарифов в NAS"""
"""
Пока не используется, зарезервировано.
Добавляет список тарифов в NAS
"""
@abstractmethod
@check_input_type(TariffStruct)
def remove_tariff_range(self, tariff_list):
"""удаляем список тарифов по уникальным идентификаторам"""
"""
Пока не используется, зарезервировано.
Удаляем список тарифов по уникальным идентификаторам
"""
@abstractmethod
@check_input_type(TariffStruct)
def add_tariff(self, tariff):
"""добавляем тариф"""
"""
Пока не используется, зарезервировано.
Добавляет тариф
"""
@abstractmethod
@check_input_type(TariffStruct)
def update_tariff(self, tariff):
"""чтоб обновить тариф надо изменить всё кроме его tid, по tid тариф будет найден"""
"""
Пока не используется, зарезервировано.
Чтоб обновить тариф надо изменить всё кроме его tid, по tid тариф будет найден
"""
@abstractmethod
@check_input_type(TariffStruct)
def remove_tariff(self, tid):
"""удаляем тариф"""
"""
:param tid: id тарифа в среде NAS сервера чтоб удалить по этому номеру
Пока не используется, зарезервировано.
"""
@abstractmethod
@check_input_type(TariffStruct)
@ -129,4 +134,3 @@ class BaseTransmitter(metaclass=ABCMeta):
print(la)
self.remove_user_range( list_for_del )
self.add_user_range( list_for_add )

18
agent/mod_mikrotik.py

@ -162,7 +162,7 @@ class TransmitterManager(BaseTransmitter, metaclass=ABCMeta):
def _exec_cmd(self, cmd):
assert isinstance(cmd, list)
result_iter = self.ar.talk_iter(cmd)
result_iter = '<not request>'#self.ar.talk_iter(cmd)
res = []
for rt in result_iter:
if rt[0] == '!trap':
@ -172,7 +172,7 @@ class TransmitterManager(BaseTransmitter, metaclass=ABCMeta):
def _exec_cmd_iter(self, cmd):
assert isinstance(cmd, list)
result_iter = self.ar.talk_iter(cmd)
result_iter = '<not request>'#self.ar.talk_iter(cmd)
for rt in result_iter:
if len(rt) < 2:
continue
@ -377,10 +377,12 @@ class IpAddressListManager(TransmitterManager, metaclass=ABCMeta):
class MikrotikTransmitter(QueueManager, IpAddressListManager):
def add_user_range(self, user_list):
super(MikrotikTransmitter, self).add_user_range(user_list)
for usr in user_list:
self.add_user(usr)
def remove_user_range(self, users):
super(MikrotikTransmitter, self).remove_user_range(users)
queue_ids = [usr.queue_id for usr in users if usr is not None]
QueueManager.remove_range(self, queue_ids)
ips = [user.ip for user in users if isinstance(user, AbonStruct)]
@ -390,6 +392,7 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
IpAddressListManager.remove(self, ip_list_entity[0]['=.id'])
def add_user(self, user, ip_timeout=None):
super(MikrotikTransmitter, self).add_user(user)
assert isinstance(user.ip, IpStruct)
if user.tariff is None or not isinstance(user.tariff, TariffStruct):
return
@ -401,6 +404,7 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
IpAddressListManager.remove(self, firewall_ip_list_obj[0]['=.id'])
def remove_user(self, user):
super(MikrotikTransmitter, self).remove_user(user)
QueueManager.remove(self, user)
firewall_ip_list_obj = IpAddressListManager.find(self, user.ip, LIST_USERS_ALLOWED)
if firewall_ip_list_obj is not None and len(firewall_ip_list_obj) > 1:
@ -408,6 +412,7 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
# обновляем основную инфу абонента
def update_user(self, user, ip_timeout=None):
super(MikrotikTransmitter, self).update_user(user)
assert isinstance(user.ip, IpStruct)
# ищем ip абонента в списке ip
@ -446,6 +451,7 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
QueueManager.update(self, user)
def ping(self, host, count=10):
super(MikrotikTransmitter, self).ping(host)
r = self._exec_cmd([
'/ip/arp/print',
'?address=%s' % host
@ -460,14 +466,6 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
received, sent = int(r[-2:][0]['=received']), int(r[-2:][0]['=sent'])
return received, sent
# приостановливаем обслуживание абонента
def pause_user(self, user):
self.remove_user(user)
# продолжаем обслуживание абонента
def start_user(self, user):
pass
# Тарифы хранить нам не надо, так что методы тарифов ниже не реализуем
def add_tariff_range(self, tariff_list):
pass

10
devapp/dev_types.py

@ -179,9 +179,9 @@ class OnuDevice(DevBase, SNMPBaseWorker):
class EltexPort(BasePort):
def __init__(self, num, name, status, mac, speed, snmpWorker):
BasePort.__init__(self, num, name, status, mac, speed)
assert issubclass(snmpWorker.__class__ , SNMPBaseWorker)
def __init__(self, snmpWorker, *args, **kwargs):
BasePort.__init__(self, *args, **kwargs)
assert issubclass(snmpWorker.__class__, SNMPBaseWorker)
self.snmp_worker = snmpWorker
# выключаем этот порт
@ -213,13 +213,13 @@ class EltexSwitch(DLinkDevice):
speeds = self.get_list('.1.3.6.1.2.1.31.1.1.1.15')
res = []
for n in range(28):
res.append(EltexPort(
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,
self))
))
return res
def get_device_name(self):

Loading…
Cancel
Save