Browse Source

refactoring dev

devel
Dmitry Novikov 7 years ago
parent
commit
2769936e92
  1. 12
      devapp/base_intr.py
  2. 35
      devapp/dev_types.py
  3. 4
      devapp/templates/devapp/custom_dev_page/generic_switch.html
  4. 8
      djing/lib/__init__.py
  5. 2
      docs/dev.md

12
devapp/base_intr.py

@ -5,6 +5,8 @@ from easysnmp import Session
from django.utils.translation import gettext, gettext_lazy as _ from django.utils.translation import gettext, gettext_lazy as _
from djing.lib import RuTimedelta
ListOrError = Union[ ListOrError = Union[
Iterable, Iterable,
Union[Exception, Iterable] Union[Exception, Iterable]
@ -93,17 +95,23 @@ class DevBase(object, metaclass=ABCMeta):
class BasePort(object, metaclass=ABCMeta): class BasePort(object, metaclass=ABCMeta):
__slots__ = 'num', 'snmp_num', 'nm', 'st', '_mac', 'sp', 'writable'
__slots__ = 'num', 'snmp_num', 'nm', 'st', '_mac', 'sp', 'uptime', 'writable'
def __init__(self, num, name, status, mac, speed, snmp_num=None, writable=False):
def __init__(self, num, name, status, mac, speed, uptime: int=None, snmp_num=None, writable=False):
self.num = int(num) self.num = int(num)
self.snmp_num = int(num) if snmp_num is None else int(snmp_num) self.snmp_num = int(num) if snmp_num is None else int(snmp_num)
self.nm = name self.nm = name
self.st = status self.st = status
self._mac = mac self._mac = mac
self.sp = speed self.sp = speed
self.uptime = int(uptime) if uptime else None
self.writable = writable self.writable = writable
def uptime_str(self):
if self.uptime:
return str(RuTimedelta(seconds=self.uptime / 100))
return ''
@abstractmethod @abstractmethod
def disable(self): def disable(self):
pass pass

35
devapp/dev_types.py

@ -1,7 +1,6 @@
import os import os
import re import re
from typing import AnyStr, Iterable, Optional, Dict from typing import AnyStr, Iterable, Optional, Dict
from datetime import timedelta
from easysnmp import EasySNMPTimeoutError from easysnmp import EasySNMPTimeoutError
from pexpect import TIMEOUT from pexpect import TIMEOUT
from transliterate import translit from transliterate import translit
@ -106,20 +105,22 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
)), None )), None
def get_ports(self) -> ListOrError: def get_ports(self) -> ListOrError:
interfaces_count = safe_int(self.get_item('.1.3.6.1.2.1.2.1.0'))
nams = tuple(self.get_list('.1.3.6.1.4.1.171.10.134.2.1.1.100.2.1.3'))
stats = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.7'))
macs = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.6'))
speeds = tuple(self.get_list('.1.3.6.1.2.1.2.2.1.5'))
ints = self.get_list('.1.3.6.1.2.1.10.7.2.1.1')
nams = self.get_list('.1.3.6.1.2.1.2.2.1.2')
stats = self.get_list('.1.3.6.1.2.1.2.2.1.7')
macs = self.get_list('.1.3.6.1.2.1.2.2.1.6')
speeds = self.get_list('.1.3.6.1.2.1.2.2.1.5')
uptimes = self.get_list('.1.3.6.1.2.1.2.2.1.9')
try: try:
for n in range(interfaces_count):
status = True if int(stats[n]) == 1 else False
for num in ints:
status = True if int(next(stats)) == 1 else False
yield DLinkPort( yield DLinkPort(
num=n + 1,
name=nams[n] if len(nams) > 0 else '',
num=num,
name=next(nams),
status=status, status=status,
mac=macs[n] if len(macs) > 0 else _('does not fetch the mac'),
speed=int(speeds[n]) if len(speeds) > 0 else 0,
mac=next(macs),
speed=int(next(speeds)),
uptime=next(uptimes),
snmp_worker=self) snmp_worker=self)
except IndexError: except IndexError:
return DeviceImplementationError('Dlink port index error') return DeviceImplementationError('Dlink port index error')
@ -127,9 +128,9 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
def get_device_name(self): def get_device_name(self):
return self.get_item('.1.3.6.1.2.1.1.1.0') return self.get_item('.1.3.6.1.2.1.1.1.0')
def uptime(self) -> timedelta:
def uptime(self):
uptimestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.8.0')) uptimestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.8.0'))
tm = RuTimedelta(timedelta(seconds=uptimestamp / 100)) or RuTimedelta(timedelta())
tm = RuTimedelta(seconds=uptimestamp / 100)
return tm return tm
def get_template_name(self): def get_template_name(self):
@ -203,7 +204,7 @@ class OLTDevice(DevBase, SNMPBaseWorker):
def uptime(self): def uptime(self):
up_timestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.9.1.4.1')) up_timestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.9.1.4.1'))
tm = RuTimedelta(timedelta(seconds=up_timestamp / 100)) or RuTimedelta(timedelta())
tm = RuTimedelta(seconds=up_timestamp / 100)
return tm return tm
def get_template_name(self): def get_template_name(self):
@ -358,7 +359,7 @@ class EltexSwitch(DLinkDevice):
def uptime(self): def uptime(self):
uptimestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0')) uptimestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0'))
tm = RuTimedelta(timedelta(seconds=uptimestamp / 100)) or RuTimedelta(timedelta())
tm = RuTimedelta(seconds=uptimestamp / 100)
return tm return tm
def monitoring_template(self, *args, **kwargs) -> Optional[str]: def monitoring_template(self, *args, **kwargs) -> Optional[str]:
@ -429,7 +430,7 @@ class Olt_ZTE_C320(OLTDevice):
def uptime(self): def uptime(self):
up_timestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0')) up_timestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0'))
tm = RuTimedelta(timedelta(seconds=up_timestamp / 100)) or RuTimedelta(timedelta())
tm = RuTimedelta(seconds=up_timestamp / 100)
return tm return tm
def get_long_description(self): def get_long_description(self):

