Browse Source

Merge branch 'devel' of https://github.com/nerosketch/djing into devel

devel
bashmak 9 years ago
parent
commit
a8d8e4426a
  1. 2
      abonapp/templates/abonapp/buy_tariff.html
  2. 4
      agent/structs.py
  3. 4
      devapp/base_intr.py
  4. 76
      devapp/dev_types.py
  5. 27
      devapp/locale/ru/LC_MESSAGES/django.po
  6. 20
      devapp/migrations/0005_auto_20170502_2232.py
  7. 44
      devapp/templates/devapp/olt.html
  8. 4
      devapp/views.py
  9. 20
      tariff_app/migrations/0005_auto_20170502_2229.py

2
abonapp/templates/abonapp/buy_tariff.html

@ -29,7 +29,7 @@
<select class="form-control" name="tariff" id="id_tariffs">
{% for trf in tariffs %}
<option value="{{ trf.pk }}" data-deadline="{{ trf.calc_deadline|date:"Y-m-d" }}">
{{ trf.title }}. {{ trf.amount }}{% trans 'currency' %}
{{ trf.title }}. {{ trf.amount }}{% trans 'currency' %} (Вх:{{ trf.speedIn }}MBit/s. Исх:{{ trf.speedOut }} MBit/s)
</option>
{% endfor %}
</select>

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

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

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

27
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 "Ур. сигнала"

20
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),
),
]

44
devapp/templates/devapp/olt.html

@ -0,0 +1,44 @@
{% extends request.is_ajax|yesno:'nullcont.htm,devapp/ext.htm' %}
{% load i18n %}
{% block content %}
<div class="row">
<div class="col-sm-12">
<div class="table-responsive">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th width="50">#</th>
<th>{% trans 'Mac' %}</th>
<th>{% trans 'Name' %}</th>
<th>{% trans 'Distance(m)' %}</th>
<th width="250">{% trans 'Signal' %}</th>
</tr>
</thead>
<tbody>
{% for port in ports %}
<tr>
<td>{% if port.st %}<span class="glyphicon glyphicon-ok text-success"></span>
{% else %}<span class="glyphicon glyphicon-remove text-danger"></span>
{% endif %}
</td>
<td>{{ port.mac }}</td>
<td>{{ port.nm }}</td>
<td>{{ port.sp }}</td>
<td>{{ port.signal }}</td>
</tr>
{% empty %}
<tr>
<td colspan="5">{% trans 'Ports not found' %}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
{% endblock %}

4
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

20
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),
),
]
Loading…
Cancel
Save