diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:18 +0000 |
commit | 5da14042f70711ea5cf66e034699730335462f66 (patch) | |
tree | 0f6354ccac934ed87a2d555f45be4c831cf92f4a /src/health/health_prototypes.h | |
parent | Releasing debian version 1.44.3-2. (diff) | |
download | netdata-5da14042f70711ea5cf66e034699730335462f66.tar.xz netdata-5da14042f70711ea5cf66e034699730335462f66.zip |
Merging upstream version 1.45.3+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/health/health_prototypes.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/health/health_prototypes.h b/src/health/health_prototypes.h new file mode 100644 index 000000000..cbb5dba06 --- /dev/null +++ b/src/health/health_prototypes.h @@ -0,0 +1,138 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef NETDATA_HEALTH_PROTOTYPES_H +#define NETDATA_HEALTH_PROTOTYPES_H + +#include "../web/api/queries/rrdr.h" + +typedef enum __attribute__((packed)) { + ALERT_ACTION_OPTION_NONE = 0, + ALERT_ACTION_OPTION_NO_CLEAR_NOTIFICATION = (1 << 0), +} ALERT_ACTION_OPTIONS; + +typedef enum __attribute__((packed)) { + ALERT_LOOKUP_DATA_SOURCE_SAMPLES = 0, + ALERT_LOOKUP_DATA_SOURCE_PERCENTAGES, + ALERT_LOOKUP_DATA_SOURCE_ANOMALIES, +} ALERT_LOOKUP_DATA_SOURCE; +ALERT_LOOKUP_DATA_SOURCE alerts_data_sources2id(const char *source); +const char *alerts_data_source_id2source(ALERT_LOOKUP_DATA_SOURCE source); + +typedef enum __attribute__((packed)) { + ALERT_LOOKUP_DIMS_SUM = 0, + ALERT_LOOKUP_DIMS_MIN, + ALERT_LOOKUP_DIMS_MAX, + ALERT_LOOKUP_DIMS_AVERAGE, + ALERT_LOOKUP_DIMS_MIN2MAX, +} ALERT_LOOKUP_DIMS_GROUPING; +ALERT_LOOKUP_DIMS_GROUPING alerts_dims_grouping2id(const char *group); +const char *alerts_dims_grouping_id2group(ALERT_LOOKUP_DIMS_GROUPING grouping); + +typedef enum __attribute__((packed)) { + ALERT_LOOKUP_TIME_GROUP_CONDITION_EQUAL, + ALERT_LOOKUP_TIME_GROUP_CONDITION_NOT_EQUAL, + ALERT_LOOKUP_TIME_GROUP_CONDITION_GREATER, + ALERT_LOOKUP_TIME_GROUP_CONDITION_LESS, + ALERT_LOOKUP_TIME_GROUP_CONDITION_GREATER_EQUAL, + ALERT_LOOKUP_TIME_GROUP_CONDITION_LESS_EQUAL, +} ALERT_LOOKUP_TIME_GROUP_CONDITION; +ALERT_LOOKUP_TIME_GROUP_CONDITION alerts_group_condition2id(const char *source); +const char *alerts_group_conditions_id2txt(ALERT_LOOKUP_TIME_GROUP_CONDITION source); + +struct rrd_alert_match { + bool enabled; + + bool is_template; + union { + STRING *chart; + STRING *context; + } on; + + STRING *host_labels; // the label read from an alarm file + STRING *chart_labels; // the chart label read from an alarm file + + struct pattern_array *host_labels_pattern; + struct pattern_array *chart_labels_pattern; +}; +void rrd_alert_match_cleanup(struct rrd_alert_match *am); + +struct rrd_alert_config { + uuid_t hash_id; + + STRING *name; // the name of this alarm + + STRING *exec; // the command to execute when this alarm switches state + STRING *recipient; // the recipient of the alarm (the first parameter to exec) + + STRING *classification; // the class that this alarm belongs + STRING *component; // the component that this alarm refers to + STRING *type; // type of the alarm + + DYNCFG_SOURCE_TYPE source_type; + STRING *source; // the source of this alarm + STRING *units; // the units of the alarm + STRING *summary; // a short alert summary + STRING *info; // a description of the alarm + + int update_every; // update frequency for the alarm + + ALERT_ACTION_OPTIONS alert_action_options; + + // ------------------------------------------------------------------------ + // database lookup settings + + STRING *dimensions; // the chart dimensions + RRDR_TIME_GROUPING time_group; // grouping method: average, max, etc. + ALERT_LOOKUP_TIME_GROUP_CONDITION time_group_condition; + NETDATA_DOUBLE time_group_value; + ALERT_LOOKUP_DIMS_GROUPING dims_group; // grouping method for dimensions + ALERT_LOOKUP_DATA_SOURCE data_source; + int before; // ending point in time-series + int after; // starting point in time-series + RRDR_OPTIONS options; // configuration options + + // ------------------------------------------------------------------------ + // expressions related to the alarm + + EVAL_EXPRESSION *calculation; // expression to calculate the value of the alarm + EVAL_EXPRESSION *warning; // expression to check the warning condition + EVAL_EXPRESSION *critical; // expression to check the critical condition + + // ------------------------------------------------------------------------ + // notification delay settings + + int delay_up_duration; // duration to delay notifications when alarm raises + int delay_down_duration; // duration to delay notifications when alarm lowers + int delay_max_duration; // the absolute max delay to apply to this alarm + float delay_multiplier; // multiplier for all delays when alarms switch status + // while now < delay_up_to + + // ------------------------------------------------------------------------ + // notification repeat settings + + bool has_custom_repeat_config; + uint32_t warn_repeat_every; // interval between repeating warning notifications + uint32_t crit_repeat_every; // interval between repeating critical notifications +}; +void rrd_alert_config_cleanup(struct rrd_alert_config *ac); + +#include "health.h" + +void health_init_prototypes(void); + +bool health_plugin_enabled(void); +void health_plugin_disable(void); + +void health_reload_prototypes(void); +void health_apply_prototypes_to_host(RRDHOST *host); +void health_apply_prototypes_to_all_hosts(void); + +void health_prototype_alerts_for_rrdset_incrementally(RRDSET *st); + +struct rrd_alert_config; +struct rrd_alert_match; +void health_prototype_copy_config(struct rrd_alert_config *dst, struct rrd_alert_config *src); +void health_prototype_copy_match_without_patterns(struct rrd_alert_match *dst, struct rrd_alert_match *src); +void health_prototype_reset_alerts_for_rrdset(RRDSET *st); + +#endif //NETDATA_HEALTH_PROTOTYPES_H |