1+ -- read_sql() is about to read this qry:
2+ /*
3+ Template for generating the input data for the alert job.
4+
5+ Written for SQLite but will be translated to target dialect based on `db` param via sqlglot.
6+ */
7+ WITH " metric_value_data" /* Filter the data to the relevant metric batch for metrics */ AS (
8+ SELECT
9+ " metric_timestamp" ,
10+ " metric_batch" ,
11+ " metric_name" ,
12+ AVG (" metric_value" ) AS " metric_value"
13+ FROM " metrics_prometheus"
14+ WHERE
15+ " metric_batch" = ' prometheus'
16+ AND " metric_type" = ' metric'
17+ AND " metric_timestamp" >= DATE (' now' , ' -45 day' )
18+ GROUP BY
19+ " metric_timestamp" ,
20+ " metric_batch" ,
21+ " metric_name"
22+ ), " metric_score_data" /* Filter the data to the relevant metric batch for scores */ AS (
23+ SELECT
24+ " metric_timestamp" ,
25+ " metric_batch" ,
26+ " metric_name" ,
27+ AVG (" metric_value" ) AS " metric_score"
28+ FROM " metrics_prometheus"
29+ WHERE
30+ " metric_batch" = ' prometheus'
31+ AND " metric_type" = ' score'
32+ AND " metric_timestamp" >= DATE (' now' , ' -45 day' )
33+ GROUP BY
34+ " metric_timestamp" ,
35+ " metric_batch" ,
36+ " metric_name"
37+ ), " metric_alert_data" /* Filter the data to the relevant metric batch for alerts */ AS (
38+ SELECT
39+ " metric_timestamp" ,
40+ " metric_batch" ,
41+ " metric_name" ,
42+ AVG (" metric_value" ) AS " metric_alert_historic"
43+ FROM " metrics_prometheus"
44+ WHERE
45+ " metric_batch" = ' prometheus'
46+ AND " metric_type" = ' alert'
47+ AND " metric_timestamp" >= DATE (' now' , ' -45 day' )
48+ GROUP BY
49+ " metric_timestamp" ,
50+ " metric_batch" ,
51+ " metric_name"
52+ ), " metric_score_recency_ranked" /* Rank the score data by recency */ AS (
53+ SELECT
54+ " metric_timestamp" ,
55+ " metric_batch" ,
56+ " metric_name" ,
57+ " metric_score" ,
58+ ROW_NUMBER() OVER (PARTITION BY " metric_name" ORDER BY " metric_timestamp" DESC ) AS " metric_score_recency_rank"
59+ FROM " metric_score_data"
60+ ), " metric_value_recency_ranked" /* Rank the value data by recency */ AS (
61+ SELECT
62+ " metric_timestamp" ,
63+ " metric_batch" ,
64+ " metric_name" ,
65+ " metric_value" ,
66+ ROW_NUMBER() OVER (PARTITION BY " metric_name" ORDER BY " metric_timestamp" DESC ) AS " metric_value_recency_rank"
67+ FROM " metric_value_data"
68+ ), " data_ranked" /* Join the data together */ AS (
69+ SELECT
70+ " m" ." metric_timestamp" ,
71+ " m" ." metric_batch" ,
72+ " m" ." metric_name" ,
73+ " m" ." metric_value" ,
74+ " s" ." metric_score" ,
75+ COALESCE(" a" ." metric_alert_historic" , 0 ) AS " metric_alert_historic" ,
76+ " m" ." metric_value_recency_rank" ,
77+ " s" ." metric_score_recency_rank"
78+ FROM " metric_value_recency_ranked" AS " m"
79+ LEFT JOIN " metric_score_recency_ranked" AS " s"
80+ ON " m" ." metric_name" = " s" ." metric_name"
81+ AND " m" ." metric_batch" = " s" ." metric_batch"
82+ AND " m" ." metric_timestamp" = " s" ." metric_timestamp"
83+ LEFT JOIN " metric_alert_data" AS " a"
84+ ON " m" ." metric_name" = " a" ." metric_name"
85+ AND " m" ." metric_batch" = " a" ." metric_batch"
86+ AND " m" ." metric_timestamp" = " a" ." metric_timestamp"
87+ ), " data_smoothed" /* Smooth the data */ AS (
88+ SELECT
89+ " metric_timestamp" ,
90+ " metric_batch" ,
91+ " metric_name" ,
92+ " metric_value" ,
93+ " metric_score" ,
94+ " metric_alert_historic" ,
95+ " metric_value_recency_rank" ,
96+ " metric_score_recency_rank" ,
97+ (
98+ SELECT
99+ AVG (" ds" ." metric_score" )
100+ FROM " data_ranked" AS " ds"
101+ WHERE
102+ " ds" ." metric_name" = " dr" ." metric_name"
103+ AND " ds" ." metric_score_recency_rank" BETWEEN " dr" ." metric_score_recency_rank" - 3 AND " dr" ." metric_score_recency_rank"
104+ ) AS " metric_score_smooth" , /* Smooth the metric score using a custom window */
105+ (
106+ SELECT
107+ MAX (" ds" ." metric_alert_historic" )
108+ FROM " data_ranked" AS " ds"
109+ WHERE
110+ " ds" ." metric_name" = " dr" ." metric_name"
111+ AND " ds" ." metric_score_recency_rank" BETWEEN " dr" ." metric_score_recency_rank" - 3 AND " dr" ." metric_score_recency_rank" - 1
112+ ) AS " metric_has_recent_alert" /* Check for recent alerts */
113+ FROM " data_ranked" AS " dr"
114+ ), " data_alerts" /* Calculate the alerts */ AS (
115+ SELECT
116+ " metric_timestamp" ,
117+ " metric_batch" ,
118+ " metric_name" ,
119+ " metric_value" ,
120+ " metric_score" ,
121+ " metric_score_recency_rank" ,
122+ " metric_alert_historic" ,
123+ " metric_score_smooth" ,
124+ " metric_has_recent_alert" ,
125+ CASE
126+ WHEN " metric_score_recency_rank" <= 1
127+ AND (
128+ " metric_score_smooth" >= 0 .8 OR FALSE = TRUE
129+ )
130+ AND COALESCE(" metric_has_recent_alert" , 0 ) = 0
131+ THEN 1
132+ ELSE 0
133+ END AS " metric_alert_calculated"
134+ FROM " data_smoothed"
135+ WHERE
136+ " metric_score_recency_rank" <= 250
137+ OR FALSE /* flag for always alerting if set */ = TRUE
138+ ), " metrics_triggered" /* Filter the data to the metrics with triggered alerts */ AS (
139+ SELECT
140+ " metric_batch" ,
141+ " metric_name" ,
142+ MAX (" metric_alert_calculated" ) AS " metric_alert_calculated_tmp"
143+ FROM " data_alerts"
144+ GROUP BY
145+ " metric_batch" ,
146+ " metric_name"
147+ HAVING
148+ MAX (" metric_alert_calculated" ) = 1 OR FALSE = TRUE
149+ )
150+ /* Return the data */
151+ SELECT
152+ " metric_timestamp" ,
153+ " data_alerts" ." metric_batch" AS " metric_batch" ,
154+ " data_alerts" ." metric_name" AS " metric_name" ,
155+ " metric_value" ,
156+ " metric_score" ,
157+ " metric_score_smooth" ,
158+ IIF(" metric_score_recency_rank" = 1 , " metric_alert_calculated" , " metric_alert_historic" ) AS " metric_alert"
159+ FROM " data_alerts"
160+ JOIN " metrics_triggered"
161+ ON " data_alerts" ." metric_batch" = " metrics_triggered" ." metric_batch"
162+ AND " data_alerts" ." metric_name" = " metrics_triggered" ." metric_name"
0 commit comments