Skip to content

Commit e03ee59

Browse files
authored
Test analytics: fix monitoring calculations + add days in skip counter (#14620)
1 parent 7c2a68c commit e03ee59

File tree

6 files changed

+108
-15
lines changed

6 files changed

+108
-15
lines changed

.github/scripts/analytics/flaky_tests_history.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,15 @@ def main():
198198
from `test_results/test_runs_column`
199199
where
200200
run_timestamp <= Date('{date}') + Interval("P1D")
201-
and run_timestamp >= Date('{date}') - {history_for_n_day}*Interval("P1D")
201+
and run_timestamp >= Date('{date}') - {history_for_n_day+1}*Interval("P1D")
202202
203-
and (job_name ='Nightly-run' or job_name ='Postcommit_relwithdebinfo' or job_name ='Postcommit_asan')
203+
and job_name in (
204+
'Nightly-run',
205+
'Regression-run',
206+
'Regression-whitelist-run',
207+
'Postcommit_relwithdebinfo',
208+
'Postcommit_asan'
209+
)
204210
and build_type = '{build_type}'
205211
and branch = '{branch}'
206212
order by full_name,run_timestamp desc

.github/scripts/analytics/flaky_tests_history_n_runs.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,13 @@ def main():
200200
where
201201
run_timestamp <= Date('{date}') + Interval("P1D")
202202
and run_timestamp >= Date('{date}') -13*Interval("P1D")
203-
and (job_name ='Nightly-run' or job_name ='Postcommit_relwithdebinfo' or job_name ='Postcommit_asan')
203+
and job_name in (
204+
'Nightly-run',
205+
'Regression-run',
206+
'Regression-whitelist-run',
207+
'Postcommit_relwithdebinfo',
208+
'Postcommit_asan'
209+
)
204210
and build_type = '{build_type}'
205211
and status != 'skipped'
206212
and branch = '{branch}'
@@ -218,7 +224,13 @@ def main():
218224
where
219225
run_timestamp <= Date('{date}') + Interval("P1D")
220226
and run_timestamp >= Date('{date}') -13*Interval("P1D")
221-
and (job_name ='Nightly-run' or job_name ='Postcommit_relwithdebinfo' or job_name ='Postcommit_asan')
227+
and job_name in (
228+
'Nightly-run',
229+
'Regression-run',
230+
'Regression-whitelist-run',
231+
'Postcommit_relwithdebinfo',
232+
'Postcommit_asan'
233+
)
222234
and build_type = '{build_type}'
223235
and status = 'skipped'
224236
and branch = '{branch}'

.github/scripts/analytics/tests_monitor.py

+72-6
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ def callee(session):
5050
`previous_state` Utf8,
5151
`state_change_date` Date,
5252
`days_in_state` Uint64,
53+
`previous_mute_state` Uint32,
54+
`mute_state_change_date` Date,
55+
`days_in_mute_state` Uint64,
5356
`previous_state_filtered` Utf8,
5457
`state_change_date_filtered` Date,
5558
`days_in_state_filtered` Uint64,
@@ -90,6 +93,9 @@ def bulk_upsert(table_client, table_path, rows):
9093
.add_column("previous_state", ydb.OptionalType(ydb.PrimitiveType.Utf8))
9194
.add_column("state_change_date", ydb.OptionalType(ydb.PrimitiveType.Date))
9295
.add_column("days_in_state", ydb.OptionalType(ydb.PrimitiveType.Uint64))
96+
.add_column("previous_mute_state", ydb.OptionalType(ydb.PrimitiveType.Uint32))
97+
.add_column("days_in_mute_state", ydb.OptionalType(ydb.PrimitiveType.Uint64))
98+
.add_column("mute_state_change_date", ydb.OptionalType(ydb.PrimitiveType.Date))
9399
.add_column("previous_state_filtered", ydb.OptionalType(ydb.PrimitiveType.Utf8))
94100
.add_column("state_change_date_filtered", ydb.OptionalType(ydb.PrimitiveType.Date))
95101
.add_column("days_in_state_filtered", ydb.OptionalType(ydb.PrimitiveType.Uint64))
@@ -105,6 +111,11 @@ def process_test_group(name, group, last_day_data, default_start_date):
105111
previous_state_list = []
106112
state_change_date_list = []
107113
days_in_state_list = []
114+
115+
previous_mute_state_list = []
116+
mute_state_change_date_list = []
117+
days_in_mute_state_list = []
118+
108119
previous_state_filtered_list = []
109120
state_change_date_filtered_list = []
110121
days_in_state_filtered_list = []
@@ -115,28 +126,42 @@ def process_test_group(name, group, last_day_data, default_start_date):
115126
prev_state = last_day_data[last_day_data['full_name'] == name]['state'].iloc[0]
116127
prev_date = last_day_data[last_day_data['full_name'] == name]['state_change_date'].iloc[0]
117128
current_days_in_state = last_day_data[last_day_data['full_name'] == name]['days_in_state'].iloc[0]
129+
130+
prev_mute_state = last_day_data[last_day_data['full_name'] == name]['is_muted'].iloc[0]
131+
prev_mute_date = last_day_data[last_day_data['full_name'] == name]['mute_state_change_date'].iloc[0]
132+
current_days_in_mute_state = last_day_data[last_day_data['full_name'] == name]['days_in_mute_state'].iloc[0]
133+
118134
prev_state_filtered = last_day_data[last_day_data['full_name'] == name]['state_filtered'].iloc[0]
119135
prev_date_filtered = last_day_data[last_day_data['full_name'] == name]['state_change_date_filtered'].iloc[0]
120136
current_days_in_state_filtered = last_day_data[last_day_data['full_name'] == name][
121137
'days_in_state_filtered'
122138
].iloc[0]
139+
123140
saved_prev_state = last_day_data[last_day_data['full_name'] == name]['previous_state'].iloc[0]
141+
saved_prev_mute_state= last_day_data[last_day_data['full_name'] == name]['previous_mute_state'].iloc[0]
124142
saved_prev_state_filtered = last_day_data[last_day_data['full_name'] == name]['previous_state_filtered'].iloc[0]
125143
else:
126144
prev_state = 'no_runs'
127145
prev_date = datetime.datetime(default_start_date.year, default_start_date.month, default_start_date.day)
128146
current_days_in_state = 0
147+
148+
prev_mute_state = 0
149+
prev_mute_date = datetime.datetime(default_start_date.year, default_start_date.month, default_start_date.day)
150+
current_days_in_mute_state = 0
151+
129152
state_filtered = ''
130153
prev_state_filtered = 'no_runs'
131154
prev_date_filtered = datetime.datetime(
132155
default_start_date.year, default_start_date.month, default_start_date.day
133156
)
134157
current_days_in_state_filtered = 0
158+
135159
saved_prev_state = prev_state
160+
saved_prev_mute_state = prev_mute_state
136161
saved_prev_state_filtered = prev_state_filtered
137162

138163
for index, row in group.iterrows():
139-
164+
# Process prev state
140165
current_days_in_state += 1
141166
if row['state'] != prev_state:
142167
saved_prev_state = prev_state
@@ -146,6 +171,19 @@ def process_test_group(name, group, last_day_data, default_start_date):
146171
previous_state_list.append(saved_prev_state)
147172
state_change_date_list.append(prev_date)
148173
days_in_state_list.append(current_days_in_state)
174+
175+
# Process prev mute state
176+
177+
current_days_in_mute_state += 1
178+
if row['is_muted'] != prev_mute_state:
179+
saved_prev_mute_state = prev_mute_state
180+
prev_mute_state = row['is_muted']
181+
prev_mute_date = row['date_window']
182+
current_days_in_mute_state = 1
183+
184+
previous_mute_state_list.append(saved_prev_mute_state)
185+
mute_state_change_date_list.append(prev_mute_date)
186+
days_in_mute_state_list.append(current_days_in_mute_state)
149187

150188
# Process filtered states
151189

@@ -170,6 +208,9 @@ def process_test_group(name, group, last_day_data, default_start_date):
170208
'previous_state': previous_state_list,
171209
'state_change_date': state_change_date_list,
172210
'days_in_state': days_in_state_list,
211+
'previous_mute_state': previous_mute_state_list,
212+
'mute_state_change_date': mute_state_change_date_list,
213+
'days_in_mute_state': days_in_mute_state_list,
173214
'previous_state_filtered': previous_state_filtered_list,
174215
'state_change_date_filtered': state_change_date_filtered_list,
175216
'days_in_state_filtered': days_in_state_filtered_list,
@@ -182,9 +223,9 @@ def determine_state(row):
182223
is_muted = row['is_muted']
183224

184225
if is_muted == 1:
185-
if 'mute' in history_class:
226+
if 'mute' in history_class or 'failure' in history_class:
186227
return 'Muted Flaky'
187-
elif 'pass' in history_class:
228+
elif 'pass' in history_class and not 'failure' in history_class and not 'mute' in history_class :
188229
return 'Muted Stable'
189230
elif 'skipped' in history_class or not history_class:
190231
return 'Skipped'
@@ -284,9 +325,9 @@ def main():
284325
tc_settings = ydb.TableClientSettings().with_native_date_in_result_sets(enabled=False)
285326
table_client = ydb.TableClient(driver, tc_settings)
286327
base_date = datetime.datetime(1970, 1, 1)
287-
default_start_date = datetime.date(2024, 8, 1)
328+
default_start_date = datetime.date(2024, 11, 1)
288329
today = datetime.date.today()
289-
table_path = f'test_results/analytics/tests_monitor_test_with_filtered_states'
330+
table_path = f'test_results/analytics/tests_monitor'
290331

291332
# Get last existing day
292333
print("Geting date of last collected monitor data")
@@ -367,6 +408,9 @@ def main():
367408
'previous_state': row['previous_state'],
368409
'state_change_date': base_date + datetime.timedelta(days=row['state_change_date']),
369410
'days_in_state': row['days_in_state'],
411+
'previous_mute_state': row['previous_mute_state'],
412+
'mute_state_change_date': base_date + datetime.timedelta(days=row['mute_state_change_date']),
413+
'days_in_mute_state': row['days_in_mute_state'],
370414
'previous_state_filtered': row['previous_state_filtered'],
371415
'state_change_date_filtered': base_date
372416
+ datetime.timedelta(days=row['state_change_date_filtered']),
@@ -518,6 +562,10 @@ def main():
518562
'state',
519563
'previous_state',
520564
'state_change_date',
565+
'is_muted',
566+
'days_in_mute_state',
567+
'previous_mute_state',
568+
'mute_state_change_date',
521569
'days_in_state_filtered',
522570
'state_change_date_filtered',
523571
'previous_state_filtered',
@@ -563,6 +611,9 @@ def main():
563611
df.loc[group.index, 'previous_state'] = results[i]['previous_state']
564612
df.loc[group.index, 'state_change_date'] = results[i]['state_change_date']
565613
df.loc[group.index, 'days_in_state'] = results[i]['days_in_state']
614+
df.loc[group.index, 'previous_mute_state'] = results[i]['previous_mute_state']
615+
df.loc[group.index, 'mute_state_change_date'] = results[i]['mute_state_change_date']
616+
df.loc[group.index, 'days_in_mute_state'] = results[i]['days_in_mute_state']
566617
df.loc[group.index, 'previous_state_filtered'] = results[i]['previous_state_filtered']
567618
df.loc[group.index, 'state_change_date_filtered'] = results[i]['state_change_date_filtered']
568619
df.loc[group.index, 'days_in_state_filtered'] = results[i]['days_in_state_filtered']
@@ -572,6 +623,9 @@ def main():
572623
previous_state_list = []
573624
state_change_date_list = []
574625
days_in_state_list = []
626+
previous_mute_state_list = []
627+
mute_state_change_date_list = []
628+
days_in_mute_state_list = []
575629
previous_state_filtered_list = []
576630
state_change_date_filtered_list = []
577631
days_in_state_filtered_list = []
@@ -581,6 +635,9 @@ def main():
581635
previous_state_list = previous_state_list + result['previous_state']
582636
state_change_date_list = state_change_date_list + result['state_change_date']
583637
days_in_state_list = days_in_state_list + result['days_in_state']
638+
previous_mute_state_list = previous_mute_state_list + result['previous_mute_state']
639+
mute_state_change_date_list = mute_state_change_date_list + result['mute_state_change_date']
640+
days_in_mute_state_list = days_in_mute_state_list + result['days_in_mute_state']
584641
previous_state_filtered_list = previous_state_filtered_list + result['previous_state_filtered']
585642
state_change_date_filtered_list = state_change_date_filtered_list + result['state_change_date_filtered']
586643
days_in_state_filtered_list = days_in_state_filtered_list + result['days_in_state_filtered']
@@ -595,6 +652,9 @@ def main():
595652
df['previous_state'] = previous_state_list
596653
df['state_change_date'] = state_change_date_list
597654
df['days_in_state'] = days_in_state_list
655+
df['previous_mute_state'] = previous_mute_state_list
656+
df['mute_state_change_date'] = mute_state_change_date_list
657+
df['days_in_mute_state'] = days_in_mute_state_list
598658
df['previous_state_filtered'] = previous_state_filtered_list
599659
df['state_change_date_filtered'] = state_change_date_filtered_list
600660
df['days_in_state_filtered'] = days_in_state_filtered_list
@@ -604,9 +664,12 @@ def main():
604664
print(f'Saving computed result in dataframe: {end_time - start_time}')
605665
start_time = time.time()
606666

607-
df['state_change_date'] = df['state_change_date'].dt.date
608667
df['date_window'] = df['date_window'].dt.date
668+
df['state_change_date'] = df['state_change_date'].dt.date
609669
df['days_in_state'] = df['days_in_state'].astype(int)
670+
df['previous_mute_state'] = df['previous_mute_state'].astype(int)
671+
df['mute_state_change_date'] = df['mute_state_change_date'].dt.date
672+
df['days_in_mute_state'] = df['days_in_mute_state'].astype(int)
610673
df['state_change_date_filtered'] = df['state_change_date_filtered'].dt.date
611674
df['days_in_state_filtered'] = df['days_in_state_filtered'].astype(int)
612675

@@ -637,6 +700,9 @@ def main():
637700
'previous_state',
638701
'state_change_date',
639702
'days_in_state',
703+
'previous_mute_state',
704+
'mute_state_change_date',
705+
'days_in_mute_state',
640706
'previous_state_filtered',
641707
'state_change_date_filtered',
642708
'days_in_state_filtered',

.github/scripts/analytics/upload_testowners.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,10 @@ def main():
9393
run_timestamp >= CurrentUtcDate()- Interval("P10D")
9494
AND branch = 'main'
9595
and job_name in (
96-
'Nightly-run', 'Postcommit_relwithdebinfo',
96+
'Nightly-run',
97+
'Regression-run',
98+
'Regression-whitelist-run',
99+
'Postcommit_relwithdebinfo',
97100
'Postcommit_asan'
98101
)
99102
WINDOW w AS (

.github/scripts/tests/get_test_history.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,15 @@ def get_test_history(test_names_array, last_n_runs_of_test_amount, build_type):
5959
ROW_NUMBER() OVER (PARTITION BY test_name ORDER BY run_timestamp DESC) AS rn
6060
FROM
6161
`test_results/test_runs_column`
62-
where (job_name ='Nightly-run' or job_name like 'Postcommit%') and
63-
build_type = $build_type and
64-
suite_folder ||'/' || test_name in $test_names
62+
where job_name in (
63+
'Nightly-run',
64+
'Regression-run',
65+
'Regression-whitelist-run',
66+
'Postcommit_relwithdebinfo',
67+
'Postcommit_asan'
68+
)
69+
and build_type = $build_type
70+
and suite_folder ||'/' || test_name in $test_names
6571
and status != 'skipped'
6672
);
6773

.github/scripts/tests/update_mute_issues.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import os
22
import re
33
import requests
4-
from github import Github
4+
from github import Github #pip3 install PyGithub
55
from urllib.parse import quote, urlencode
66

77

0 commit comments

Comments
 (0)