Browse Source

Добавил метод для построения структуры агента

devel
Dmitry 9 years ago
parent
commit
4982ec436c
  1. 80
      abonapp/models.py

80
abonapp/models.py

@ -3,7 +3,6 @@ from django.utils import timezone
from django.utils.datetime_safe import datetime from django.utils.datetime_safe import datetime
from django.db import models from django.db import models
from django.core.validators import DecimalValidator from django.core.validators import DecimalValidator
from agent import Transmitter, AbonStruct, TariffStruct, NasFailedResult from agent import Transmitter, AbonStruct, TariffStruct, NasFailedResult
from ip_pool.models import IpPoolItem from ip_pool.models import IpPoolItem
from tariff_app.models import Tariff from tariff_app.models import Tariff
@ -286,6 +285,19 @@ class Abon(UserProfile):
else: else:
return False return False
# создаём абонента из структуры агента
def build_agent_struct(self):
if self.ip_address:
user_ip = self.ip_address.int_ip()
else:
return
inst_tariff = self.active_tariff()
if inst_tariff:
agent_trf = TariffStruct(inst_tariff.id, inst_tariff.speedIn, inst_tariff.speedOut)
else:
agent_trf = TariffStruct()
return AbonStruct(self.pk, user_ip, agent_trf)
class InvoiceForPayment(models.Model): class InvoiceForPayment(models.Model):
abon = models.ForeignKey(Abon) abon = models.ForeignKey(Abon)
@ -341,32 +353,31 @@ class AllPayLog(models.Model):
def abon_post_save(sender, instance, **kwargs): def abon_post_save(sender, instance, **kwargs):
if instance.ip_address:
user_ip = instance.ip_address.int_ip()
else:
return
inst_tariff = instance.active_tariff()
print('abon_post_save', instance.username)
print('Instance:', instance.pk, sender)
try: try:
if inst_tariff:
agent_trf = TariffStruct(inst_tariff.id, inst_tariff.speedIn, inst_tariff.speedOut)
else:
agent_trf = TariffStruct()
agent_abon = AbonStruct(instance.id, user_ip, agent_trf)
tm = Transmitter() tm = Transmitter()
agent_abon = instance.build_agent_struct()
if kwargs['created']: if kwargs['created']:
# создаём абонента # создаём абонента
tm.add_user(agent_abon) tm.add_user(agent_abon)
else: else:
# обновляем абонента на NAS # обновляем абонента на NAS
try:
tm.update_user(agent_abon)
except NasFailedResult:
tm.add_user(agent_abon)
# если не активен то приостановим услугу
if instance.is_active:
tm.start_user(agent_abon)
# найдём абонента на NAS
queue = tm.find_queue('uid%d' % instance.pk)
if queue:
# если нашли абонента на NAS
mikrotik_id = queue.sid
tm.update_user(agent_abon, mikrotik_id)
# если не активен то приостановим услугу
if instance.is_active:
tm.start_user(mikrotik_id)
else:
tm.pause_user(mikrotik_id)
else: else:
tm.pause_user(agent_abon)
# если не нашли абонента на NAS то добавим
tm.add_user(agent_abon)
except NasFailedResult: except NasFailedResult:
return True return True
@ -375,13 +386,17 @@ def abon_del_signal(sender, instance, **kwargs):
try: try:
# подключаемся к NAS'у # подключаемся к NAS'у
tm = Transmitter() tm = Transmitter()
# удаляем абонента на NAS
tm.remove_user(instance.id)
# найдём правило удаляемого абонента
queue = tm.find_queue('uid%d' % instance.pk)
if queue:
# нашли абонента, и удаляем его на NAS
tm.remove_user(queue.sid)
except NasFailedResult: except NasFailedResult:
return True return True
def abontariff_post_save(sender, instance, **kwargs): def abontariff_post_save(sender, instance, **kwargs):
print('abontariff_post_save')
# Тут или подключение абону услуги, или изменение приоритета # Тут или подключение абону услуги, или изменение приоритета
if not kwargs['created']: if not kwargs['created']:
# если изменение приоритета то не говорим об этом NAS'у # если изменение приоритета то не говорим об этом NAS'у
@ -389,11 +404,20 @@ def abontariff_post_save(sender, instance, **kwargs):
if instance.abon.ip_address is None: if instance.abon.ip_address is None:
return return
try: try:
agent_trf = TariffStruct(instance.tariff.id, instance.tariff.speedIn, instance.tariff.speedOut)
agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf)
agent_abon = instance.abon.build_agent_struct()
tm = Transmitter() tm = Transmitter()
tm.update_user(agent_abon)
tm.start_user(agent_abon)
# найдём абонента на NAS
queue = tm.find_queue('uid%d' % instance.abon.pk)
if queue:
mikrotik_id = queue.sid
# нашли абонента, обновляем его на NAS
tm.update_user(agent_abon, mikrotik_id)
if instance.abon.is_active:
tm.start_user(mikrotik_id)
else:
tm.pause_user(mikrotik_id)
else:
tm.add_user(agent_abon)
except NasFailedResult: except NasFailedResult:
return True return True
@ -406,10 +430,10 @@ def abontariff_del_signal(sender, instance, **kwargs):
# если у абонента нет ip то и создавать правило не на кого # если у абонента нет ip то и создавать правило не на кого
return return
try: try:
agent_trf = TariffStruct(instance.tariff.id, instance.tariff.speedIn, instance.tariff.speedOut)
agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf)
tm = Transmitter() tm = Transmitter()
tm.pause_user(agent_abon)
queue = tm.find_queue('uid%d' % instance.abon.pk)
if queue:
tm.pause_user(queue.sid)
except NasFailedResult: except NasFailedResult:
return True return True

Loading…
Cancel
Save