diff --git a/agent/commands/dhcp.py b/agent/commands/dhcp.py index be40075..210ead8 100644 --- a/agent/commands/dhcp.py +++ b/agent/commands/dhcp.py @@ -10,7 +10,7 @@ def dhcp_commit(client_ip, client_mac, switch_mac, switch_port): dev = Device.objects.get(mac_addr=switch_mac) mngr_class = dev.get_manager_klass() - port = _('') + #port = _('') if mngr_class.is_use_device_port(): port = Port.objects.get(device=dev, num=switch_port) abon = Abon.objects.get(dev_port=port, device=dev) diff --git a/devapp/base_intr.py b/devapp/base_intr.py index 970ae4b..df5d56f 100644 --- a/devapp/base_intr.py +++ b/devapp/base_intr.py @@ -4,6 +4,10 @@ from easysnmp import Session class DevBase(object, metaclass=ABCMeta): + + def __init__(self, dev_instance=None): + self.db_instance = dev_instance + @staticmethod def description(): """Возвращает текстовое описание""" diff --git a/devapp/dev_types.py b/devapp/dev_types.py index a61cfbd..2e01a0b 100644 --- a/devapp/dev_types.py +++ b/devapp/dev_types.py @@ -28,9 +28,9 @@ class DLinkPort(BasePort): class DLinkDevice(DevBase, SNMPBaseWorker): - def __init__(self, ip, snmp_community, ver=2): - DevBase.__init__(self) - SNMPBaseWorker.__init__(self, ip, snmp_community, ver) + def __init__(self, dev_instance): + DevBase.__init__(self, dev_instance) + SNMPBaseWorker.__init__(self, dev_instance.ip_address, dev_instance.man_passw, 2) @staticmethod def description(): @@ -99,9 +99,9 @@ class ONUdev(BasePort): class OLTDevice(DevBase, SNMPBaseWorker): - def __init__(self, ip, snmp_community, ver=2): - DevBase.__init__(self) - SNMPBaseWorker.__init__(self, ip, snmp_community, ver) + def __init__(self, dev_instance): + DevBase.__init__(self, dev_instance) + SNMPBaseWorker.__init__(self, dev_instance.ip_address, dev_instance.man_passw, 2) @staticmethod def description(): @@ -151,6 +151,10 @@ class OLTDevice(DevBase, SNMPBaseWorker): class OnuDevice(DevBase, SNMPBaseWorker): + def __init__(self, dev_instance): + DevBase.__init__(self, dev_instance) + SNMPBaseWorker.__init__(self, dev_instance.ip_address, dev_instance.man_passw, 2) + @staticmethod def description(): return _('PON ONU') @@ -178,6 +182,23 @@ class OnuDevice(DevBase, SNMPBaseWorker): def is_use_device_port(): return False + def get_details(self): + if self.db_instance is None: + return + num = self.db_instance.snmp_item_num + if num == 0: + return + signal = self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % num) + distance = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.27.%d' % num) + mac = ':'.join(['%x' % ord(i) for i in self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.3.%d' % num)]) + return { + 'status': int(self.get_item('.1.3.6.1.2.1.2.2.1.8.%d' % num)), + 'signal': int(signal) / 10 if signal != 'NOSUCHINSTANCE' else 0, + 'name': self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % num), + 'mac': mac, + 'distance': int(distance) / 10 if distance != 'NOSUCHINSTANCE' else 0 + } + class EltexPort(BasePort): diff --git a/devapp/migrations/0005_device_snmp_item_num.py b/devapp/migrations/0005_device_snmp_item_num.py new file mode 100644 index 0000000..e045ae0 --- /dev/null +++ b/devapp/migrations/0005_device_snmp_item_num.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2017-11-07 16:19 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('devapp', '0004_auto_20171103_0006'), + ] + + operations = [ + migrations.AddField( + model_name='device', + name='snmp_item_num', + field=models.PositiveSmallIntegerField(default=0), + ), + ] diff --git a/devapp/models.py b/devapp/models.py index 1033a74..4d60c4e 100644 --- a/devapp/models.py +++ b/devapp/models.py @@ -26,8 +26,8 @@ class DeviceDBException(Exception): class DeviceManager(models.Manager): @staticmethod def wrap_monitoring_info(devices_queryset): - nag_url = getattr(settings, 'NAGIOS_URL') - if nag_url: + 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: @@ -38,7 +38,7 @@ class DeviceManager(models.Manager): 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 + return devices_queryset class Device(models.Model): @@ -50,6 +50,8 @@ class Device(models.Model): user_group = models.ForeignKey('abonapp.AbonGroup', verbose_name=_('User group'), on_delete=models.SET_NULL, null=True, blank=True) parent_dev = models.ForeignKey('self', verbose_name=_('Parent device'), blank=True, null=True, on_delete=models.SET_NULL) + snmp_item_num = models.PositiveSmallIntegerField(_('SNMP Number'), default=0) + objects = DeviceManager() class Meta: @@ -76,6 +78,10 @@ class Device(models.Model): return res return + def get_manager_object(self): + man_klass = self.get_manager_klass() + return man_klass(self) + # Можно-ли подключать устройство к абоненту def has_attachable_to_subscriber(self): mngr_class = self.get_manager_klass() diff --git a/devapp/templates/devapp/custom_dev_page/olt.html b/devapp/templates/devapp/custom_dev_page/olt.html index 84d0a3a..32e0abe 100644 --- a/devapp/templates/devapp/custom_dev_page/olt.html +++ b/devapp/templates/devapp/custom_dev_page/olt.html @@ -5,9 +5,11 @@
- {% if uptime %} + {% with uptime=dev_manager.uptime %} + {% if uptime %} {% trans 'Uptime' %} {{ uptime }} {% endif %} + {% endwith %} diff --git a/devapp/templates/devapp/custom_dev_page/onu.html b/devapp/templates/devapp/custom_dev_page/onu.html index cfc2640..31115c7 100644 --- a/devapp/templates/devapp/custom_dev_page/onu.html +++ b/devapp/templates/devapp/custom_dev_page/onu.html @@ -2,8 +2,9 @@ {% load i18n %} {% block content %} +{% with uptime=dev_manager.uptime onu_details=dev_manager.get_details %}
-
+
{{ dev.get_devtype_display|default:_('Title of the type of switch') }}. @@ -40,6 +41,47 @@
+
+
+
+

