@@ -20,7 +20,7 @@ def setup_logger(debug: bool):
2020 handler = colorlog .StreamHandler ()
2121 handler .setFormatter (
2222 colorlog .ColoredFormatter (
23- ' %(asctime)s %(log_color)s%(levelname)s%(reset)s %(message)s' ,
23+ " %(asctime)s %(log_color)s%(levelname)s%(reset)s %(message)s" ,
2424 log_colors = {
2525 "DEBUG" : "blue" ,
2626 "INFO" : "green" ,
@@ -118,6 +118,7 @@ def create_alert_rule(
118118 title : str ,
119119 folder_uid : str ,
120120 rule_group : str ,
121+ interval_sec : int ,
121122 _for : str ,
122123 expr : str ,
123124 conditions : list [dict [str , any ]],
@@ -128,6 +129,7 @@ def create_alert_rule(
128129 alert_rule ["title" ] = title
129130 alert_rule ["folderUID" ] = folder_uid
130131 alert_rule ["ruleGroup" ] = rule_group
132+ alert_rule ["intervalSec" ] = interval_sec
131133 alert_rule ["for" ] = _for
132134 alert_rule ["data" ] = [
133135 create_alert_query (model = create_alert_query_model (expr = expr )),
@@ -169,14 +171,36 @@ def dump_alert(output_dir: str, alert: dict[str, any]) -> None:
169171 json .dump (alert , f , indent = 2 )
170172 logging .info (f'Alert "{ alert ["name" ]} " saved to { alert_full_path } ' )
171173
174+
175+ def get_alert_rule_group (client : GrafanaApi , folder_uid : str , group_uid : str ) -> str :
176+ logging .debug (f"Getting alert rule group { group_uid } " )
177+ return client .alertingprovisioning .get_rule_group (folder_uid = folder_uid , group_uid = group_uid )
178+
179+
180+ def update_alert_rule_group (
181+ client : GrafanaApi ,
182+ folder_uid : str ,
183+ group_uid : str ,
184+ alertrule_group : dict [any , any ],
185+ disable_provenance = True ,
186+ ) -> None :
187+ logging .debug (f"Updating alert rule group { group_uid } " )
188+ client .alertingprovisioning .update_rule_group (
189+ folder_uid = folder_uid ,
190+ group_uid = group_uid ,
191+ alertrule_group = alertrule_group ,
192+ disable_provenance = disable_provenance ,
193+ )
194+
195+
172196def main ():
173197 args = parser .parse_args ()
174198 logger = setup_logger (debug = args .debug )
175199 start_time = datetime .datetime .now ()
176200 logger .info (
177201 f'Starting to build grafana dashboard, time is { start_time .strftime ("%Y-%m-%d %H:%M:%S" )} '
178202 )
179-
203+
180204 with open (args .dev_alerts_file , "r" ) as f :
181205 dev_alerts = json .load (f )
182206
@@ -194,6 +218,7 @@ def main():
194218 name = dev_alert ["name" ],
195219 title = dev_alert ["title" ],
196220 folder_uid = folder_uid ,
221+ interval_sec = dev_alert ["intervalSec" ],
197222 rule_group = dev_alert ["ruleGroup" ],
198223 _for = dev_alert ["for" ],
199224 expr = dev_alert ["expr" ],
@@ -209,10 +234,27 @@ def main():
209234 client .alertingprovisioning .create_alertrule (
210235 alertrule = alert , disable_provenance = True
211236 )
212- logging .info (f'Alert "{ alert ["name" ]} " was uploaded to Grafana successfully' )
237+ logging .info (f'Alert "{ alert ["name" ]} " uploaded to Grafana successfully' )
213238 except Exception as e :
214239 logging .error (f'Failed to create alert "{ alert ["name" ]} ". { e } ' )
215240
241+ try :
242+ group_uid = alert ["ruleGroup" ]
243+ rule_group = get_alert_rule_group (
244+ client = client , folder_uid = folder_uid , group_uid = group_uid
245+ )
246+ if rule_group ["interval" ] != alert ["intervalSec" ]:
247+ rule_group ["interval" ] = alert ["intervalSec" ]
248+ update_alert_rule_group (
249+ client = client ,
250+ folder_uid = folder_uid ,
251+ group_uid = group_uid ,
252+ alertrule_group = rule_group ,
253+ )
254+ logging .info (f"Alert rule group { group_uid } updated successfully" )
255+ except Exception as e :
256+ logging .error (f'Failed to update alert rule group "{ alert ["ruleGroup" ]} ". { e } ' )
257+
216258 dump_alert (output_dir = args .out_dir , alert = alert )
217259
218260 logging .info (
0 commit comments