@@ -212,15 +212,41 @@ def mib_translator(self, var_bind):
212
212
logger .debug (
213
213
f"* Re-Translated PDU: { translated_var_bind .prettyPrint ()} "
214
214
)
215
- return translated_var_bind .prettyPrint ().replace (" = " , "=" )
216
215
217
216
except Exception as e :
218
217
logger .debug (f"Error happened during translation checking: { e } " )
219
- return None
218
+ return None , None
220
219
else :
221
- return None
220
+ return None , None
221
+
222
+ index_result = self .parse_index (translated_var_bind )
223
+ return translated_var_bind .prettyPrint ().replace (" = " , "=" ), index_result
224
+
225
+ def parse_index (self , translated_var_bind ):
226
+ object_identity , object_value = translated_var_bind
227
+ index_tuple = object_identity .getMibSymbol ()[2 ]
228
+ family = object_identity .getMibSymbol ()[0 ]
229
+ label_index = - 1
230
+ label = object_identity .getLabel ()[label_index ]
231
+ index_row = self ._mib_view_controller .mibBuilder .mibSymbols [family ].get (label )
232
+ index_result = dict ()
233
+
234
+ while (
235
+ abs (label_index ) < len (object_identity .getLabel ())
236
+ and type (index_row ).__name__ == "MibTableColumn"
237
+ ):
238
+ label_index = label_index - 1
239
+ label = object_identity .getLabel ()[label_index ]
240
+ index_row = self ._mib_view_controller .mibBuilder .mibSymbols [family ].get (
241
+ label
242
+ )
243
+
244
+ if index_row and type (index_row ).__name__ == "MibTableRow" :
245
+ index_tuple = [v .prettyPrint () for v in index_tuple ]
246
+ index_names = [v [2 ] for v in index_row .getIndexNames ()]
247
+ index_result = dict (zip (index_names , index_tuple ))
222
248
223
- return translated_var_bind . prettyPrint (). replace ( " = " , "=" )
249
+ return index_result
224
250
225
251
# Translate SNMP PDU varBinds into MIB objects using custom translation table
226
252
def custom_translator (self , oid ):
@@ -270,7 +296,7 @@ def format_text_event(self, var_binds: list):
270
296
oid_type_string = 'oid-type{offset}="{oid_type}"' .format (
271
297
offset = offset , oid_type = name_type
272
298
)
273
- translated_mib_string = self .mib_translator (var_bind )
299
+ translated_mib_string , parsed_index = self .mib_translator (var_bind )
274
300
if translated_mib_string :
275
301
translated_mib_string = '{translated_oid}="{translated_value}"' .format (
276
302
translated_oid = translated_mib_string .split ("=" )[0 ],
@@ -329,7 +355,7 @@ def format_metric_data(self, var_bind, index=0):
329
355
val_type = var_bind ["val_type" ]
330
356
331
357
# mib translation for oid (val keep same for original, mib translation, custom translation)
332
- translated_mib_string = self .mib_translator (var_bind )
358
+ translated_mib_string , parsed_index = self .mib_translator (var_bind )
333
359
if translated_mib_string :
334
360
translated_oid = translated_mib_string .split ("=" )[0 ]
335
361
translated_val = translated_mib_string .split ("=" )[1 ]
@@ -351,6 +377,8 @@ def format_metric_data(self, var_bind, index=0):
351
377
metric_data ["metric_type" ] = val_type
352
378
if custom_translated_oid :
353
379
metric_data ["custom_metric_name" ] = custom_translated_oid
380
+ if parsed_index :
381
+ metric_data ["parsed_index" ] = parsed_index
354
382
logger .debug (f"metric_data: { json .dumps (metric_data )} " )
355
383
return metric_data
356
384
0 commit comments