} \
} 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); \
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);
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");
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);
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 */