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

49
devapp/dev_types.py

@ -2,6 +2,7 @@
from django.utils.translation import ugettext_lazy as _
from mydefs import RuTimedelta, safe_int
from datetime import timedelta
from easysnmp import EasySNMPTimeoutError
from .base_intr import DevBase, SNMPBaseWorker, BasePort
@ -115,17 +116,17 @@ class OLTDevice(DevBase, SNMPBaseWorker):
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)
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(
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)
return res
@ -188,16 +189,24 @@ class OnuDevice(DevBase, SNMPBaseWorker):
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
}
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):

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

@ -313,3 +313,11 @@ msgstr "Может переключать порты"
msgid "Plugin output"
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>
{% bootstrap_icon 'list-alt' as ic %}
{% bootstrap_field form.snmp_item_num addon_before=ic %}
<div class="btn-group btn-group-sm">
<button type="submit" class="btn btn-primary">
<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">
<thead>
<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>
</thead>
@ -30,12 +29,11 @@
{% else %}<span class="glyphicon glyphicon-warning-sign text-danger"></span>
{% endif %}
</td>
<td>{{ port.mac }}</td>
<td>{{ port.nm }}</td>
<td>{{ port.sp }}</td>
<td>{{ port.mac }}</td>
<td>{{ port.signal }}</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>
</a>
</td>

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

@ -49,32 +49,42 @@
<div class="panel-body">
{% 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 %}
<h3>{% trans 'Info does not fetch' %}</h3>
{% endif %}

17
devapp/views.py

@ -115,7 +115,8 @@ def dev(request, grp, devid=0):
'mac_addr': request.GET.get('mac'),
'comment': request.GET.get('c'),
'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:
frm = DeviceForm(instance=devinst)
@ -326,18 +327,18 @@ def devview(request, did):
messages.warning(request, _('Not Set snmp device password'))
else:
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:
messages.error(request, _('SNMP error on device'))
except DeviceDBException as e:
messages.error(request, e)
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