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 pass
# Проверяет входной тип на принадлежность классу.
# Можно передать объект или коллекцию объектов
# Проверяет входной объект на принадлежность типу.
# Можно передать несколько типов в соответствии количеству параметров
# В общем желание организовать строгую типизацию :) # В общем желание организовать строгую типизацию :)
def check_input_type(class_or_type):
def check_input_type(*types):
def real_check(fn): 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 wrapped
return real_check return real_check
@ -56,40 +56,45 @@ class BaseTransmitter(metaclass=ABCMeta):
def update_user(self, user, *args): def update_user(self, user, *args):
"""чтоб обновить абонента можно изменить всё кроме его uid, по uid абонент будет найден""" """чтоб обновить абонента можно изменить всё кроме его uid, по uid абонент будет найден"""
@abstractmethod
@check_input_type(AbonStruct)
def pause_user(self, user):
"""Приостановить обслуживание абонента"""
@abstractmethod
@check_input_type(AbonStruct)
def start_user(self, user):
"""Продолжить обслуживание абонента"""
@abstractmethod @abstractmethod
@check_input_type(TariffStruct) @check_input_type(TariffStruct)
def add_tariff_range(self, tariff_list): def add_tariff_range(self, tariff_list):
"""добавляем список тарифов в NAS"""
"""
Пока не используется, зарезервировано.
Добавляет список тарифов в NAS
"""
@abstractmethod @abstractmethod
@check_input_type(TariffStruct) @check_input_type(TariffStruct)
def remove_tariff_range(self, tariff_list): def remove_tariff_range(self, tariff_list):
"""удаляем список тарифов по уникальным идентификаторам"""
"""
Пока не используется, зарезервировано.
Удаляем список тарифов по уникальным идентификаторам
"""
@abstractmethod @abstractmethod
@check_input_type(TariffStruct) @check_input_type(TariffStruct)
def add_tariff(self, tariff): def add_tariff(self, tariff):
"""добавляем тариф"""
"""
Пока не используется, зарезервировано.
Добавляет тариф
"""
@abstractmethod @abstractmethod
@check_input_type(TariffStruct) @check_input_type(TariffStruct)
def update_tariff(self, tariff): def update_tariff(self, tariff):
"""чтоб обновить тариф надо изменить всё кроме его tid, по tid тариф будет найден"""
"""
Пока не используется, зарезервировано.
Чтоб обновить тариф надо изменить всё кроме его tid, по tid тариф будет найден
"""
@abstractmethod @abstractmethod
@check_input_type(TariffStruct) @check_input_type(TariffStruct)
def remove_tariff(self, tid): def remove_tariff(self, tid):
"""удаляем тариф"""
"""
:param tid: id тарифа в среде NAS сервера чтоб удалить по этому номеру
Пока не используется, зарезервировано.
"""
@abstractmethod @abstractmethod
@check_input_type(TariffStruct) @check_input_type(TariffStruct)
@ -129,4 +134,3 @@ class BaseTransmitter(metaclass=ABCMeta):
print(la) print(la)
self.remove_user_range( list_for_del ) self.remove_user_range( list_for_del )
self.add_user_range( list_for_add ) 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): def _exec_cmd(self, cmd):
assert isinstance(cmd, list) assert isinstance(cmd, list)
result_iter = self.ar.talk_iter(cmd)
result_iter = '<not request>'#self.ar.talk_iter(cmd)
res = [] res = []
for rt in result_iter: for rt in result_iter:
if rt[0] == '!trap': if rt[0] == '!trap':
@ -172,7 +172,7 @@ class TransmitterManager(BaseTransmitter, metaclass=ABCMeta):
def _exec_cmd_iter(self, cmd): def _exec_cmd_iter(self, cmd):
assert isinstance(cmd, list) 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: for rt in result_iter:
if len(rt) < 2: if len(rt) < 2:
continue continue
@ -377,10 +377,12 @@ class IpAddressListManager(TransmitterManager, metaclass=ABCMeta):
class MikrotikTransmitter(QueueManager, IpAddressListManager): class MikrotikTransmitter(QueueManager, IpAddressListManager):
def add_user_range(self, user_list): def add_user_range(self, user_list):
super(MikrotikTransmitter, self).add_user_range(user_list)
for usr in user_list: for usr in user_list:
self.add_user(usr) self.add_user(usr)
def remove_user_range(self, users): 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] queue_ids = [usr.queue_id for usr in users if usr is not None]
QueueManager.remove_range(self, queue_ids) QueueManager.remove_range(self, queue_ids)
ips = [user.ip for user in users if isinstance(user, AbonStruct)] 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']) IpAddressListManager.remove(self, ip_list_entity[0]['=.id'])
def add_user(self, user, ip_timeout=None): def add_user(self, user, ip_timeout=None):
super(MikrotikTransmitter, self).add_user(user)
assert isinstance(user.ip, IpStruct) assert isinstance(user.ip, IpStruct)
if user.tariff is None or not isinstance(user.tariff, TariffStruct): if user.tariff is None or not isinstance(user.tariff, TariffStruct):
return return
@ -401,6 +404,7 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
IpAddressListManager.remove(self, firewall_ip_list_obj[0]['=.id']) IpAddressListManager.remove(self, firewall_ip_list_obj[0]['=.id'])
def remove_user(self, user): def remove_user(self, user):
super(MikrotikTransmitter, self).remove_user(user)
QueueManager.remove(self, user) QueueManager.remove(self, user)
firewall_ip_list_obj = IpAddressListManager.find(self, user.ip, LIST_USERS_ALLOWED) 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: 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): def update_user(self, user, ip_timeout=None):
super(MikrotikTransmitter, self).update_user(user)
assert isinstance(user.ip, IpStruct) assert isinstance(user.ip, IpStruct)
# ищем ip абонента в списке ip # ищем ip абонента в списке ip
@ -446,6 +451,7 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
QueueManager.update(self, user) QueueManager.update(self, user)
def ping(self, host, count=10): def ping(self, host, count=10):
super(MikrotikTransmitter, self).ping(host)
r = self._exec_cmd([ r = self._exec_cmd([
'/ip/arp/print', '/ip/arp/print',
'?address=%s' % host '?address=%s' % host
@ -460,14 +466,6 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager):
received, sent = int(r[-2:][0]['=received']), int(r[-2:][0]['=sent']) received, sent = int(r[-2:][0]['=received']), int(r[-2:][0]['=sent'])
return received, 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): def add_tariff_range(self, tariff_list):
pass pass

10
devapp/dev_types.py

@ -179,9 +179,9 @@ class OnuDevice(DevBase, SNMPBaseWorker):
class EltexPort(BasePort): 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 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') speeds = self.get_list('.1.3.6.1.2.1.31.1.1.1.15')
res = [] res = []
for n in range(28): for n in range(28):
res.append(EltexPort(
res.append(EltexPort(self,
n+1, n+1,
'',#nams[n] if len(nams) > 0 else _('does not fetch the name'), '',#nams[n] if len(nams) > 0 else _('does not fetch the name'),
True if int(stats[n]) == 1 else False, True if int(stats[n]) == 1 else False,
'',#macs[n] if len(macs) > 0 else _('does not fetch the mac'), '',#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, int(speeds[n]) if len(speeds) > 0 and int(oper_stats[n]) == 1 else 0,
self))
))
return res return res
def get_device_name(self): def get_device_name(self):

Loading…
Cancel
Save