Skip to content

Commit afcd50b

Browse files
naspiratoCopilot
andauthored
Analytics:Fix test monitor query (#27735)
Co-authored-by: Copilot <[email protected]>
1 parent b6bea7d commit afcd50b

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

.github/scripts/analytics/tests_monitor.py

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)