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):
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]:
mng = self.get_manager_object()
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 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:
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:
continue
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 .forms import DeviceForm, PortForm, DeviceExtraDataForm
from .models import Device, Port, DeviceDBException, DeviceMonitoringException
from .tasks import onu_register
class DevicesListView(LoginAdminPermissionMixin,
@ -91,7 +92,9 @@ class DeviceDeleteView(LoginAdminPermissionMixin, DeleteView):
self.object.mac_addr 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:
messages.error(request, e)
messages.success(request, _('Device successfully deleted'))
@ -141,7 +144,9 @@ class DeviceUpdate(LoginAdminPermissionMixin, UpdateView):
r = super().form_valid(form)
# change device info in dhcpd.conf
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'))
except PermissionError as e:
messages.error(self.request, e)
@ -197,13 +202,16 @@ class DeviceCreateView(LoginAdminMixin, PermissionRequiredMixin, CreateView):
r = super().form_valid(form)
# change device info in dhcpd.conf
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'))
except PermissionError as e:
messages.error(self.request, e)

Loading…
Cancel
Save