2121
2222from deepchecks_monitoring .api .v1 .alert import AlertCreationSchema
2323from deepchecks_monitoring .logic .check_logic import SingleCheckRunOptions , reduce_check_window , run_check_window
24- from deepchecks_monitoring .monitoring_utils import DataFilterList , make_oparator_func
24+ from deepchecks_monitoring .monitoring_utils import DataFilterList , configure_logger , make_oparator_func
2525from deepchecks_monitoring .public_models import Organization
2626from deepchecks_monitoring .public_models .task import BackgroundWorker , Task
2727from deepchecks_monitoring .resources import ResourcesProvider
3232from deepchecks_monitoring .utils import database
3333from deepchecks_monitoring .utils .mixpanel import AlertTriggeredEvent
3434
35- __all__ = [" AlertsTask" ]
35+ __all__ = [' AlertsTask' ]
3636
3737
3838class AlertsTask (BackgroundWorker ):
3939 """Worker to calculate alerts"""
4040
4141 def __init__ (self ):
4242 super ().__init__ ()
43- self ._logger = logging . getLogger ( __name__ )
43+ self .logger = configure_logger ( self . __class__ . __name__ )
4444
4545 @classmethod
4646 def queue_name (cls ) -> str :
47- return " alerts"
47+ return ' alerts'
4848
4949 @classmethod
5050 def delay_seconds (cls ) -> int :
5151 return 0
5252
5353 async def run (self , task : Task , session : AsyncSession , resources_provider : ResourcesProvider , lock ):
54- organization_id = task .params ["organization_id" ]
55- monitor_id = task .params ["monitor_id" ]
56- timestamp = task .params ["timestamp" ]
54+ organization_id = task .params ['organization_id' ]
55+ monitor_id = task .params ['monitor_id' ]
56+ timestamp = task .params ['timestamp' ]
57+
58+ self .logger .info ({'message' : 'starting job' , 'worker name' : str (type (self )),
59+ 'task' : task .id , 'monitor_id' : monitor_id , 'org_id' : organization_id })
5760
5861 organization_schema = (await session .execute (
5962 select (Organization .schema_name ).where (Organization .id == organization_id )
@@ -63,14 +66,14 @@ async def run(self, task: Task, session: AsyncSession, resources_provider: Resou
6366 if organization_schema is not None :
6467 await database .attach_schema_switcher_listener (
6568 session = session ,
66- schema_search_path = [organization_schema , " public" ]
69+ schema_search_path = [organization_schema , ' public' ]
6770 )
6871 alerts = await execute_monitor (
6972 session = session ,
7073 resources_provider = resources_provider ,
7174 monitor_id = monitor_id ,
7275 timestamp = timestamp ,
73- logger = self ._logger ,
76+ logger = self .logger ,
7477 organization_id = organization_id ,
7578 )
7679 else :
@@ -87,7 +90,7 @@ async def run(self, task: Task, session: AsyncSession, resources_provider: Resou
8790 organization_id = organization_id ,
8891 session = session ,
8992 resources_provider = resources_provider ,
90- logger = self ._logger .getChild (" alert-notificator" )
93+ logger = self .logger .getChild (' alert-notificator' )
9194 )
9295 await resources_provider .report_mixpanel_event (
9396 AlertTriggeredEvent .create_event ,
@@ -96,6 +99,9 @@ async def run(self, task: Task, session: AsyncSession, resources_provider: Resou
9699 )
97100 await notificator .notify ()
98101
102+ self .logger .info ({'message' : 'finished job' , 'worker name' : str (type (self )),
103+ 'task' : task .id , 'monitor_id' : monitor_id , 'org_id' : organization_id })
104+
99105
100106async def execute_monitor (
101107 monitor_id : int ,
@@ -106,8 +112,8 @@ async def execute_monitor(
106112 logger : t .Optional [logging .Logger ] = None ,
107113) -> t .List [Alert ]:
108114 """Execute monitor alert rules."""
109- logger = logger or logging .getLogger (" monitor-executor" )
110- logger .info (" Execution of Monitor(id:%s) for timestamp %s" , monitor_id , timestamp )
115+ logger = logger or logging .getLogger (' monitor-executor' )
116+ logger .info (' Execution of Monitor(id:%s) for timestamp %s' , monitor_id , timestamp )
111117
112118 monitor = t .cast (Monitor , await session .scalar (
113119 sa .select (Monitor )
@@ -119,13 +125,13 @@ async def execute_monitor(
119125 ))
120126
121127 if monitor is None :
122- raise ValueError (f" Did not find monitor with the id { monitor_id } " )
128+ raise ValueError (f' Did not find monitor with the id { monitor_id } ' )
123129
124130 check = monitor .check
125131 alert_rules = monitor .alert_rules
126132
127133 if len (alert_rules ) == 0 :
128- logger .info (" Monitor(id:%s) does not have alert rules" , monitor_id )
134+ logger .info (' Monitor(id:%s) does not have alert rules' , monitor_id )
129135 return []
130136
131137 monitor_frequency = t .cast (Frequency , monitor .frequency ).to_pendulum_duration ()
@@ -141,7 +147,7 @@ async def execute_monitor(
141147 )).all ())
142148
143149 if not model_versions :
144- logger .info (" Model(id:%s) is empty (does not have versions)" , check .model_id )
150+ logger .info (' Model(id:%s) is empty (does not have versions)' , check .model_id )
145151 return []
146152
147153 # First looking for results in cache if already calculated
@@ -154,7 +160,7 @@ async def execute_monitor(
154160 cache_results [model_version ] = cache_result .value
155161 else :
156162 model_versions_without_cache .append (model_version )
157- logger .debug (" Cache result: %s" , cache_results )
163+ logger .debug (' Cache result: %s' , cache_results )
158164
159165 # For model versions without result in cache running calculation
160166 if model_versions_without_cache :
@@ -178,7 +184,7 @@ async def execute_monitor(
178184 resources_provider .cache_functions .set_monitor_cache (
179185 organization_id , version .id , monitor_id , start_time , end_time , result )
180186
181- logger .debug (" Check execution result: %s" , result_per_version )
187+ logger .debug (' Check execution result: %s' , result_per_version )
182188 else :
183189 result_per_version = {}
184190
@@ -192,20 +198,20 @@ async def execute_monitor(
192198 await session .execute (update (AlertRule ).where (AlertRule .id == alert_rule .id )
193199 .values ({AlertRule .start_time : func .least (AlertRule .start_time , end_time )}))
194200 if not alert_rule .is_active :
195- logger .info (" AlertRule(id:%s) is not active, skipping it" , alert_rule .id )
201+ logger .info (' AlertRule(id:%s) is not active, skipping it' , alert_rule .id )
196202 elif alert := assert_check_results (alert_rule , check_results ):
197203 alert .start_time = start_time
198204 alert .end_time = end_time
199205 AlertCreationSchema .validate (alert )
200206 session .add (alert )
201- logger .info (" Alert(id:%s) instance created for monitor(id:%s)" , alert .id , monitor .id )
207+ logger .info (' Alert(id:%s) instance created for monitor(id:%s)' , alert .id , monitor .id )
202208 alerts .append (alert )
203209
204210 if (n_of_alerts := len (alerts )) > 0 :
205- logger .info (" %s alerts raised for Monitor(id:%s)" , n_of_alerts , monitor .id )
211+ logger .info (' %s alerts raised for Monitor(id:%s)' , n_of_alerts , monitor .id )
206212 return alerts
207213
208- logger .info (" No alerts were raised for Monitor(id:%s)" , monitor .id )
214+ logger .info (' No alerts were raised for Monitor(id:%s)' , monitor .id )
209215 return []
210216
211217
0 commit comments