]> arthur.barton.de Git - netdata.git/commitdiff
expose netdata alarms in allmetrics for shell
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Tue, 3 Jan 2017 22:24:11 +0000 (00:24 +0200)
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Tue, 3 Jan 2017 22:24:11 +0000 (00:24 +0200)
src/health.c
src/health.h
src/rrd2json.c

index 14df6dd9ed4e78e5ad29b11230d47f53a76dd26a..dd2d82644e481b60ec6870dc7f9137b039021232 100755 (executable)
@@ -1023,7 +1023,7 @@ void rrdsetvar_free(RRDSETVAR *rs) {
 // ----------------------------------------------------------------------------
 // RRDCALC management
 
-static inline const char *rrdcalc_status2string(int status) {
+inline const char *rrdcalc_status2string(int status) {
     switch(status) {
         case RRDCALC_STATUS_REMOVED:
             return "REMOVED";
index 10885c623769b6665aec2a1fc25a397b89bcf924..5b4d8538254447ede04abfa03a83422fa091de78 100644 (file)
@@ -358,4 +358,6 @@ extern RRDVAR *rrdvar_custom_host_variable_create(RRDHOST *host, const char *nam
 extern void rrdvar_custom_host_variable_destroy(RRDHOST *host, const char *name);
 extern void rrdvar_custom_host_variable_set(RRDVAR *rv, calculated_number value);
 
+extern const char *rrdcalc_status2string(int status);
+
 #endif //NETDATA_HEALTH_H
index a5d651525777afadcecd4f3b2f7c15e0b3de7188..7c42641b2f266904ca0bb51c319c92c83bc0c53d 100644 (file)
@@ -107,7 +107,8 @@ void rrd_stats_api_v1_charts(BUFFER *wb)
 
     RRDCALC *rc;
     for(rc = localhost.alarms; rc ; rc = rc->next) {
-        alarms++;
+        if(rc->rrdset)
+            alarms++;
     }
     pthread_rwlock_unlock(&localhost.rrdset_root_rwlock);
 
@@ -217,21 +218,21 @@ static inline size_t shell_name_copy(char *d, const char *s, size_t usable) {
     return n;
 }
 
-#define BASH_ELEMENT_MAX 100
+#define SHELL_ELEMENT_MAX 100
 
 void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
 {
     pthread_rwlock_rdlock(&localhost.rrdset_root_rwlock);
 
-    char host[BASH_ELEMENT_MAX + 1];
-    shell_name_copy(host, config_get("global", "hostname", "localhost"), BASH_ELEMENT_MAX);
+    char host[SHELL_ELEMENT_MAX + 1];
+    shell_name_copy(host, config_get("global", "hostname", "localhost"), SHELL_ELEMENT_MAX);
 
     // for each chart
     RRDSET *st;
     for(st = localhost.rrdset_root; st ; st = st->next) {
         calculated_number total = 0.0;
-        char chart[BASH_ELEMENT_MAX + 1];
-        shell_name_copy(chart, st->id, BASH_ELEMENT_MAX);
+        char chart[SHELL_ELEMENT_MAX + 1];
+        shell_name_copy(chart, st->id, SHELL_ELEMENT_MAX);
 
         buffer_sprintf(wb, "\n# chart: %s (name: %s)\n", st->id, st->name);
         if(st->enabled && st->dimensions) {
@@ -241,8 +242,8 @@ void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
             RRDDIM *rd;
             for(rd = st->dimensions; rd ; rd = rd->next) {
                 if(rd->counter) {
-                    char dimension[BASH_ELEMENT_MAX + 1];
-                    shell_name_copy(dimension, rd->id, BASH_ELEMENT_MAX);
+                    char dimension[SHELL_ELEMENT_MAX + 1];
+                    shell_name_copy(dimension, rd->id, SHELL_ELEMENT_MAX);
 
                     calculated_number n = rd->last_stored_value;
 
@@ -263,6 +264,30 @@ void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
         }
     }
 
+    buffer_strcat(wb, "\n# NETDATA ALARMS RUNNING\n");
+
+    RRDCALC *rc;
+    for(rc = localhost.alarms; rc ;rc = rc->next) {
+        if(!rc->rrdset) continue;
+
+        char chart[SHELL_ELEMENT_MAX + 1];
+        shell_name_copy(chart, rc->rrdset->id, SHELL_ELEMENT_MAX);
+
+        char alarm[SHELL_ELEMENT_MAX + 1];
+        shell_name_copy(alarm, rc->name, SHELL_ELEMENT_MAX);
+
+        calculated_number n = rc->value;
+
+        if(isnan(n) || isinf(n))
+            buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_VALUE=\"\"      # %s\n", chart, alarm, rc->units);
+        else {
+            n = roundl(n);
+            buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_VALUE=\"%0.0Lf\"      # %s\n", chart, alarm, n, rc->units);
+        }
+
+        buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_STATUS=\"%s\"\n", chart, alarm, rrdcalc_status2string(rc->status));
+    }
+
     pthread_rwlock_unlock(&localhost.rrdset_root_rwlock);
 }