From 174e9c43dd0086639f17f8ef3533211b926d8768 Mon Sep 17 00:00:00 2001 From: bashmak Date: Thu, 5 Apr 2018 18:46:56 +0300 Subject: [PATCH] fetch device status from model field instead of sync request --- devapp/models.py | 29 ++------------------------ mapapp/templates/maps/map_tooltip.html | 4 ++-- mapapp/views.py | 1 - 3 files changed, 4 insertions(+), 30 deletions(-) diff --git a/devapp/models.py b/devapp/models.py index 501ffc2..3dfff5e 100644 --- a/devapp/models.py +++ b/devapp/models.py @@ -1,14 +1,12 @@ # -*- coding: utf-8 -*- -import requests -from django.db import models, ProgrammingError +from django.db import models from djing.fields import MACAddressField from .base_intr import DevBase -from mydefs import MyGenericIPAddressField, MyChoicesAdapter, ip2int +from mydefs import MyGenericIPAddressField, MyChoicesAdapter from . import dev_types from subprocess import run from django.conf import settings from django.utils.translation import gettext_lazy as _ -from json.decoder import JSONDecodeError from group_app.models import Group @@ -28,24 +26,6 @@ class DeviceMonitoringException(Exception): pass -class DeviceManager(models.Manager): - @staticmethod - def wrap_monitoring_info(devices_queryset): - nag_url = getattr(settings, 'NAGIOS_URL', None) - if nag_url is not None: - addrs = ['h=%s' % hex(ip2int(dev.ip_address))[2:] for dev in devices_queryset] - url = '%s/host/status/arr?%s' % (nag_url, '&'.join(addrs)) - try: - res = requests.get(url).json() - except (requests.exceptions.ConnectionError, JSONDecodeError) as e: - raise DeviceMonitoringException(e) - for dev in devices_queryset: - inf = [x for x in res if x.get('address') == dev.ip_address] - if len(inf) > 0: - setattr(dev, 'mon', inf[0].get('current_status')) - return devices_queryset - - class Device(models.Model): ip_address = MyGenericIPAddressField(verbose_name=_('Ip address')) mac_addr = MACAddressField(verbose_name=_('Mac address'), null=True, blank=True, unique=True) @@ -67,8 +47,6 @@ class Device(models.Model): is_noticeable = models.BooleanField(_('Send notify when monitoring state changed'), default=False) - objects = DeviceManager() - class Meta: db_table = 'dev' permissions = ( @@ -159,6 +137,3 @@ class Port(models.Model): ) verbose_name = _('Port') verbose_name_plural = _('Ports') - - - diff --git a/mapapp/templates/maps/map_tooltip.html b/mapapp/templates/maps/map_tooltip.html index bd4ba9b..44f5656 100644 --- a/mapapp/templates/maps/map_tooltip.html +++ b/mapapp/templates/maps/map_tooltip.html @@ -3,9 +3,9 @@
{% for dev in devs %} - {% if dev.mon.current_state == '0' %} + {% if dev.status == 'up' %} - {% else %} + {% elif dev.status == 'dwn' or dev.status == 'unr' %} {% endif %} {{ dev.comment }} {{ dev.mon.plugin_output }} diff --git a/mapapp/views.py b/mapapp/views.py index 56d3d24..ca580e6 100644 --- a/mapapp/views.py +++ b/mapapp/views.py @@ -177,7 +177,6 @@ def dot_tooltip(request): try: dot = Dot.objects.get(id=d) devs = dot.devices.all() - devs = Device.objects.wrap_monitoring_info(devs) except Dot.DoesNotExist: pass return render_to_text('maps/map_tooltip.html', {