Browse Source

Add api for get device info

devel
bashmak 8 years ago
parent
commit
1755b03e9e
  1. 16
      devapp/models.py
  2. 3
      devapp/urls.py
  3. 19
      devapp/views.py

16
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):

3
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())
]

19
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)
Loading…
Cancel
Save