4
devapp/templates/devapp/custom_dev_page/generic_switch.html

@ -21,15 +21,19 @@
{% if port.sp == 10000000 %} {% if port.sp == 10000000 %}
<div class="port kilo text-center"> <div class="port kilo text-center">
<b>10 mbps</b> <b>10 mbps</b>
<span>{{ port.uptime_str }}</span>
{% elif port.sp == 100000000 %} {% elif port.sp == 100000000 %}
<div class="port mega text-center"> <div class="port mega text-center">
<b>100 mbps</b> <b>100 mbps</b>
<span>{{ port.uptime_str }}</span>
{% elif port.sp == 1000000000 %} {% elif port.sp == 1000000000 %}
<div class="port giga text-center"> <div class="port giga text-center">
<b>1 gbps</b> <b>1 gbps</b>
<span>{{ port.uptime_str }}</span>
{% elif port.sp == 10000000000 %} {% elif port.sp == 10000000000 %}
<div class="port ten text-center"> <div class="port ten text-center">
<b>10 gbps</b> <b>10 gbps</b>
<span>{{ port.uptime_str }}</span>
{% else %} {% else %}
<div class="port text-center"> <div class="port text-center">
{% endif %} {% endif %}

8
djing/lib/__init__.py

@ -37,14 +37,6 @@ class MyChoicesAdapter(Iterator):
# Russian localized timedelta # Russian localized timedelta
class RuTimedelta(timedelta): class RuTimedelta(timedelta):
def __new__(cls, tm):
if isinstance(tm, timedelta):
return timedelta.__new__(
cls,
days=tm.days,
seconds=tm.seconds,
microseconds=tm.microseconds
)
def __str__(self): def __str__(self):
# hours, remainder = divmod(self.seconds, 3600) # hours, remainder = divmod(self.seconds, 3600)

2
docs/dev.md

@ -69,7 +69,7 @@ class EltexSwitch(DLinkDevice):
def uptime(self): def uptime(self):
uptimestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0')) uptimestamp = safe_int(self.get_item('.1.3.6.1.2.1.1.3.0'))
tm = RuTimedelta(timedelta(seconds=uptimestamp/100)) or RuTimedelta(timedelta())
tm = RuTimedelta(seconds=uptimestamp/100)
return tm return tm
def monitoring_template(self, *args, **kwargs) -> Optional[str]: def monitoring_template(self, *args, **kwargs) -> Optional[str]:

Loading…
Cancel
Save