diff --git a/abonapp/templates/abonapp/buy_tariff.html b/abonapp/templates/abonapp/buy_tariff.html index f6782e9..dfbcc66 100644 --- a/abonapp/templates/abonapp/buy_tariff.html +++ b/abonapp/templates/abonapp/buy_tariff.html @@ -29,7 +29,7 @@ diff --git a/agent/structs.py b/agent/structs.py index 2bb2efa..eda9d10 100644 --- a/agent/structs.py +++ b/agent/structs.py @@ -53,8 +53,8 @@ class TariffStruct(BaseStruct): def __init__(self, tariff_id=0, speedIn=None, speedOut=None): self.tid = tariff_id - self.speedIn = speedIn if speedIn is not None else 0.0625 - self.speedOut = speedOut if speedOut is not None else 0.0625 + self.speedIn = speedIn if speedIn is not None else 0.001 + self.speedOut = speedOut if speedOut is not None else 0.001 def serialize(self): dt = pack("!Iff", int(self.tid), float(self.speedIn), float(self.speedOut)) diff --git a/devapp/base_intr.py b/devapp/base_intr.py index e3f72f0..37b1218 100644 --- a/devapp/base_intr.py +++ b/devapp/base_intr.py @@ -24,6 +24,10 @@ class DevBase(object, metaclass=ABCMeta): def uptime(self): pass + @abstractmethod + def get_template_name(self): + """Получаем путь к html шаблону отображения устройства""" + class BasePort(object, metaclass=ABCMeta): def __init__(self, num, name, status, mac, speed): diff --git a/devapp/dev_types.py b/devapp/dev_types.py index b1b4221..b5700ee 100644 --- a/devapp/dev_types.py +++ b/devapp/dev_types.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from django.utils.translation import ugettext_lazy as _ from mydefs import RuTimedelta, safe_int from datetime import timedelta from .base_intr import DevBase, SNMPBaseWorker, BasePort @@ -50,7 +51,7 @@ class DLinkDevice(DevBase, SNMPBaseWorker): @staticmethod def description(): - return "Свич D'Link" + return _('DLink switch') def reboot(self): pass @@ -66,9 +67,9 @@ class DLinkDevice(DevBase, SNMPBaseWorker): status = True if int(stats[n]) == 1 else False res.append(DLinkPort( n+1, - nams[n] if len(nams) > 0 else 'не получил имя', + nams[n] if len(nams) > 0 else _('does not fetch the name'), status, - macs[n] if len(macs) > 0 else 'не нашёл мак', + macs[n] if len(macs) > 0 else _('does not fetch the mac'), int(speeds[n]) if len(speeds) > 0 else 0, self)) return res @@ -78,10 +79,77 @@ class DLinkDevice(DevBase, SNMPBaseWorker): def uptime(self): uptimestamp = safe_int(self.get_item(oids['uptime'])) - tm = RuTimedelta(timedelta(seconds=uptimestamp/100)) or RuTimedelta() + tm = RuTimedelta(timedelta(seconds=uptimestamp/100)) or RuTimedelta(timedelta()) return tm + def get_template_name(self): + return 'devapp/ports.html' + + +class ONUdev(BasePort): + def __init__(self, num, name, status, mac, speed, signal, snmpWorker): + BasePort.__init__(self, num, name, status, mac, speed) + assert issubclass(snmpWorker.__class__ , SNMPBaseWorker) + self.snmp_worker = snmpWorker + self.signal = signal + + # выключаем этот порт + def disable(self): + pass + + # включаем этот порт + def enable(self): + pass + + def __str__(self): + return "%d: '%s' %s" % (self.num, self.nm, self.mac()) + + +class OLTDevice(DevBase, SNMPBaseWorker): + + def __init__(self, ip, snmp_community, ver=2): + DevBase.__init__(self) + SNMPBaseWorker.__init__(self, ip, snmp_community, ver) + + @staticmethod + def description(): + return _('PON ONU') + + def reboot(self): + pass + + def get_ports(self): + nms = self.get_list('.1.3.6.1.4.1.3320.101.10.1.1.79') + + res = [] + for nm in nms: + nm = int(nm) + status = int(self.get_item('.1.3.6.1.2.1.2.2.1.8.%d' % nm)) + signal = self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % nm) + onu = ONUdev( + nm, + self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % nm), + True if status == 1 else False, + self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.3.%d' % nm), + self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.27.%d' % nm), + int(signal) / 10 if signal != 'NOSUCHINSTANCE' else 0, + self) + res.append(onu) + return res + + def get_device_name(self): + return self.get_item('.1.3.6.1.2.1.1.5.0') + + def uptime(self): + uptimestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.9.1.4.1')) + tm = RuTimedelta(timedelta(seconds=uptimestamp/100)) or RuTimedelta(timedelta()) + return tm + + def get_template_name(self): + return 'devapp/olt.html' + DEVICE_TYPES = ( ('Dl', DLinkDevice), + ('Pn', OLTDevice) ) diff --git a/devapp/locale/ru/LC_MESSAGES/django.po b/devapp/locale/ru/LC_MESSAGES/django.po index 2499c09..5c0d5eb 100644 --- a/devapp/locale/ru/LC_MESSAGES/django.po +++ b/devapp/locale/ru/LC_MESSAGES/django.po @@ -187,3 +187,30 @@ msgstr "Порты" msgid "Edit" msgstr "Редактировать" + +msgid "PON ONU" +msgstr "ONU Голова" + +msgid "does not fetch the name" +msgstr "не получил имя" + +msgid "does not fetch the mac" +msgstr "не нашёл мак" + +msgid "Ports not found" +msgstr "Онушки не получил" + +msgid "DLink switch" +msgstr "Свич D'Link" + +msgid "Mac" +msgstr "Мак" + +msgid "Name" +msgstr "Имя" + +msgid "Distance(m)" +msgstr "Расстояние (м)" + +msgid "Signal" +msgstr "Ур. сигнала" diff --git a/devapp/migrations/0005_auto_20170502_2232.py b/devapp/migrations/0005_auto_20170502_2232.py new file mode 100644 index 0000000..104ce71 --- /dev/null +++ b/devapp/migrations/0005_auto_20170502_2232.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2017-05-02 19:32 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('devapp', '0004_device_user_group'), + ] + + operations = [ + migrations.AlterField( + model_name='device', + name='devtype', + field=models.CharField(choices=[('Dl', 'DLink switch'), ('Pn', 'PON ONU')], default='Dl', max_length=2), + ), + ] diff --git a/devapp/templates/devapp/olt.html b/devapp/templates/devapp/olt.html new file mode 100644 index 0000000..f47a296 --- /dev/null +++ b/devapp/templates/devapp/olt.html @@ -0,0 +1,44 @@ +{% extends request.is_ajax|yesno:'nullcont.htm,devapp/ext.htm' %} +{% load i18n %} +{% block content %} + + +
+
+
+ + + + + + + + + + + + + {% for port in ports %} + + + + + + + + {% empty %} + + + + {% endfor %} + + +
#{% trans 'Mac' %}{% trans 'Name' %}{% trans 'Distance(m)' %}{% trans 'Signal' %}
{% if port.st %} + {% else %} + {% endif %} + {{ port.mac }}{{ port.nm }}{{ port.sp }}{{ port.signal }}
{% trans 'Ports not found' %}
+
+
+
+ +{% endblock %} diff --git a/devapp/views.py b/devapp/views.py index 01d65b3..65126a4 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -102,12 +102,14 @@ def devview(request, did): ports = None uptime = 0 dev = get_object_or_404(Device, id=did) + template_name = 'devapp/ports.html' try: if ping(dev.ip_address): if dev.man_passw: manager = dev.get_manager_klass()(dev.ip_address, dev.man_passw) uptime = manager.uptime() ports = manager.get_ports() + template_name = manager.get_template_name() else: messages.warning(request, _('Not Set snmp device password')) else: @@ -117,7 +119,7 @@ def devview(request, did): except EasySNMPError: messages.error(request, _('SNMP error on device')) - return render(request, 'devapp/ports.html', { + return render(request, template_name, { 'dev': dev, 'ports': ports, 'uptime': uptime diff --git a/tariff_app/migrations/0005_auto_20170502_2229.py b/tariff_app/migrations/0005_auto_20170502_2229.py new file mode 100644 index 0000000..7b0ba08 --- /dev/null +++ b/tariff_app/migrations/0005_auto_20170502_2229.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2017-05-02 19:29 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tariff_app', '0004_auto_20170416_0350'), + ] + + operations = [ + migrations.AlterField( + model_name='tariff', + name='calc_type', + field=models.CharField(choices=[('Df', 'Базовый расчётный функционал'), ('Dp', 'IS'), ('Cp', 'Для внутреннего пользования')], default='Df', max_length=2), + ), + ]