Browse Source

Add devapp task

devel
Dmitry Novikov 7 years ago
parent
commit
0834ebc565
  1. 7
      devapp/models.py
  2. 9
      devapp/tasks.py
  3. 26
      devapp/views.py

7
devapp/models.py

@ -83,13 +83,6 @@ class Device(models.Model):
def __str__(self): def __str__(self):
return "%s: (%s) %s %s" % (self.comment, self.get_devtype_display(), self.ip_address or '', self.mac_addr or '') return "%s: (%s) %s %s" % (self.comment, self.get_devtype_display(), self.ip_address or '', self.mac_addr or '')
@staticmethod
def update_dhcp():
from .onu_register import onu_register
onu_register(
Device.objects.exclude(group=None).select_related('group').only('mac_addr', 'group__code').iterator()
)
def generate_config_template(self) -> Optional[AnyStr]: def generate_config_template(self) -> Optional[AnyStr]:
mng = self.get_manager_object() mng = self.get_manager_object()
return mng.monitoring_template() return mng.monitoring_template()

9
devapp/onu_register.py → devapp/tasks.py

@ -1,11 +1,14 @@
#!/usr/bin/env python3
from typing import Iterable from typing import Iterable
from subprocess import run from subprocess import run
from celery import shared_task
from devapp.models import Device
def onu_register(devices: Iterable):
@shared_task
def onu_register(device_ids: Iterable[int]):
with open('/etc/dhcp/macs.conf', 'w') as f: with open('/etc/dhcp/macs.conf', 'w') as f:
for dev in devices:
for dev_id in device_ids:
dev = Device.objects.get(pk=dev_id)
if not dev.has_attachable_to_subscriber() or dev.mac_addr is None: if not dev.has_attachable_to_subscriber() or dev.mac_addr is None:
continue continue
group_code = dev.group.code group_code = dev.group.code

26
devapp/views.py

@ -32,6 +32,7 @@ from guardian.decorators import \
from guardian.shortcuts import get_objects_for_user from guardian.shortcuts import get_objects_for_user
from .forms import DeviceForm, PortForm, DeviceExtraDataForm from .forms import DeviceForm, PortForm, DeviceExtraDataForm
from .models import Device, Port, DeviceDBException, DeviceMonitoringException from .models import Device, Port, DeviceDBException, DeviceMonitoringException
from .tasks import onu_register
class DevicesListView(LoginAdminPermissionMixin, class DevicesListView(LoginAdminPermissionMixin,
@ -91,7 +92,9 @@ class DeviceDeleteView(LoginAdminPermissionMixin, DeleteView):
self.object.mac_addr or '-', self.object.mac_addr or '-',
self.object.comment or '-' self.object.comment or '-'
)) ))
self.object.update_dhcp()
onu_register.delay(
tuple(dev.pk for dev in Device.objects.exclude(group=None).only('pk').iterator())
)
except (DeviceDBException, PermissionError) as e: except (DeviceDBException, PermissionError) as e:
messages.error(request, e) messages.error(request, e)
messages.success(request, _('Device successfully deleted')) messages.success(request, _('Device successfully deleted'))
@ -141,7 +144,9 @@ class DeviceUpdate(LoginAdminPermissionMixin, UpdateView):
r = super().form_valid(form) r = super().form_valid(form)
# change device info in dhcpd.conf # change device info in dhcpd.conf
try: try:
self.object.update_dhcp()
onu_register.delay(
tuple(dev.pk for dev in Device.objects.exclude(group=None).only('pk').iterator())
)
messages.success(self.request, _('Device info has been saved')) messages.success(self.request, _('Device info has been saved'))
except PermissionError as e: except PermissionError as e:
messages.error(self.request, e) messages.error(self.request, e)
@ -197,13 +202,16 @@ class DeviceCreateView(LoginAdminMixin, PermissionRequiredMixin, CreateView):
r = super().form_valid(form) r = super().form_valid(form)
# change device info in dhcpd.conf # change device info in dhcpd.conf
try: try:
self.request.user.log(self.request.META, 'cdev',
'ip %s, mac: %s, "%s"' % (
self.object.ip_address,
self.object.mac_addr,
self.object.comment
))
self.object.update_dhcp()
self.request.user.log(
self.request.META, 'cdev',
'ip %s, mac: %s, "%s"' % (
self.object.ip_address,
self.object.mac_addr,
self.object.comment
))
onu_register.delay(
tuple(dev.pk for dev in Device.objects.exclude(group=None).only('pk').iterator())
)
messages.success(self.request, _('Device info has been saved')) messages.success(self.request, _('Device info has been saved'))
except PermissionError as e: except PermissionError as e:
messages.error(self.request, e) messages.error(self.request, e)

Loading…
Cancel
Save