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 djing.lib import RuTimedelta
ListOrError = Union[
Iterable,
Union[Exception, Iterable]
@ -93,17 +95,23 @@ class DevBase(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.snmp_num = int(num) if snmp_num is None else int(snmp_num)
self.nm = name
self.st = status
self._mac = mac
self.sp = speed
self.uptime = int(uptime) if uptime else None
self.writable = writable
def uptime_str(self):
if self.uptime:
return str(RuTimedelta(seconds=self.uptime / 100))
return ''
@abstractmethod
def disable(self):
pass

35
devapp/dev_types.py

@ -1,7 +1,6 @@
import os
import re
from typing import AnyStr, Iterable, Optional, Dict
from datetime import timedelta
from easysnmp import EasySNMPTimeoutError
from pexpect import TIMEOUT
from transliterate import translit
@ -106,20 +105,22 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
)), None
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:
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(
num=n + 1,
name=nams[n] if len(nams) > 0 else '',
num=num,
name=next(nams),
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)
except IndexError:
return DeviceImplementationError('Dlink port index error')
@ -127,9 +128,9 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
def get_device_name(self):
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'))
tm = RuTimedelta(timedelta(seconds=uptimestamp / 100)) or RuTimedelta(timedelta())
tm = RuTimedelta(seconds=uptimestamp / 100)
return tm
def get_template_name(self):
@ -203,7 +204,7 @@ class OLTDevice(DevBase, SNMPBaseWorker):
def uptime(self):
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
def get_template_name(self):
@ -358,7 +359,7 @@ class EltexSwitch(DLinkDevice):
def uptime(self):
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
def monitoring_template(self, *args, **kwargs) -> Optional[str]:
@ -429,7 +430,7 @@ class Olt_ZTE_C320(OLTDevice):
def uptime(self):
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
def get_long_description(self):

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

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

8
djing/lib/__init__.py

@ -37,14 +37,6 @@ class MyChoicesAdapter(Iterator):
# Russian localized 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):
# hours, remainder = divmod(self.seconds, 3600)

2
docs/dev.md

@ -69,7 +69,7 @@ class EltexSwitch(DLinkDevice):
def uptime(self):
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
def monitoring_template(self, *args, **kwargs) -> Optional[str]:

Loading…
Cancel
Save