@cryptotaxi247 / netdata-1 / commits / f3ff1c9f4

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 }