From 9b20705f3f3e0e273ae321b14a1addf47ed1a152 Mon Sep 17 00:00:00 2001 From: bashmak Date: Thu, 30 Mar 2017 16:31:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83=D1=82=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20ip=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D1=8B=20=D0=BF=D0=BE=20dhc?= =?UTF-8?q?p?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent/mod_mikrotik.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/agent/mod_mikrotik.py b/agent/mod_mikrotik.py index 200fc84..76dd74e 100644 --- a/agent/mod_mikrotik.py +++ b/agent/mod_mikrotik.py @@ -6,7 +6,7 @@ from .core import BaseTransmitter, NasFailedResult, NasNetworkError from mydefs import ping from .structs import TariffStruct, AbonStruct, IpStruct, ShapeItem from . import settings -from djing.settings import DEBUG +#from djing.settings import DEBUG import re @@ -293,20 +293,27 @@ class QueueManager(TransmitterManager): class IpAddressListManager(TransmitterManager): - def add(self, list_name, ip): + + def add(self, list_name, ip, timeout=None): assert isinstance(ip, IpStruct) - return self._exec_cmd([ + commands = [ '/ip/firewall/address-list/add', '=list=%s' % list_name, '=address=%s' % ip.get_str() - ]) + ] + if type(timeout) is int: + commands.append('=timeout=%d' % timeout) + return self._exec_cmd(commands) - def _edit(self, ip, mk_id): + def _edit(self, ip, mk_id, timeout=None): assert isinstance(ip, IpStruct) - return self._exec_cmd([ + commands = [ '/ip/firewall/address-list/set', '=.id=' + str(mk_id), '?address=%s' % ip.get_str() - ]) + ] + if type(timeout) is int: + commands.append('=timeout=%d' % timeout) + return self._exec_cmd(commands) def remove(self, mk_id): return self._exec_cmd([ @@ -357,11 +364,11 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager): if len(ip_list_entity) > 1: IpAddressListManager.remove(self, ip_list_entity[0]['=.id']) - def add_user(self, user): + def add_user(self, user, ip_timeout=None): assert isinstance(user.tariff, TariffStruct) assert isinstance(user.ip, IpStruct) QueueManager.add(self, user) - IpAddressListManager.add(self, LIST_USERS_ALLOWED, user.ip) + IpAddressListManager.add(self, LIST_USERS_ALLOWED, user.ip, ip_timeout) # удаляем из списка заблокированных абонентов firewall_ip_list_obj = IpAddressListManager.find(self, user.ip, LIST_USERS_BLOCKED) if len(firewall_ip_list_obj) > 1: @@ -374,7 +381,7 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager): IpAddressListManager.remove(self, firewall_ip_list_obj[0]['=.id']) # обновляем основную инфу абонента - def update_user(self, user): + def update_user(self, user, ip_timeout=None): assert isinstance(user.tariff, TariffStruct) assert isinstance(user.ip, IpStruct) @@ -384,12 +391,12 @@ class MikrotikTransmitter(QueueManager, IpAddressListManager): # если не найден (mikrotik возвращает пустой словарь в списке если ничего нет) if len(find_res) < 2: # добавим запись об абоненте - IpAddressListManager.add(self, LIST_USERS_ALLOWED, user.ip) + IpAddressListManager.add(self, LIST_USERS_ALLOWED, user.ip, ip_timeout) else: # если ip абонента в биллинге не такой как в mikrotik if find_res[0]['=address'] != user.ip.get_str(): # то обновляем запись в mikrotik - IpAddressListManager._edit(self, user.ip, find_res[0]['=.id']) + IpAddressListManager._edit(self, user.ip, find_res[0]['=.id'], ip_timeout) # Проверяем шейпер queue = QueueManager.find(self, 'uid%d' % user.uid)