{% trans 'ONU Status' %}

+
+ +
+ {% if onu_details %} +
+
+ {% if onu_details.status == 1 %} + + {% elif onu_details.status == 2 %} + + {% else %} + + {% endif %} +
+
+ {% trans 'Name on OLT' %}: {{ onu_details.name }}
+ {% trans 'Distance(m)' %}: {{ onu_details.distance }}
+ {% trans 'Signal' %}: {{ onu_details.signal }}
+ + {% if dev.mac_addr != onu_details.mac %} + + {% trans 'Mac on OLT' %}: {{ onu_details.mac }} +

+
+ {% else %} + {% trans 'Mac on OLT' %}: {{ onu_details.mac }} + {% endif %}
+ +
+
+ {% else %} +

{% trans 'Info does not fetch' %}

+ {% endif %} +
+
+
+{% endwith %} {% endblock %} diff --git a/devapp/templates/devapp/custom_dev_page/ports.html b/devapp/templates/devapp/custom_dev_page/ports.html index e6f8884..1651200 100644 --- a/devapp/templates/devapp/custom_dev_page/ports.html +++ b/devapp/templates/devapp/custom_dev_page/ports.html @@ -5,6 +5,7 @@
+ {% with uptime=dev_manager.uptime %}
{{ dev.get_devtype_display|default:_('Title of the type of switch') }}. {% if uptime %} @@ -12,6 +13,7 @@ {% endif %}
+ {% endwith %}
{% for port in ports %} diff --git a/devapp/templates/devapp/dev.html b/devapp/templates/devapp/dev.html index 310d3a7..07909f9 100644 --- a/devapp/templates/devapp/dev.html +++ b/devapp/templates/devapp/dev.html @@ -51,6 +51,9 @@
+ {% bootstrap_icon 'list-alt' as ic %} + {% bootstrap_field form.snmp_item_num addon_before=ic %} +
+ - +
+ {% trans 'Comment' %} {% if order_by == 'comment' %}{% endif %} {% trans 'Mac address' %}{% trans 'Plugin output' %} {% trans 'Device type' %} @@ -44,16 +45,18 @@ {% for dev in devices %}
- {% if dev.mon.current_state == '0' %} - - {% else %} - - {% endif %} + {% if dev.mon %} + {% if dev.mon.current_state == '0' %} + + {% else %} + + {% endif %} + {% else %}–{% endif %} {{ dev.ip_address }} {{ dev.comment }} {{ dev.mac_addr|default:_('Not assigned') }}{{ dev.mon.plugin_output }}{{ dev.mon.plugin_output|default:'–' }} {{ dev.get_devtype_display }} {% if can_del_dev %} diff --git a/devapp/templates/devapp/ext.htm b/devapp/templates/devapp/ext.htm index 4924e46..7273f5a 100644 --- a/devapp/templates/devapp/ext.htm +++ b/devapp/templates/devapp/ext.htm @@ -19,7 +19,7 @@

{{ dev.comment|default:_('Not assigned') }}

-