Browse Source

make reboot button for dlink

devel
Dmitry Novikov 7 years ago
parent
commit
8c5a0de5b8
  1. 9
      devapp/base_intr.py
  2. 18
      devapp/dev_types.py
  3. 11
      devapp/locale/ru/LC_MESSAGES/django.po
  4. 21
      devapp/views.py
  5. 2
      djing/lib/__init__.py

9
devapp/base_intr.py

@ -3,7 +3,7 @@ from datetime import timedelta
from typing import Union, Iterable, AnyStr, Generator, Optional, Dict
from easysnmp import Session
from django.utils.translation import gettext
from django.utils.translation import gettext, gettext_lazy as _
ListOrError = Union[
Iterable,
@ -34,7 +34,12 @@ class DevBase(object, metaclass=ABCMeta):
@abstractmethod
def reboot(self, save_before_reboot=False):
pass
"""
Send signal reboot to device
:param save_before_reboot:
:return: tuple of command return number and text of operation
"""
return 5, _('Reboot not ready')
@abstractmethod
def get_ports(self) -> ListOrError:

18
devapp/dev_types.py

@ -87,7 +87,10 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
def reboot(self, save_before_reboot=False):
dat = self.db_instance.extra_data
if dat is None:
return
raise DeviceConfigurationError(
_('You have not info in extra_data '
'field, please fill it in JSON')
)
login = dat.get('login')
passw = dat.get('password')
if login and passw:
@ -95,7 +98,7 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
self.db_instance.ip_address,
login, passw,
1 if save_before_reboot else 0
))
)), None
def get_ports(self) -> ListOrError:
interfaces_count = safe_int(self.get_item('.1.3.6.1.2.1.2.1.0'))
@ -167,9 +170,6 @@ class OLTDevice(DevBase, SNMPBaseWorker):
DevBase.__init__(self, dev_instance)
SNMPBaseWorker.__init__(self, dev_instance.ip_address, dev_instance.man_passw, 2)
def reboot(self, save_before_reboot=False):
pass
def get_ports(self) -> ListOrError:
nms = self.get_list('.1.3.6.1.4.1.3320.101.10.1.1.79')
res = []
@ -238,9 +238,6 @@ class OnuDevice(DevBase, SNMPBaseWorker):
))
SNMPBaseWorker.__init__(self, dev_ip_addr, dev_instance.man_passw, 2)
def reboot(self, save_before_reboot=False):
pass
def get_ports(self) -> ListOrError:
return ()
@ -365,7 +362,7 @@ class EltexSwitch(DLinkDevice):
return plain_ip_device_mon_template(device)
def reboot(self, save_before_reboot=False):
pass
return DevBase.reboot(self, save_before_reboot)
def conv_signal(lvl: int) -> float:
@ -607,6 +604,3 @@ class HuaweiSwitch(EltexSwitch):
)
ep.writable = True
yield ep
def reboot(self, save_before_reboot=False):
pass

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

@ -229,7 +229,7 @@ msgstr "Сбросить форму"
#: templates/devapp/custom_dev_page/onu_for_zte.html:12
#: templates/devapp/custom_dev_page/ports.html:12
msgid "Uptime"
msgstr "Без перезагрузки"
msgstr "Время работы"
#: templates/devapp/custom_dev_page/olt.html:17
msgid "SNMP Num"
@ -663,3 +663,12 @@ msgstr "Комманда вернула %s"
msgid "Command return nothing"
msgstr "Комманда вернула пустое значение"
msgid "Command return unknown"
msgstr "Комманда вернула что-то не понятное"
msgid "Reboot not ready"
msgstr "Перезагрузка для устройства не готова"
msgid "Is save before reboot"
msgstr "Сохраниться перед перезагрузкой"

21
devapp/views.py

@ -1,9 +1,6 @@
import re
from ipaddress import ip_address
from abonapp.models import Abon
from accounts_app.models import UserProfile
from devapp.base_intr import DeviceImplementationError
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.decorators import login_required
@ -24,12 +21,15 @@ from djing.lib.mixins import LoginAdminPermissionMixin, LoginAdminMixin
from djing.tasks import multicast_email_notify
from easysnmp import EasySNMPTimeoutError, EasySNMPError
from group_app.models import Group
from abonapp.models import Abon
from accounts_app.models import UserProfile
from messenger.tasks import multicast_viber_notify
from guardian.decorators import permission_required_or_403 as permission_required
from guardian.shortcuts import get_objects_for_user
from devapp.forms import DeviceForm, PortForm, DeviceExtraDataForm, DeviceRebootForm
from devapp.models import Device, Port, DeviceDBException, DeviceMonitoringException
from devapp.tasks import onu_register
from devapp.base_intr import DeviceImplementationError, DeviceConfigurationError
from devapp import expect_scripts
@ -544,13 +544,22 @@ class RebootDevice(LoginAdminPermissionMixin, UpdateView):
device = self.object
manager = device.get_manager_object()
is_save = form.cleaned_data.get('is_save')
ret = manager.reboot(save_before_reboot=is_save)
try:
r = manager.reboot(save_before_reboot=is_save)
if isinstance(r, tuple) and len(r) == 2:
ret, ret_text = r
if ret == 0:
messages.success(self.request, _('Signal for reboot has been sent'))
messages.success(self.request, ret_text or _('Signal for reboot has been sent'))
elif ret is None:
messages.warning(self.request, ret_text or _('Command return nothing'))
else:
messages.error(self.request, ret_text or _('Command returned %s') % str(ret))
elif r is None:
messages.warning(self.request, _('Command return nothing'))
else:
messages.error(self.request, _('Command returned %s') % str(ret))
messages.warning(self.request, _('Command return unknown'))
except DeviceConfigurationError as e:
messages.error(self.request, e)
return redirect(
'devapp:view',
device.group.pk if device.group is not None else 0,

2
djing/lib/__init__.py

@ -62,7 +62,7 @@ class RuTimedelta(timedelta):
# text_date = '%d %s %s' % (self.days, ru_days, text_date)
text_date = '%d %s' % (self.days, ru_days)
else:
text_date = ''
text_date = super(RuTimedelta, self).__str__()
return text_date

Loading…
Cancel
Save