diff --git a/devapp/base_intr.py b/devapp/base_intr.py
index bc080b9..415898b 100644
--- a/devapp/base_intr.py
+++ b/devapp/base_intr.py
@@ -120,7 +120,10 @@ class SNMPBaseWorker(object, metaclass=ABCMeta):
def start_ses(self):
if self.ses is None:
- self.ses = Session(hostname=self._ip, community=self._community, version=self._ver)
+ self.ses = Session(
+ hostname=self._ip, community=self._community,
+ version=self._ver, use_numeric=True
+ )
def set_int_value(self, oid: str, value):
self.start_ses()
diff --git a/devapp/dev_types.py b/devapp/dev_types.py
index 5ce3dbd..4df380e 100644
--- a/devapp/dev_types.py
+++ b/devapp/dev_types.py
@@ -78,20 +78,18 @@ class DLinkDevice(DevBase, SNMPBaseWorker):
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'))
- res = []
try:
for n in range(interfaces_count):
status = True if int(stats[n]) == 1 else False
- res.append(DLinkPort(
+ yield DLinkPort(
n + 1,
nams[n] if len(nams) > 0 else '',
status,
macs[n] if len(macs) > 0 else _('does not fetch the mac'),
int(speeds[n]) if len(speeds) > 0 else 0,
- self))
- return res
+ self)
except IndexError:
- return DeviceImplementationError('Dlink port index error'), res
+ return DeviceImplementationError('Dlink port index error')
def get_device_name(self):
return self.get_item('.1.3.6.1.2.1.1.1.0')
@@ -293,11 +291,12 @@ class OnuDevice(DevBase, SNMPBaseWorker):
class EltexPort(BasePort):
- def __init__(self, snmp_worker, *args, **kwargs):
+ def __init__(self, snmp_worker, writable=True, *args, **kwargs):
BasePort.__init__(self, *args, **kwargs)
if not issubclass(snmp_worker.__class__, SNMPBaseWorker):
raise TypeError
self.snmp_worker = snmp_worker
+ self.writable = writable
def disable(self):
self.snmp_worker.set_int_value(
@@ -319,17 +318,16 @@ class EltexSwitch(DLinkDevice):
tech_code = 'eltex_sw'
def get_ports(self) -> ListOrError:
- res = []
for i, n in enumerate(range(49, 77), 1):
speed = self.get_item('.1.3.6.1.2.1.2.2.1.5.%d' % n)
- res.append(EltexPort(self,
- i,
- self.get_item('.1.3.6.1.2.1.31.1.1.1.18.%d' % n),
- self.get_item('.1.3.6.1.2.1.2.2.1.8.%d' % n),
- self.get_item('.1.3.6.1.2.1.2.2.1.6.%d' % n),
- int(speed or 0),
- ))
- return res
+ yield EltexPort(self,
+ num=i,
+ name=self.get_item('.1.3.6.1.2.1.31.1.1.1.18.%d' % n),
+ status=self.get_item('.1.3.6.1.2.1.2.2.1.8.%d' % n),
+ mac=self.get_item('.1.3.6.1.2.1.2.2.1.6.%d' % n),
+ speed=int(speed or 0),
+ writable=False,
+ )
def get_device_name(self):
return self.get_item('.1.3.6.1.2.1.1.5.0')
@@ -544,3 +542,28 @@ class ZteOnuDevice(OnuDevice):
return 'gpon-onu_1/%d/%d:%s' % (
rack_num, fiber_num, onu_port_num
)
+
+
+class HuaweiSwitch(EltexSwitch):
+ description = _('Huawei switch')
+ is_use_device_port = True
+ has_attachable_to_subscriber = True
+ tech_code = 'huawei_s2300'
+
+ def get_ports(self):
+ interfaces_ids = self.get_list('.1.3.6.1.2.1.17.1.4.1.2')
+ if interfaces_ids is None:
+ raise DeviceImplementationError('Switch returned null')
+ for i, n in enumerate(interfaces_ids):
+ n = int(n)
+ speed = self.get_item('.1.3.6.1.2.1.2.2.1.5.%d' % n)
+ status = self.get_item('.1.3.6.1.2.1.2.2.1.8.%d' % n)
+ yield EltexPort(
+ self,
+ num=i+1,
+ name=self.get_item('.1.3.6.1.2.1.2.2.1.2.%d' % n), # name
+ status=int(status or 0), # status
+ mac=self.get_item('.1.3.6.1.2.1.2.2.1.6.%d' % n), # mac
+ speed=int(speed or 0), # speed
+ writable=False
+ )
diff --git a/devapp/models.py b/devapp/models.py
index a8ad8d5..c47ee6b 100644
--- a/devapp/models.py
+++ b/devapp/models.py
@@ -32,7 +32,8 @@ class Device(models.Model):
('On', dev_types.OnuDevice),
('Ex', dev_types.EltexSwitch),
('Zt', dev_types.Olt_ZTE_C320),
- ('Zo', dev_types.ZteOnuDevice)
+ ('Zo', dev_types.ZteOnuDevice),
+ ('Hw', dev_types.HuaweiSwitch)
)
devtype = models.CharField(_('Device type'), max_length=2, default=DEVICE_TYPES[0][0],
choices=MyChoicesAdapter(DEVICE_TYPES))
diff --git a/devapp/templates/devapp/custom_dev_page/generic_switch.html b/devapp/templates/devapp/custom_dev_page/generic_switch.html
index 8f9a633..f8d1765 100644
--- a/devapp/templates/devapp/custom_dev_page/generic_switch.html
+++ b/devapp/templates/devapp/custom_dev_page/generic_switch.html
@@ -40,13 +40,19 @@
{{ port.num }}
- {% if port.st %}
-
-
-
+ {% if port.writable %}
+ {% if port.st %}
+
+
+
+ {% else %}
+
+
+
+ {% endif %}
{% else %}
-
-
+
+
{% endif %}
diff --git a/devapp/urls.py b/devapp/urls.py
index fd84e72..c3d9daf 100644
--- a/devapp/urls.py
+++ b/devapp/urls.py
@@ -5,52 +5,32 @@ app_name = 'devapp'
urlpatterns = [
path('', views.GroupsListView.as_view(), name='group_list'),
- path('devices_without_groups/',
- views.DevicesWithoutGroupsListView.as_view(),
- name='devices_null_group'),
+ path('devices_without_groups/', views.DevicesWithoutGroupsListView.as_view(), name='devices_null_group'),
path('fix_onu/', views.fix_onu, name='fix_onu'),
path('/', views.DevicesListView.as_view(), name='devs'),
path('/add/', views.DeviceCreateView.as_view(), name='add'),
path('//', views.devview, name='view'),
- path('//del/',
- views.DeviceDeleteView.as_view(), name='del'),
- path('//add/', views.add_single_port,
- name='add_port'),
- path('//edit/', views.DeviceUpdate.as_view(),
- name='edit'),
- path('//edit_extra/',
- views.DeviceUpdateExtra.as_view(), name='extra_data_edit'),
- path(
- '//ports//fix_port_conflict/',
- views.fix_port_conflict,
- name='fix_port_conflict'),
- path(
- '//ports//show_subscriber_on_port/',
- views.ShowSubscriberOnPort.as_view(), name='show_subscriber_on_port'),
- path('//ports_add/', views.add_ports,
- name='add_ports'),
- path('//register_device/',
- views.register_device, name='dev_register'),
- re_path('^(\d+)/(?P\d+)/(?P\d+)_(?P[0-1]{1})$',
- views.toggle_port, name='port_toggle'),
- path('///del/',
- views.delete_single_port, name='del_port'),
- path('///edit/',
- views.EditSinglePort.as_view(), name='edit_port'),
- path('fix_device_group//', views.fix_device_group,
- name='fix_device_group'),
+ path('//del/', views.DeviceDeleteView.as_view(), name='del'),
+ path('//add/', views.add_single_port, name='add_port'),
+ path('//edit/', views.DeviceUpdate.as_view(), name='edit'),
+ path('//edit_extra/', views.DeviceUpdateExtra.as_view(), name='extra_data_edit'),
+ path('//ports//fix_port_conflict/', views.fix_port_conflict, name='fix_port_conflict'),
+ path('//ports//show_subscriber_on_port/', views.ShowSubscriberOnPort.as_view(), name='show_subscriber_on_port'),
+ path('//ports_add/', views.add_ports, name='add_ports'),
+ path('//register_device/', views.register_device, name='dev_register'),
+ re_path('^(\d+)/(?P\d+)/(?P\d+)_(?P[0-1]{1})$', views.toggle_port, name='port_toggle'),
+ path('///del/', views.delete_single_port, name='del_port'),
+ path('///edit/', views.EditSinglePort.as_view(), name='edit_port'),
+ path('fix_device_group//', views.fix_device_group, name='fix_device_group'),
path('search_dev/', views.search_dev),
# ZTE ports under fibers
- path('///',
- views.zte_port_view_uncfg, name='zte_port_view_uncfg'),
+ path('///', views.zte_port_view_uncfg, name='zte_port_view_uncfg'),
# Monitoring api
path('on_device_event/', views.OnDeviceMonitoringEvent.as_view()),
# Nagios mon generate
- path('nagios/hosts/', views.nagios_objects_conf,
- name='nagios_objects_conf'),
- path('api/getall/', views.DevicesGetListView.as_view(),
- name='nagios_get_all_hosts')
+ path('nagios/hosts/', views.nagios_objects_conf, name='nagios_objects_conf'),
+ path('api/getall/', views.DevicesGetListView.as_view(), name='nagios_get_all_hosts')
]