2525 'available_mem_threshold' : '10.0'
2626}
2727
28+ SYSLOG_CONFIG = 'SYSLOG_CONFIG_FEATURE'
29+ DEFAULT_SYSLOG_FEATURE_CONFIG = {
30+ 'rate_limit_interval' : '300' ,
31+ 'rate_limit_burst' : '20000'
32+ }
33+
2834def is_enabled (cfg ):
2935 return cfg .get ('state' , 'disabled' ).lower () == 'enabled'
3036
@@ -36,7 +42,7 @@ def is_multi_instance(cfg):
3642class FeatureRegistry :
3743 """ 1) FeatureRegistry class provides an interface to
3844 register/de-register new feature tables persistently.
39- 2) Writes persistent configuration to FEATURE &
45+ 2) Writes persistent configuration to FEATURE &
4046 AUTO_TECHSUPPORT_FEATURE tables
4147 """
4248
@@ -72,10 +78,14 @@ def register(self,
7278 new_cfg = {** new_cfg , ** non_cfg_entries }
7379
7480 conn .set_entry (FEATURE , name , new_cfg )
75-
81+
7682 if self .register_auto_ts (name ):
7783 log .info (f'{ name } entry is added to { AUTO_TS_FEATURE } table' )
7884
85+ if 'syslog' in manifest ['service' ] and 'support-rate-limit' in manifest ['service' ]['syslog' ] and manifest ['service' ]['syslog' ]['support-rate-limit' ]:
86+ self .register_syslog_config (name )
87+ log .info (f'{ name } entry is added to { SYSLOG_CONFIG } table' )
88+
7989 def deregister (self , name : str ):
8090 """ Deregister feature by name.
8191
@@ -89,6 +99,7 @@ def deregister(self, name: str):
8999 for conn in db_connetors :
90100 conn .set_entry (FEATURE , name , None )
91101 conn .set_entry (AUTO_TS_FEATURE , name , None )
102+ conn .set_entry (SYSLOG_CONFIG , name , None )
92103
93104 def update (self ,
94105 old_manifest : Manifest ,
@@ -119,10 +130,14 @@ def update(self,
119130 new_cfg = {** new_cfg , ** non_cfg_entries }
120131
121132 conn .set_entry (FEATURE , new_name , new_cfg )
122-
133+
123134 if self .register_auto_ts (new_name , old_name ):
124135 log .info (f'{ new_name } entry is added to { AUTO_TS_FEATURE } table' )
125136
137+ if 'syslog' in new_manifest ['service' ] and 'support-rate-limit' in new_manifest ['service' ]['syslog' ] and new_manifest ['service' ]['syslog' ]['support-rate-limit' ]:
138+ self .register_syslog_config (new_name , old_name )
139+ log .info (f'{ new_name } entry is added to { SYSLOG_CONFIG } table' )
140+
126141 def is_feature_enabled (self , name : str ) -> bool :
127142 """ Returns whether the feature is current enabled
128143 or not. Accesses running CONFIG DB. If no running CONFIG_DB
@@ -178,10 +193,26 @@ def register_auto_ts(self, new_name, old_name=None):
178193 current_cfg = conn .get_entry (AUTO_TS_FEATURE , old_name )
179194 conn .set_entry (AUTO_TS_FEATURE , old_name , None )
180195 new_cfg .update (current_cfg )
181-
196+
182197 conn .set_entry (AUTO_TS_FEATURE , new_name , new_cfg )
183198 return True
184199
200+ def register_syslog_config (self , new_name , old_name = None ):
201+ """ Registers syslog configuration
202+
203+ Args:
204+ new_name (str): new table name
205+ old_name (str, optional): old table name. Defaults to None.
206+ """
207+ for conn in self ._sonic_db .get_connectors ():
208+ new_cfg = copy .deepcopy (DEFAULT_SYSLOG_FEATURE_CONFIG )
209+ if old_name :
210+ current_cfg = conn .get_entry (SYSLOG_CONFIG , old_name )
211+ conn .set_entry (SYSLOG_CONFIG , old_name , None )
212+ new_cfg .update (current_cfg )
213+
214+ conn .set_entry (SYSLOG_CONFIG , new_name , new_cfg )
215+
185216 @staticmethod
186217 def get_default_feature_entries (state = None , owner = None ) -> Dict [str , str ]:
187218 """ Get configurable feature table entries:
@@ -203,4 +234,5 @@ def get_non_configurable_feature_entries(manifest) -> Dict[str, str]:
203234 'has_global_scope' : str (manifest ['service' ]['host-service' ]),
204235 'has_timer' : str (manifest ['service' ]['delayed' ]),
205236 'check_up_status' : str (manifest ['service' ]['check_up_status' ]),
237+ 'support_syslog_rate_limit' : str (manifest ['service' ]['syslog' ]['support-rate-limit' ]),
206238 }
0 commit comments