1- {% macro prepare_test_results (days_back = 7 , invocations_per_test = 720 , disable_passed_test_metrics = false) %}
2- {% do return(adapter .dispatch (' prepare_test_results ' , ' elementary_cli' )(days_back, invocations_per_test, disable_passed_test_metrics)) % }
3- {% endmacro %}
1+ {%- macro get_test_results (days_back = 7 , invocations_per_test = 720 , disable_passed_test_metrics = false) - %}
2+ {{ return(adapter .dispatch (' get_test_results ' , ' elementary_cli' )(days_back, invocations_per_test, disable_passed_test_metrics)) } }
3+ {%- endmacro - %}
44
5- {% macro default__prepare_test_results (days_back = 7 , invocations_per_test = 720 , disable_passed_test_metrics = false) %}
5+ {%- macro default__get_test_results (days_back = 7 , invocations_per_test = 720 , disable_passed_test_metrics = false) - %}
66 {% set elementary_tests_allowlist_status = [' fail' , ' warn' ] if disable_passed_test_metrics else [' fail' , ' warn' , ' pass' ] %}
77
88 {% set select_test_results %}
1414 select
1515 * ,
1616 {{ elementary .edr_datediff (elementary .edr_cast_as_timestamp (' detected_at' ), elementary .edr_current_timestamp (), ' day' ) }} as days_diff,
17+ {# When we split test into multiple test results, we want to have the same invocation order for the test results from the same run so we use rank. #}
1718 rank() over (partition by elementary_unique_id order by {{elementary .edr_cast_as_timestamp (' detected_at' )}} desc ) as invocations_rank_index
1819 from test_results
1920 )
5859 where test_results .invocations_rank_index <= {{ invocations_per_test }}
5960 order by test_results .elementary_unique_id , test_results .invocations_rank_index desc
6061 {%- endset - %}
62+
63+ {% set test_results = [] %}
64+
6165 {% set elementary_database, elementary_schema = elementary .get_package_database_and_schema () %}
6266 {% set ordered_test_results_relation = elementary .create_temp_table (elementary_database, elementary_schema, ' ordered_test_results' , select_test_results) %}
63- {% do return(ordered_test_results_relation) %}
64- {% endmacro %}
6567
66- {% macro clickhouse__prepare_test_results(days_back = 7 , invocations_per_test = 720 , disable_passed_test_metrics = false) %}
67- {% do elementary .run_query (' drop table if exists ordered_test_results' ) %}
68+ {% set test_results_agate_sql %}
69+ select * from {{ ordered_test_results_relation }}
70+ {% endset %}
71+
72+ {% set valid_ids_query %}
73+ select distinct id
74+ from {{ ordered_test_results_relation }}
75+ where invocations_rank_index = 1
76+ {% endset %}
77+
78+ {% set test_results_agate = elementary .run_query (test_results_agate_sql) %}
79+ {% set test_result_rows_agate = elementary_cli .get_result_rows_agate (days_back, valid_ids_query) %}
80+ {% if not elementary .has_temp_table_support () %}
81+ {% do elementary .fully_drop_relation (ordered_test_results_relation) %}
82+ {% endif %}
83+ {% set tests = elementary .agate_to_dicts (test_results_agate) %}
84+
85+ {% set filtered_tests = [] %}
86+ {% for test in tests %}
87+ {% set test_meta = fromjson(test .meta ) %}
88+ {% if test_meta .get (" elementary" , {}).get(" include" , true) %}
89+ {% do filtered_tests .append (test) %}
90+ {% endif %}
91+ {% endfor %}
6892
93+ {% for test in filtered_tests %}
94+ {% set test_rows_sample = none %}
95+ {% if test .invocations_rank_index == 1 %}
96+ {% set test_type = test .test_type %}
97+ {% set test_params = fromjson(test .test_params ) %}
98+ {% set status = test .status | lower %}
99+
100+ {%- if (test_type == ' dbt_test' and status in [' fail' , ' warn' ]) or (test_type != ' dbt_test' and status in elementary_tests_allowlist_status) - %}
101+ {% set test_rows_sample = elementary_cli .get_test_rows_sample (test .result_rows , test_result_rows_agate .get (test .id )) %}
102+ {# Dimension anomalies return multiple dimensions for the test rows sample, and needs to be handle differently. #}
103+ {# Currently we show only the anomalous for all of the dimensions. #}
104+ {% if test .test_sub_type == ' dimension' or test_params .dimensions %}
105+ {% if test .test_sub_type == ' dimension' %}
106+ {% set metric_name = ' row_count' %}
107+ {% elif test_params .dimensions %}
108+ {% set metric_name = test .test_sub_type %}
109+ {% endif %}
110+ {% set anomalous_rows = [] %}
111+ {% set headers = [{' id' : ' anomalous_value_timestamp' , ' display_name' : ' timestamp' , ' type' : ' date' }] %}
112+ {% for row in test_rows_sample %}
113+ {% set anomalous_row = {
114+ ' anomalous_value_timestamp' : row[' end_time' ],
115+ ' anomalous_value_' ~ metric_name: row[' value' ],
116+ ' anomalous_value_average_' ~ metric_name: row[' average' ] | round(1 )
117+ } %}
118+ {% set dimensions = row[' dimension' ].split(' ; ' ) %}
119+ {% set diemsions_values = row[' dimension_value' ].split(' ; ' ) %}
120+ {% for index in range(dimensions | length) %}
121+ {% do anomalous_row .update ({dimensions[index]: diemsions_values[index]}) %}
122+ {% endfor %}
123+ {% if loop .last %}
124+ {# Adding dimensions to the headers #}
125+ {% for index in range(dimensions | length) %}
126+ {% do headers .append ({' id' : dimensions[index], ' display_name' : dimensions[index], ' type' : ' str' },) %}
127+ {% endfor %}
128+ {% endif %}
129+ {% if row[' is_anomalous' ] %}
130+ {% do anomalous_rows .append (anomalous_row) %}
131+ {% endif %}
132+ {% endfor %}
133+ {# Adding the rest of the static headers (metrics headers) #}
134+ {% do headers .extend ([
135+ {' id' : ' anomalous_value_' ~ metric_name, ' display_name' : ' ' .join (metric_name .split (' _' )), ' type' : ' int' },
136+ {' id' : ' anomalous_value_average_' ~ metric_name, ' display_name' : ' average ' ~ ' ' .join (metric_name .split (' _' )), ' type' : ' int' }
137+ ]) %}
138+ {% set test_rows_sample = {
139+ ' headers' : headers,
140+ ' test_rows_sample' : anomalous_rows
141+ } %}
142+ {% endif %}
143+ {%- endif - %}
144+ {% endif %}
145+ {# Adding sample data to test results #}
146+ {% do test .update ({" sample_data" : test_rows_sample}) %}
147+ {% do test_results .append (test) %}
148+ {%- endfor - %}
149+
150+ {% do return(test_results) %}
151+ {%- endmacro - %}
152+
153+ {%- macro clickhouse__get_test_results(days_back = 7 , invocations_per_test = 720 , disable_passed_test_metrics = false) - %}
154+ {% do elementary .run_query (' drop table if exists ordered_test_results' ) %}
69155 {% set create_table_query %}
70156 CREATE TABLE ordered_test_results (
71157 id String,
178264 identifier= ' ordered_test_results' ,
179265 type= ' table'
180266 ) %}
181- {% do return(ordered_test_results_relation) %}
182- {% endmacro %}
183267
184- {%- macro get_test_results(days_back = 7 , invocations_per_test = 720 , disable_passed_test_metrics = false) - %}
185- {% set ordered_test_results_relation = elementary_cli .prepare_test_results (days_back, invocations_per_test, disable_passed_test_metrics) %}
268+ {% set test_results = [] %}
186269
187270 {% set test_results_agate_sql %}
188271 select * from {{ ordered_test_results_relation }}
196279
197280 {% set test_results_agate = elementary .run_query (test_results_agate_sql) %}
198281 {% set test_result_rows_agate = elementary_cli .get_result_rows_agate (days_back, valid_ids_query) %}
199-
200282 {% if not elementary .has_temp_table_support () %}
201283 {% do elementary .fully_drop_relation (ordered_test_results_relation) %}
202284 {% endif %}
209291 {% do filtered_tests .append (test) %}
210292 {% endif %}
211293 {% endfor %}
212- {% set test_results = [] %}
294+
213295 {% for test in filtered_tests %}
214296 {% set test_rows_sample = none %}
215297 {% if test .invocations_rank_index == 1 %}
241323 {% do anomalous_row .update ({dimensions[index]: diemsions_values[index]}) %}
242324 {% endfor %}
243325 {% if loop .last %}
326+ {# Adding dimensions to the headers #}
244327 {% for index in range(dimensions | length) %}
245328 {% do headers .append ({' id' : dimensions[index], ' display_name' : dimensions[index], ' type' : ' str' },) %}
246329 {% endfor %}
249332 {% do anomalous_rows .append (anomalous_row) %}
250333 {% endif %}
251334 {% endfor %}
335+ {# Adding the rest of the static headers (metrics headers) #}
252336 {% do headers .extend ([
253337 {' id' : ' anomalous_value_' ~ metric_name, ' display_name' : ' ' .join (metric_name .split (' _' )), ' type' : ' int' },
254338 {' id' : ' anomalous_value_average_' ~ metric_name, ' display_name' : ' average ' ~ ' ' .join (metric_name .split (' _' )), ' type' : ' int' }
260344 {% endif %}
261345 {%- endif - %}
262346 {% endif %}
347+ {# Adding sample data to test results #}
263348 {% do test .update ({" sample_data" : test_rows_sample}) %}
264349 {% do test_results .append (test) %}
265- {%- endfor %}
350+ {%- endfor - %}
351+
266352 {% do return(test_results) %}
267- {%- endmacro %}
353+ {%- endmacro - %}
0 commit comments