Browse Source

Fix snmp reader

devel
bashmak 8 years ago
parent
commit
3e79f1670a
  1. 3
      devapp/base_intr.py
  2. 49
      devapp/dev_types.py
  3. 8
      devapp/locale/ru/LC_MESSAGES/django.po
  4. 3
      devapp/templates/devapp/add_dev.html
  5. 16
      devapp/templates/devapp/custom_dev_page/olt.html
  6. 58
      devapp/templates/devapp/custom_dev_page/onu.html
  7. 17
      devapp/views.py

3
devapp/base_intr.py

@ -60,8 +60,7 @@ class BasePort(object, metaclass=ABCMeta):
pass pass
def mac(self): def mac(self):
m = self._mac
return "%x:%x:%x:%x:%x:%x" % (ord(m[0]), ord(m[1]), ord(m[2]), ord(m[3]), ord(m[4]), ord(m[5]))
return ':'.join(['%x' % ord(i) for i in self._mac])
class SNMPBaseWorker(object, metaclass=ABCMeta): class SNMPBaseWorker(object, metaclass=ABCMeta):

49
devapp/dev_types.py

@ -2,6 +2,7 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from mydefs import RuTimedelta, safe_int from mydefs import RuTimedelta, safe_int
from datetime import timedelta from datetime import timedelta
from easysnmp import EasySNMPTimeoutError
from .base_intr import DevBase, SNMPBaseWorker, BasePort from .base_intr import DevBase, SNMPBaseWorker, BasePort
@ -115,17 +116,17 @@ class OLTDevice(DevBase, SNMPBaseWorker):
res = [] res = []
for nm in nms: 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)
n = int(nm)
status = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.26.%d' % n)
signal = self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % n)
onu = ONUdev( 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)
num=n,
name=self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % n),
status=True if status == '3' else False,
mac=self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.3.%d' % n),
speed=0,
signal=int(signal) / 10 if signal != 'NOSUCHINSTANCE' else 0,
snmpWorker=self)
res.append(onu) res.append(onu)
return res return res
@ -188,16 +189,24 @@ class OnuDevice(DevBase, SNMPBaseWorker):
num = self.db_instance.snmp_item_num num = self.db_instance.snmp_item_num
if num == 0: if num == 0:
return 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
}
try:
status = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.26.%d' % num)
print('Status', status)
signal = self.get_item('.1.3.6.1.4.1.3320.101.10.5.1.5.%d' % num)
print(signal)
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': status,
'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,
'uptime': RuTimedelta(timedelta(seconds=int(self.get_item('.1.3.6.1.2.1.2.2.1.9.%d' % num)) / 100))
}
except EasySNMPTimeoutError:
return {'err': _('ONU not connected')}
class EltexPort(BasePort): class EltexPort(BasePort):

8
devapp/locale/ru/LC_MESSAGES/django.po

@ -313,3 +313,11 @@ msgstr "Может переключать порты"
msgid "Plugin output" msgid "Plugin output"
msgstr "Вывод мониторинга" msgstr "Вывод мониторинга"
msgid "Create device"
msgstr "Создать устройство"
msgid "ONU error"
msgstr "ONU ошибка"
msgid "ONU not connected"
msgstr "ONU не в сети"

3
devapp/templates/devapp/add_dev.html

@ -54,6 +54,9 @@
</div> </div>
</div> </div>
{% bootstrap_icon 'list-alt' as ic %}
{% bootstrap_field form.snmp_item_num addon_before=ic %}
<div class="btn-group btn-group-sm"> <div class="btn-group btn-group-sm">
<button type="submit" class="btn btn-primary"> <button type="submit" class="btn btn-primary">
<span class="glyphicon glyphicon-save"></span> {% trans 'Save' %} <span class="glyphicon glyphicon-save"></span> {% trans 'Save' %}

16
devapp/templates/devapp/custom_dev_page/olt.html

@ -13,12 +13,11 @@
<table class="table table-striped table-bordered"> <table class="table table-striped table-bordered">
<thead> <thead>
<tr> <tr>
<th width="10">#</th>
<th>{% trans 'Mac' %}</th>
<th>{% trans 'Name' %}</th>
<th>{% trans 'Distance(m)' %}</th>
<th width="250">{% trans 'Signal' %}</th>
<th width="10">#</th>
<th class="col-xs-1">#</th>
<th class="col-xs-4">{% trans 'Name' %}</th>
<th class="col-xs-4">{% trans 'Mac' %}</th>
<th class="col-xs-2">{% trans 'Signal' %}</th>
<th class="col-xs-1">#</th>
</tr> </tr>
</thead> </thead>
@ -30,12 +29,11 @@
{% else %}<span class="glyphicon glyphicon-warning-sign text-danger"></span> {% else %}<span class="glyphicon glyphicon-warning-sign text-danger"></span>
{% endif %} {% endif %}
</td> </td>
<td>{{ port.mac }}</td>
<td>{{ port.nm }}</td> <td>{{ port.nm }}</td>
<td>{{ port.sp }}</td>
<td>{{ port.mac }}</td>
<td>{{ port.signal }}</td> <td>{{ port.signal }}</td>
<td> <td>
<a href="{% url 'devapp:add' grp %}?mac={{ port.mac }}&t=On&c={{ port.nm }}&ip={{ dip }}" title="Создать устройство">
<a href="{% url 'devapp:add' grp %}?mac={{ port.mac }}&t=On&c={{ port.nm }}&ip={{ dip }}&n={{ port.num }}" title="{% trans 'Create device' %}">
<span class="glyphicon glyphicon-plus"></span> <span class="glyphicon glyphicon-plus"></span>
</a> </a>
</td> </td>

