From 515fa86ae3d3438c427a8e9b930d5d51c019f54c Mon Sep 17 00:00:00 2001
From: thijs snijder <snijder@astron.nl>
Date: Tue, 29 Mar 2022 10:31:34 +0200
Subject: [PATCH] initial changes after meeting

---
 .../tangostationcontrol/clients/snmp_client.py   |  6 ++++++
 .../tangostationcontrol/devices/snmp_device.py   | 16 ++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/tangostationcontrol/tangostationcontrol/clients/snmp_client.py b/tangostationcontrol/tangostationcontrol/clients/snmp_client.py
index 7a7f45808..80638665d 100644
--- a/tangostationcontrol/tangostationcontrol/clients/snmp_client.py
+++ b/tangostationcontrol/tangostationcontrol/clients/snmp_client.py
@@ -2,6 +2,7 @@
 from tangostationcontrol.clients.comms_client import CommClient
 
 from pysnmp import hlapi
+from pysnmp.smi import builder
 
 import numpy
 import logging
@@ -93,6 +94,11 @@ class SNMP_client(CommClient):
 
         return read_function, write_function
 
+    @staticmethod
+    def load_mib(mib_name):
+        mibBuilder = builder.MibBuilder()
+        mibBuilder.loadModule(mib_name)
+
 
 class annotation_wrapper:
     def __init__(self, annotation):
diff --git a/tangostationcontrol/tangostationcontrol/devices/snmp_device.py b/tangostationcontrol/tangostationcontrol/devices/snmp_device.py
index 04d5a1425..cf079b63d 100644
--- a/tangostationcontrol/tangostationcontrol/devices/snmp_device.py
+++ b/tangostationcontrol/tangostationcontrol/devices/snmp_device.py
@@ -57,6 +57,11 @@ class SNMP(lofar_device):
         mandatory=True
     )
 
+    SNMP_mib_dir = device_property(
+        dtype='DevString',
+        mandatory=False
+    )
+
     SNMP_timeout = device_property(
         dtype='DevDouble',
         mandatory=True
@@ -125,6 +130,17 @@ class SNMP(lofar_device):
 
         self.snmp_manager.start()
 
+    def init_device(self):
+        super().init_device()
+
+        # speeds up loading
+        for i in self.attr_list():
+            try:
+                SNMP_client.load_mib(i.comms_annotation["mib"])
+            except Exception as e:
+                raise Exception(f"Failed to load MIB file: {i.comms_annotation.get('mib')} for attribute {i.get_name()}") from e
+
+
 
 # --------
 # Commands
-- 
GitLab