From 1755b03e9e392c35e6097ea9b48efb02aa72352a Mon Sep 17 00:00:00 2001 From: bashmak Date: Mon, 16 Apr 2018 15:04:43 +0300 Subject: [PATCH] Add api for get device info --- devapp/models.py | 16 +++++++--------- devapp/urls.py | 3 ++- devapp/views.py | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/devapp/models.py b/devapp/models.py index 8b4a35e..fa9aa06 100644 --- a/devapp/models.py +++ b/devapp/models.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- from django.db import models from djing.fields import MACAddressField from .base_intr import DevBase @@ -9,13 +8,6 @@ from django.conf import settings from django.utils.translation import gettext_lazy as _ from group_app.models import Group -DEVICE_TYPES = ( - ('Dl', dev_types.DLinkDevice), - ('Pn', dev_types.OLTDevice), - ('On', dev_types.OnuDevice), - ('Ex', dev_types.EltexSwitch) -) - class DeviceDBException(Exception): pass @@ -29,6 +21,12 @@ class Device(models.Model): ip_address = MyGenericIPAddressField(verbose_name=_('Ip address'), null=True, blank=True) mac_addr = MACAddressField(verbose_name=_('Mac address'), null=True, blank=True, unique=True) comment = models.CharField(_('Comment'), max_length=256) + DEVICE_TYPES = ( + ('Dl', dev_types.DLinkDevice), + ('Pn', dev_types.OLTDevice), + ('On', dev_types.OnuDevice), + ('Ex', dev_types.EltexSwitch) + ) devtype = models.CharField(_('Device type'), max_length=2, default=DEVICE_TYPES[0][0], choices=MyChoicesAdapter(DEVICE_TYPES)) man_passw = models.CharField(_('SNMP password'), max_length=16, null=True, blank=True) @@ -64,7 +62,7 @@ class Device(models.Model): return self.status def get_manager_klass(self): - klasses = [kl for kl in DEVICE_TYPES if kl[0] == self.devtype] + klasses = [kl for kl in self.DEVICE_TYPES if kl[0] == self.devtype] if len(klasses) > 0: res = klasses[0][1] if issubclass(res, DevBase): diff --git a/devapp/urls.py b/devapp/urls.py index 0bb2395..136fb39 100644 --- a/devapp/urls.py +++ b/devapp/urls.py @@ -29,5 +29,6 @@ urlpatterns = [ url(r'^on_device_event/$', views.OnDeviceMonitoringEvent.as_view()), # Nagios mon generate - url(r'^nagios/hosts/$', views.NagiosObjectsConfView.as_view(), name='nagios_objects_conf') + url(r'^nagios/hosts/$', views.NagiosObjectsConfView.as_view(), name='nagios_objects_conf'), + url(r'^api/getall/$', views.DevicesGetListView.as_view()) ] diff --git a/devapp/views.py b/devapp/views.py index f79a896..cdb5085 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -644,3 +644,22 @@ class NagiosObjectsConfView(global_base_views.AuthenticatedOrHashAuthView): "}\n" ] return '\n'.join(i for i in r if i) + + +class DevicesGetListView(global_base_views.SecureApiView): + http_method_names = ['get'] + + @method_decorator(json_view) + def get(self, request, *args, **kwargs): + from netaddr import EUI + device_type = request.GET.get('type') + dev_types = [dt[0] for dt in Device.DEVICE_TYPES] + if device_type not in dev_types: + devs = Device.objects.all() + else: + devs = Device.objects.filter(devtype=device_type) + res = devs.defer('man_passw', 'group', 'parent_dev').values() + for r in res: + if isinstance(r['mac_addr'], EUI): + r['mac_addr'] = int(r['mac_addr']) + return list(res)