@@ -92,18 +92,16 @@ def process_test_group(name, group, last_day_data, default_start_date):
9292 saved_prev_state_filtered = last_day_data [last_day_data ['full_name' ] == name ]['previous_state_filtered' ].iloc [0 ]
9393 else :
9494 prev_state = 'no_runs'
95- prev_date = datetime .datetime (default_start_date . year , default_start_date . month , default_start_date . day )
95+ prev_date = datetime .datetime . combine (default_start_date , datetime . time . min )
9696 current_days_in_state = 0
9797
9898 prev_mute_state = 0
99- prev_mute_date = datetime .datetime (default_start_date . year , default_start_date . month , default_start_date . day )
99+ prev_mute_date = datetime .datetime . combine (default_start_date , datetime . time . min )
100100 current_days_in_mute_state = 0
101101
102102 state_filtered = ''
103103 prev_state_filtered = 'no_runs'
104- prev_date_filtered = datetime .datetime (
105- default_start_date .year , default_start_date .month , default_start_date .day
106- )
104+ prev_date_filtered = datetime .datetime .combine (default_start_date , datetime .time .min )
107105 current_days_in_state_filtered = 0
108106
109107 saved_prev_state = prev_state
@@ -265,12 +263,19 @@ def main():
265263 return 1
266264
267265 base_date = datetime .datetime (1970 , 1 , 1 )
266+ base_date_obj = base_date .date () # Convert to date object for comparison
268267 default_start_date = datetime .date (2025 , 2 , 1 )
269268 today = datetime .date .today ()
270269 table_path = f'test_results/analytics/tests_monitor'
270+
271+ # Helper function to convert date to days if needed
272+ def to_days (date_value ):
273+ if isinstance (date_value , datetime .date ):
274+ return (date_value - base_date_obj ).days
275+ return date_value
271276
272277 # Get last existing day
273- print ("Geting date of last collected monitor data" )
278+ print ("Getting date of last collected monitor data" )
274279 query_last_exist_day = f"""
275280 SELECT MAX(date_window) AS last_exist_day
276281 FROM `{ table_path } `
@@ -281,6 +286,12 @@ def main():
281286 try :
282287 results = ydb_wrapper .execute_scan_query (query_last_exist_day )
283288 last_exist_day = results [0 ]['last_exist_day' ] if results else None
289+
290+ # Convert to int if it's a Date object
291+ if last_exist_day is not None and isinstance (last_exist_day , datetime .date ):
292+ # Convert date to number of days since base_date (1970-01-01)
293+ last_exist_day = (last_exist_day - base_date_obj ).days
294+
284295 except Exception as e :
285296 print (f"Error during fetching last existing day: { e } " )
286297 last_exist_day = None
@@ -339,7 +350,10 @@ def main():
339350 print (f"Init new monitor collecting from date { last_exist_day_str } " )
340351 else :
341352 # Get data from tests_monitor for last existing day
342- last_exist_day = (base_date + datetime .timedelta (days = last_exist_day )).date ()
353+ # If last_exist_day is already a date, convert from days to date
354+ if not isinstance (last_exist_day , datetime .date ):
355+ last_exist_day = (base_date + datetime .timedelta (days = last_exist_day )).date ()
356+
343357 if last_exist_day == today : # to recalculate data for today
344358 last_exist_day = last_exist_day - datetime .timedelta (days = 1 )
345359 last_exist_day_str = last_exist_day .strftime ('%Y-%m-%d' )
@@ -363,7 +377,7 @@ def main():
363377 'test_name' : row ['test_name' ],
364378 'suite_folder' : row ['suite_folder' ],
365379 'full_name' : row ['full_name' ],
366- 'date_window' : base_date + datetime .timedelta (days = row ['date_window' ]),
380+ 'date_window' : base_date + datetime .timedelta (days = to_days ( row ['date_window' ]) ),
367381 'build_type' : row ['build_type' ],
368382 'branch' : row ['branch' ],
369383 'days_ago_window' : row ['days_ago_window' ],
@@ -380,14 +394,14 @@ def main():
380394 'is_test_chunk' : row ['is_test_chunk' ],
381395 'state' : row ['state' ],
382396 'previous_state' : row ['previous_state' ],
383- 'state_change_date' : base_date + datetime .timedelta (days = row ['state_change_date' ]),
397+ 'state_change_date' : base_date + datetime .timedelta (days = to_days ( row ['state_change_date' ]) ),
384398 'days_in_state' : row ['days_in_state' ],
385399 'previous_mute_state' : row ['previous_mute_state' ],
386- 'mute_state_change_date' : base_date + datetime .timedelta (days = row ['mute_state_change_date' ]),
400+ 'mute_state_change_date' : base_date + datetime .timedelta (days = to_days ( row ['mute_state_change_date' ]) ),
387401 'days_in_mute_state' : row ['days_in_mute_state' ],
388402 'previous_state_filtered' : row ['previous_state_filtered' ],
389403 'state_change_date_filtered' : base_date
390- + datetime .timedelta (days = row ['state_change_date_filtered' ]),
404+ + datetime .timedelta (days = to_days ( row ['state_change_date_filtered' ]) ),
391405 'days_in_state_filtered' : row ['days_in_state_filtered' ],
392406 'state_filtered' : row ['state_filtered' ],
393407 }
@@ -418,6 +432,7 @@ def main():
418432 }
419433
420434 print (f'Getting aggregated history in window { history_for_n_day } days' )
435+
421436 for date in sorted (date_list ):
422437 # Query for data from flaky_tests_window with date_window >= last_existing_day
423438 query_get_history = f"""
@@ -474,7 +489,7 @@ def main():
474489 data ['test_name' ].append (row ['test_name' ])
475490 data ['suite_folder' ].append (row ['suite_folder' ])
476491 data ['full_name' ].append (row ['full_name' ])
477- data ['date_window' ].append (base_date + datetime .timedelta (days = row ['date_window' ]))
492+ data ['date_window' ].append (base_date + datetime .timedelta (days = to_days ( row ['date_window' ]) ))
478493 data ['build_type' ].append (row ['build_type' ])
479494 data ['branch' ].append (row ['branch' ])
480495 data ['owners' ].append (row ['owners' ])
@@ -522,7 +537,7 @@ def main():
522537
523538 end_time = time .time ()
524539 print (f'Dataframe inited: { end_time - start_time } ' )
525- tart_time = time .time ()
540+ start_time = time .time ()
526541
527542 df = df .sort_values (by = ['full_name' , 'date_window' ])
528543
@@ -706,7 +721,6 @@ def main():
706721 .add_column ("state_change_date_filtered" , ydb .OptionalType (ydb .PrimitiveType .Date ))
707722 .add_column ("days_in_state_filtered" , ydb .OptionalType (ydb .PrimitiveType .Uint64 ))
708723 .add_column ("state_filtered" , ydb .OptionalType (ydb .PrimitiveType .Utf8 ))
709- .add_column ("last_update_time" , ydb .OptionalType (ydb .PrimitiveType .Datetime ))
710724 )
711725
712726 # Используем bulk_upsert_batches для агрегированной статистики
0 commit comments