11import re
2+ from typing import Dict , List
23import numpy as np
34
45from suzieq .poller .worker .services .service import Service
@@ -58,9 +59,18 @@ def _clean_eos_data(self, processed_data, _):
5859
5960 def _clean_linux_data (self , processed_data , _ ):
6061 """Clean Linux ip route data"""
62+ drop_indices : List [int ] = []
63+ id_vrf_match : Dict [str , str ] = {}
6164
62- for entry in processed_data :
63- entry ["vrf" ] = entry ["vrf" ] or "default"
65+ for i , entry in enumerate (processed_data ):
66+ if table_id := entry .get ('table_id' ):
67+ id_vrf_match [table_id ] = entry .get ('vrf' ) or 'default'
68+ drop_indices .append (i )
69+ continue
70+ if vrf_id := entry .get ('vrf_id' ):
71+ entry ["vrf" ] = id_vrf_match .get (vrf_id ) or 'default'
72+ else :
73+ entry ["vrf" ] = entry .get ("vrf" ) or "default"
6474 entry ["metric" ] = entry ["metric" ] or 20
6575 entry ['preference' ] = entry ['metric' ]
6676 for ele in ["nexthopIps" , "oifs" ]:
@@ -87,6 +97,10 @@ def _clean_linux_data(self, processed_data, _):
8797
8898 entry ['inHardware' ] = True # Till the offload flag is here
8999
100+ if drop_indices :
101+ processed_data = np .delete (
102+ processed_data , drop_indices ).tolist () # type: ignore
103+
90104 return processed_data
91105
92106 def _clean_cumulus_data (self , processed_data , raw_data ):
0 commit comments