Fix storing of repeat field (#18760)
Fix storing of "repeat" on alert hash table
Stelios Fragkakis committed
Oct 14, 2024 at 18:22 UTC
f3ff1c9f43d9b86c900efdfaa197f03688587c01
1 file changed
+12
-6
src/database/sqlite/sqlite_health.c
+12
-6
@@ -746,20 +746,20 @@ done:
746
* Store an alert config hash in the database
747
*/
748
#define SQL_STORE_ALERT_CONFIG_HASH \
749
- "insert or replace into alert_hash (hash_id, date_updated, alarm, template, " \
749
+ "INSERT OR REPLACE INTO alert_hash (hash_id, date_updated, alarm, template, " \
750
"on_key, class, component, type, lookup, every, units, calc, " \
751
"green, red, warn, crit, exec, to_key, info, delay, options, repeat, host_labels, " \
752
"p_db_lookup_dimensions, p_db_lookup_method, p_db_lookup_options, p_db_lookup_after, " \
753
"p_db_lookup_before, p_update_every, source, chart_labels, summary, time_group_condition, " \
754
"time_group_value, dims_group, data_source) " \
755
- "values (@hash_id,UNIXEPOCH(),@alarm,@template," \
755
+ "VALUES (@hash_id,UNIXEPOCH(),@alarm,@template," \
756
"@on_key,@class,@component,@type,@lookup,@every,@units,@calc," \
757
"@green,@red,@warn,@crit,@exec,@to_key,@info,@delay,@options,@repeat,@host_labels," \
758
"@p_db_lookup_dimensions,@p_db_lookup_method,@p_db_lookup_options,@p_db_lookup_after," \
759
"@p_db_lookup_before,@p_update_every,@source,@chart_labels,@summary, @time_group_condition, " \
760
"@time_group_value, @dims_group, @data_source)"
761
762
-void sql_alert_store_config(RRD_ALERT_PROTOTYPE *ap __maybe_unused)
762
+void sql_alert_store_config(RRD_ALERT_PROTOTYPE *ap)
763
{
764
static __thread sqlite3_stmt *res = NULL;
765
int param = 0;
@@ -767,7 +767,7 @@ void sql_alert_store_config(RRD_ALERT_PROTOTYPE *ap __maybe_unused)
767
if (!PREPARE_COMPILED_STATEMENT(db_meta, SQL_STORE_ALERT_CONFIG_HASH, &res))
768
return;
769
770
- BUFFER *buf = buffer_create(128, NULL);
770
+ CLEAN_BUFFER *buf = buffer_create(128, NULL);
771
772
SQLITE_BIND_FAIL(
773
done, sqlite3_bind_blob(res, ++param, &ap->config.hash_id, sizeof(ap->config.hash_id), SQLITE_STATIC));
@@ -833,7 +833,14 @@ void sql_alert_store_config(RRD_ALERT_PROTOTYPE *ap __maybe_unused)
833
else
834
SQLITE_BIND_FAIL(done, sqlite3_bind_null(res, ++param));
835
836
- SQLITE_BIND_FAIL(done, sqlite3_bind_int(res, ++param, ap->config.update_every));
836
+ if (!ap->config.has_custom_repeat_config)
837
+ SQLITE_BIND_FAIL(done, sqlite3_bind_null(res, ++param));
838
+ else {
839
+ char repeat[255];
840
+ snprintfz(repeat, sizeof(repeat) - 1, "warning %us critical %us", ap->config.warn_repeat_every, ap->config.crit_repeat_every);
841
+ SQLITE_BIND_FAIL(done, sqlite3_bind_text(res, ++param, repeat, -1, SQLITE_STATIC));
842
+ }
843
+
844
SQLITE_BIND_FAIL(done, SQLITE3_BIND_STRING_OR_NULL(res, ++param, ap->match.host_labels));
845
846
if (ap->config.after) {
@@ -866,7 +873,6 @@ void sql_alert_store_config(RRD_ALERT_PROTOTYPE *ap __maybe_unused)
873
error_report("Failed to store alert config, rc = %d", rc);
874
875
done:
869
- buffer_free(buf);
876
REPORT_BIND_FAIL(res, param);
877
SQLITE_RESET(res);
878
}