Skip to content

Commit d8659ab

Browse files
Merge pull request #1915 from elementary-data/ele-4455-fix-missing-metrics-in-cli
fixed missing metrics in cli
2 parents 8a15e96 + 5bb3f85 commit d8659ab

File tree

1 file changed

+102
-16
lines changed

1 file changed

+102
-16
lines changed

elementary/monitor/dbt_project/macros/get_test_results.sql

Lines changed: 102 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
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 %}
@@ -14,6 +14,7 @@
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
)
@@ -58,14 +59,99 @@
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,
@@ -178,11 +264,8 @@
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 }}
@@ -196,7 +279,6 @@
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 %}
@@ -209,7 +291,7 @@
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 %}
@@ -241,6 +323,7 @@
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 %}
@@ -249,6 +332,7 @@
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'}
@@ -260,8 +344,10 @@
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

Comments
 (0)