Skip to content

Commit 3b870a6

Browse files
devin-ai-integration[bot]arbivharitamar
authored
fix: add ClickHouse-specific UPDATE syntax for alert status updates (#2090)
ClickHouse does not support standard SQL UPDATE statements. Instead, it requires ALTER TABLE ... UPDATE syntax for mutations. This change adds adapter dispatch for the update_skipped_alerts and update_sent_alerts macros to use the correct ClickHouse syntax when running on ClickHouse adapters. Fixes ClickHouse syntax error (Code 62) when running 'edr monitor'. Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Yosef Arbiv <yosef.arbiv@gmail.com> Co-authored-by: Itamar Hartstein <haritamar@gmail.com>
1 parent 684efe1 commit 3b870a6

2 files changed

Lines changed: 43 additions & 15 deletions

File tree

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,32 @@
11
{% macro update_sent_alerts(alert_ids, sent_at) %}
22
{% if execute %}
33
{% if alert_ids %}
4-
{% set update_sent_alerts_query %}
5-
update {{ ref('elementary_cli', 'alerts_v2') }}
6-
set status = 'sent',
7-
sent_at = {{ elementary.edr_cast_as_timestamp(elementary.edr_quote(sent_at)) }},
8-
updated_at = {{ elementary.edr_current_timestamp() }}
9-
where alert_id in {{ elementary.strings_list_to_tuple(alert_ids) }}
10-
and status = 'pending'
11-
and {{ elementary.edr_cast_as_timestamp('detected_at') }} >= {{ elementary_cli.get_alerts_time_limit() }}
12-
{% endset %}
4+
{% set update_sent_alerts_query = elementary_cli.get_update_sent_alerts_query(alert_ids, sent_at) %}
135
{% do elementary.run_query(update_sent_alerts_query) %}
146
{% endif %}
157
{% endif %}
168
{% endmacro %}
9+
10+
{% macro get_update_sent_alerts_query(alert_ids, sent_at) %}
11+
{% do return(adapter.dispatch("get_update_sent_alerts_query", "elementary_cli")(alert_ids, sent_at)) %}
12+
{% endmacro %}
13+
14+
{% macro default__get_update_sent_alerts_query(alert_ids, sent_at) %}
15+
update {{ ref('elementary_cli', 'alerts_v2') }}
16+
set status = 'sent',
17+
sent_at = {{ elementary.edr_cast_as_timestamp(elementary.edr_quote(sent_at)) }},
18+
updated_at = {{ elementary.edr_current_timestamp() }}
19+
where alert_id in {{ elementary.strings_list_to_tuple(alert_ids) }}
20+
and status = 'pending'
21+
and {{ elementary.edr_cast_as_timestamp('detected_at') }} >= {{ elementary_cli.get_alerts_time_limit() }}
22+
{% endmacro %}
23+
24+
{% macro clickhouse__get_update_sent_alerts_query(alert_ids, sent_at) %}
25+
ALTER TABLE {{ ref('elementary_cli', 'alerts_v2') }}
26+
UPDATE status = 'sent',
27+
sent_at = {{ elementary.edr_cast_as_timestamp(elementary.edr_quote(sent_at)) }},
28+
updated_at = {{ elementary.edr_current_timestamp() }}
29+
WHERE alert_id in {{ elementary.strings_list_to_tuple(alert_ids) }}
30+
and status = 'pending'
31+
and {{ elementary.edr_cast_as_timestamp('detected_at') }} >= {{ elementary_cli.get_alerts_time_limit() }}
32+
{% endmacro %}
Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
{% macro update_skipped_alerts(alert_ids) %}
22
{% if execute %}
33
{% if alert_ids %}
4-
{% set update_skipped_alerts_query %}
5-
UPDATE {{ ref('elementary_cli', 'alerts_v2') }} set status = 'skipped', updated_at = {{ elementary.edr_current_timestamp() }}
6-
WHERE alert_id IN {{ elementary.strings_list_to_tuple(alert_ids) }} and status = 'pending' and
7-
{{ elementary.edr_cast_as_timestamp('detected_at') }} >= {{ elementary_cli.get_alerts_time_limit() }}
8-
{% endset %}
4+
{% set update_skipped_alerts_query = elementary_cli.get_update_skipped_alerts_query(alert_ids) %}
95
{% do elementary.run_query(update_skipped_alerts_query) %}
106
{% endif %}
117
{% endif %}
12-
{% endmacro %}
8+
{% endmacro %}
9+
10+
{% macro get_update_skipped_alerts_query(alert_ids) %}
11+
{% do return(adapter.dispatch("get_update_skipped_alerts_query", "elementary_cli")(alert_ids)) %}
12+
{% endmacro %}
13+
14+
{% macro default__get_update_skipped_alerts_query(alert_ids) %}
15+
UPDATE {{ ref('elementary_cli', 'alerts_v2') }} set status = 'skipped', updated_at = {{ elementary.edr_current_timestamp() }}
16+
WHERE alert_id IN {{ elementary.strings_list_to_tuple(alert_ids) }} and status = 'pending' and
17+
{{ elementary.edr_cast_as_timestamp('detected_at') }} >= {{ elementary_cli.get_alerts_time_limit() }}
18+
{% endmacro %}
19+
20+
{% macro clickhouse__get_update_skipped_alerts_query(alert_ids) %}
21+
ALTER TABLE {{ ref('elementary_cli', 'alerts_v2') }} UPDATE status = 'skipped', updated_at = {{ elementary.edr_current_timestamp() }}
22+
WHERE alert_id IN {{ elementary.strings_list_to_tuple(alert_ids) }} and status = 'pending' and
23+
{{ elementary.edr_cast_as_timestamp('detected_at') }} >= {{ elementary_cli.get_alerts_time_limit() }}
24+
{% endmacro %}

0 commit comments

Comments
 (0)