From b4b090347f59ac8877f3c27957ad67f96d53ff8e Mon Sep 17 00:00:00 2001 From: Carlos Peon Costa Date: Mon, 17 Oct 2022 10:02:46 +0200 Subject: [PATCH] - allow alertmanager correlation and resolve - fix meta names with ':' --- src/utils/format_json/format_json.c | 37 ++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/utils/format_json/format_json.c b/src/utils/format_json/format_json.c index ac3729acf..9b8f482be 100644 --- a/src/utils/format_json/format_json.c +++ b/src/utils/format_json/format_json.c @@ -493,6 +493,22 @@ static int json_add_string(yajl_gen g, char const *str) /* {{{ */ } \ } while (0) +#define JSON_ADD_LABEL(g, str) \ + do { \ + char *label = strdup(str); \ + if (label == NULL) \ + return -1; \ + int len = strlen(str); \ + for (int i = 0; i < len; i++) \ + if (label[i] == ':') \ + label[i] = '_'; \ + yajl_gen_status status = json_add_string(g, label); \ + free(label); \ + if (status != yajl_gen_status_ok) { \ + return -1; \ + } \ + } while (0) + #define CHECK_SUCCESS(cmd) \ do { \ yajl_gen_status s = (cmd); \ @@ -506,7 +522,7 @@ static int format_json_meta(yajl_gen g, notification_meta_t *meta) /* {{{ */ if (meta == NULL) return 0; - JSON_ADD(g, meta->name); + JSON_ADD_LABEL(g, meta->name); switch (meta->type) { case NM_TYPE_STRING: JSON_ADD(g, meta->nm_value.nm_string); @@ -577,13 +593,6 @@ static int format_alert(yajl_gen g, notification_t const *n) /* {{{ */ JSON_ADD(g, n->type_instance); } - JSON_ADD(g, "severity"); - JSON_ADD(g, (n->severity == NOTIF_FAILURE) - ? "FAILURE" - : (n->severity == NOTIF_WARNING) - ? "WARNING" - : (n->severity == NOTIF_OKAY) ? "OKAY" : "UNKNOWN"); - JSON_ADD(g, "service"); JSON_ADD(g, "collectd"); @@ -595,6 +604,12 @@ static int format_alert(yajl_gen g, notification_t const *n) /* {{{ */ JSON_ADD(g, "annotations"); CHECK_SUCCESS(yajl_gen_map_open(g)); /* BEGIN annotations */ + JSON_ADD(g, "severity"); + JSON_ADD(g, (n->severity == NOTIF_FAILURE) + ? "FAILURE" + : (n->severity == NOTIF_WARNING) + ? "WARNING" + : (n->severity == NOTIF_OKAY) ? "OKAY" : "UNKNOWN"); JSON_ADD(g, "summary"); JSON_ADD(g, n->message); @@ -608,6 +623,12 @@ static int format_alert(yajl_gen g, notification_t const *n) /* {{{ */ if (format_time(g, n->time) != 0) { return -1; } + if (n->severity == NOTIF_OKAY) { + JSON_ADD(g, "endsAt"); + if (format_time(g, n->time) != 0) { + return -1; + } + } CHECK_SUCCESS(yajl_gen_map_close(g)); /* END alert */ CHECK_SUCCESS(yajl_gen_array_close(g)); /* END array */ -- 2.47.2