58
devapp/templates/devapp/custom_dev_page/onu.html

@ -49,32 +49,42 @@
<div class="panel-body"> <div class="panel-body">
{% if onu_details %} {% if onu_details %}
<div class="media">
<div class="media-left">
{% if onu_details.status == 1 %}
<span class="media-object glyphicon glyphicon-ok-sign text-success" style="font-size: 75px;"></span>
{% elif onu_details.status == 2 %}
<span class="media-object glyphicon glyphicon-remove-sign text-danger" style="font-size: 75px;"></span>
{% else %}
<span class="media-object glyphicon glyphicon-question-sign" style="font-size: 75px;"></span>
{% endif %}
</div>
<div class="media-body">
<b>{% trans 'Name on OLT' %}</b>: {{ onu_details.name }}<br>
<b>{% trans 'Distance(m)' %}</b>: {{ onu_details.distance }}<br>
<b>{% trans 'Signal' %}</b>: {{ onu_details.signal }}<br>
{% if onu_details.err %}
<div class="media">
<div class="media-left"><span class="media-object glyphicon glyphicon-remove-sign text-danger" style="font-size: 75px;"></span></div>
</div>
<div class="media-body">
<b>{% trans 'ONU error' %}</b>: {{ onu_details.err }}<br>
</div>
{% else %}
<div class="media">
<div class="media-left">
{% if onu_details.status == '3' %}
<span class="media-object glyphicon glyphicon-ok-sign text-success" style="font-size: 75px;"></span>
{% elif onu_details.status == '2' %}
<span class="media-object glyphicon glyphicon-remove-sign text-danger" style="font-size: 75px;"></span>
{% else %}
<span class="media-object glyphicon glyphicon-question-sign" style="font-size: 75px;"></span>
{% endif %}
</div>
<div class="media-body">
<b>{% trans 'Name on OLT' %}</b>: {{ onu_details.name }}<br>
<b>{% trans 'Distance(m)' %}</b>: {{ onu_details.distance }}<br>
<b>{% trans 'Signal' %}</b>: {{ onu_details.signal }}<br>
<b>{% trans 'Uptime' %}</b>: {{ onu_details.uptime }}<br>
{% if dev.mac_addr != onu_details.mac %}
<span class="text-danger">
<b>{% trans 'Mac on OLT' %}</b>: {{ onu_details.mac }}
<h4 class="glyphicon glyphicon-exclamation-sign" title="{% trans 'Mac-addresses does not match' %}" data-toggle="tooltip"></h4>
</span>
{% else %}
<b>{% trans 'Mac on OLT' %}</b>: {{ onu_details.mac }}
{% endif %}<br>
{% if dev.mac_addr != onu_details.mac %}
<span class="text-danger">
<b>{% trans 'Mac on OLT' %}</b>: {{ onu_details.mac }}
<h4 class="glyphicon glyphicon-exclamation-sign" title="{% trans 'Mac-addresses does not match' %}" data-toggle="tooltip"></h4>
</span>
{% else %}
<b>{% trans 'Mac on OLT' %}</b>: {{ onu_details.mac }}
{% endif %}<br>
</div>
</div>
</div>
</div>
{% endif %}
{% else %} {% else %}
<h3>{% trans 'Info does not fetch' %}</h3> <h3>{% trans 'Info does not fetch' %}</h3>
{% endif %} {% endif %}

17
devapp/views.py

@ -115,7 +115,8 @@ def dev(request, grp, devid=0):
'mac_addr': request.GET.get('mac'), 'mac_addr': request.GET.get('mac'),
'comment': request.GET.get('c'), 'comment': request.GET.get('c'),
'ip_address': request.GET.get('ip'), 'ip_address': request.GET.get('ip'),
'man_passw': getattr(settings, 'DEFAULT_SNMP_PASSWORD', '')
'man_passw': getattr(settings, 'DEFAULT_SNMP_PASSWORD', ''),
'snmp_item_num': request.GET.get('n')
}) })
else: else:
frm = DeviceForm(instance=devinst) frm = DeviceForm(instance=devinst)
@ -326,18 +327,18 @@ def devview(request, did):
messages.warning(request, _('Not Set snmp device password')) messages.warning(request, _('Not Set snmp device password'))
else: else:
messages.error(request, _('Dot was not pinged')) messages.error(request, _('Dot was not pinged'))
except EasySNMPTimeoutError:
messages.error(request, _('wait for a reply from the SNMP Timeout'))
return render(request, 'devapp/custom_dev_page/' + template_name, {
'dev': dev,
'ports': ports,
'dev_accs': Abon.objects.filter(device=dev),
'dev_manager': manager
})
except EasySNMPError: except EasySNMPError:
messages.error(request, _('SNMP error on device')) messages.error(request, _('SNMP error on device'))
except DeviceDBException as e: except DeviceDBException as e:
messages.error(request, e) messages.error(request, e)
return render(request, 'devapp/custom_dev_page/' + template_name, { return render(request, 'devapp/custom_dev_page/' + template_name, {
'dev': dev,
'ports': ports,
'dev_accs': Abon.objects.filter(device=dev),
'dev_manager': manager
'dev': dev
}) })

Loading…
Cancel
Save