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 typing import Union, Iterable, AnyStr, Generator, Optional, Dict
from easysnmp import Session from easysnmp import Session
from django.utils.translation import gettext
from django.utils.translation import gettext, gettext_lazy as _
ListOrError = Union[ ListOrError = Union[
Iterable, Iterable,
@ -34,7 +34,12 @@ class DevBase(object, metaclass=ABCMeta):
@abstractmethod @abstractmethod
def reboot(self, save_before_reboot=False): 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 @abstractmethod
def get_ports(self) -> ListOrError: 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): def reboot(self, save_before_reboot=False):
dat = self.db_instance.extra_data dat = self.db_instance.extra_data
if dat is None: if dat is None:
return
raise DeviceConfigurationError(
_('You have not info in extra_data '
'field, please fill it in JSON')
)
login = dat.get('login') login = dat.get('login')
passw = dat.get('password') passw = dat.get('password')
if login and passw: if login and passw:
@ -95,7 +98,7 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
self.db_instance.ip_address, self.db_instance.ip_address,
login, passw, login, passw,
1 if save_before_reboot else 0 1 if save_before_reboot else 0
))
)), 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')) 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) DevBase.__init__(self, dev_instance)
SNMPBaseWorker.__init__(self, dev_instance.ip_address, dev_instance.man_passw, 2) 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: def get_ports(self) -> ListOrError:
nms = self.get_list('.1.3.6.1.4.1.3320.101.10.1.1.79') nms = self.get_list('.1.3.6.1.4.1.3320.101.10.1.1.79')
res = [] res = []
@ -238,9 +238,6 @@ class OnuDevice(DevBase, SNMPBaseWorker):
)) ))
SNMPBaseWorker.__init__(self, dev_ip_addr, dev_instance.man_passw, 2) SNMPBaseWorker.__init__(self, dev_ip_addr, dev_instance.man_passw, 2)
def reboot(self, save_before_reboot=False):
pass
def get_ports(self) -> ListOrError: def get_ports(self) -> ListOrError:
return () return ()
@ -365,7 +362,7 @@ class EltexSwitch(DLinkDevice):
return plain_ip_device_mon_template(device) return plain_ip_device_mon_template(device)
def reboot(self, save_before_reboot=False): def reboot(self, save_before_reboot=False):
pass
return DevBase.reboot(self, save_before_reboot)
def conv_signal(lvl: int) -> float: def conv_signal(lvl: int) -> float:
@ -607,6 +604,3 @@ class HuaweiSwitch(EltexSwitch):
) )
ep.writable = True ep.writable = True
yield ep 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/onu_for_zte.html:12
#: templates/devapp/custom_dev_page/ports.html:12 #: templates/devapp/custom_dev_page/ports.html:12
msgid "Uptime" msgid "Uptime"
msgstr "Без перезагрузки"
msgstr "Время работы"
#: templates/devapp/custom_dev_page/olt.html:17 #: templates/devapp/custom_dev_page/olt.html:17
msgid "SNMP Num" msgid "SNMP Num"
@ -663,3 +663,12 @@ msgstr "Комманда вернула %s"
msgid "Command return nothing" msgid "Command return nothing"
msgstr "Комманда вернула пустое значение" 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 import re
from ipaddress import ip_address 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.conf import settings
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required 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 djing.tasks import multicast_email_notify
from easysnmp import EasySNMPTimeoutError, EasySNMPError from easysnmp import EasySNMPTimeoutError, EasySNMPError
from group_app.models import Group 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 messenger.tasks import multicast_viber_notify
from guardian.decorators import permission_required_or_403 as permission_required from guardian.decorators import permission_required_or_403 as permission_required
from guardian.shortcuts import get_objects_for_user from guardian.shortcuts import get_objects_for_user
from devapp.forms import DeviceForm, PortForm, DeviceExtraDataForm, DeviceRebootForm from devapp.forms import DeviceForm, PortForm, DeviceExtraDataForm, DeviceRebootForm
from devapp.models import Device, Port, DeviceDBException, DeviceMonitoringException from devapp.models import Device, Port, DeviceDBException, DeviceMonitoringException
from devapp.tasks import onu_register from devapp.tasks import onu_register
from devapp.base_intr import DeviceImplementationError, DeviceConfigurationError
from devapp import expect_scripts from devapp import expect_scripts
@ -544,13 +544,22 @@ class RebootDevice(LoginAdminPermissionMixin, UpdateView):
device = self.object device = self.object
manager = device.get_manager_object() manager = device.get_manager_object()
is_save = form.cleaned_data.get('is_save') 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: 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: 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')) messages.warning(self.request, _('Command return nothing'))
else: 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( return redirect(
'devapp:view', 'devapp:view',
device.group.pk if device.group is not None else 0, 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 %s' % (self.days, ru_days, text_date)
text_date = '%d %s' % (self.days, ru_days) text_date = '%d %s' % (self.days, ru_days)
else: else:
text_date = ''
text_date = super(RuTimedelta, self).__str__()
return text_date return text_date

Loading…
Cancel
Save