Browse Source

перед соединением пинганём NAS.

И 2 новых метода для паузы и старта услуги
devel
Dmitry 9 years ago
parent
commit
3a831013b7
  1. 24
      agent/mod_mikrotik.py

24
agent/mod_mikrotik.py

@ -2,8 +2,10 @@
import socket import socket
import binascii import binascii
from hashlib import md5 from hashlib import md5
from core import BaseTransmitter, NasFailedResult
from core import BaseTransmitter, NasFailedResult, NasNetworkError
from mydefs import ping
from structs import TariffStruct, IpStruct from structs import TariffStruct, IpStruct
import settings
class ApiRos: class ApiRos:
@ -138,19 +140,23 @@ class ApiRos:
return ret return ret
# TODO: Реализовать передачу в шейпер срок действия тарифа
class MikrotikTransmitter(BaseTransmitter): class MikrotikTransmitter(BaseTransmitter):
def __init__(self, login, password, ip, port=8728):
def __init__(self, login=None, password=None, ip=None, port=None):
ip = ip or settings.NAS_IP
if not ping(ip):
raise NasNetworkError(u'NAS %s не пингуется' % ip)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
s.connect((ip, port or settings.NAS_PORT))
self.ar = ApiRos(s) self.ar = ApiRos(s)
self.ar.login(login, password)
self.ar.login(login or settings.NAS_LOGIN, password or settings.NAS_PASSW)
def _exec_cmd(self, cmd): def _exec_cmd(self, cmd):
assert isinstance(cmd, list) assert isinstance(cmd, list)
result = self.ar.talk(cmd) result = self.ar.talk(cmd)
for rt in result: for rt in result:
if rt[0] == '!trap': if rt[0] == '!trap':
raise NasFailedResult, rt[1]['=message']
raise NasFailedResult(rt[1]['=message'])
return result return result
# ищем правило по имени, и возвращаем всю инфу о найденном правиле # ищем правило по имени, и возвращаем всю инфу о найденном правиле
@ -190,6 +196,14 @@ class MikrotikTransmitter(BaseTransmitter):
'=target=%s/32' % user.ip.get_str() '=target=%s/32' % user.ip.get_str()
]) ])
# приостановливаем обслуживание абонента
def pause_user(self, user):
self._exec_cmd(['/queue/simple/disable', '=.id=uid%d' % user.uid])
# продолжаем обслуживание абонента
def start_user(self, user):
self._exec_cmd(['/queue/simple/enable', '=.id=uid%d' % user.uid])
# Тарифы хранить нам не надо, так что методы тарифов ниже не реализуем # Тарифы хранить нам не надо, так что методы тарифов ниже не реализуем
def add_tariff_range(self, tariff_list): def add_tariff_range(self, tariff_list):
pass pass

Loading…
Cancel
Save