@cryptotaxi247 / netdata-1 / commits / 1c663765f

expose netdata alarms in allmetrics for shell

Costa Tsaousis (ktsaou) committed Jan 4, 2017 at 00:24 UTC 1c663765f4c9ee9ef25f932909b18b52f08ca1c6
3 files changed +36 -9
src/health.c
+1 -1
@@ -1023,7 +1023,7 @@ void rrdsetvar_free(RRDSETVAR *rs) {
1023 // ----------------------------------------------------------------------------
1024 // RRDCALC management
1025
1026 -static inline const char *rrdcalc_status2string(int status) {
1026 +inline const char *rrdcalc_status2string(int status) {
1027 switch(status) {
1028 case RRDCALC_STATUS_REMOVED:
1029 return "REMOVED";
src/health.h
+2
@@ -358,4 +358,6 @@ extern RRDVAR *rrdvar_custom_host_variable_create(RRDHOST *host, const char *nam
358 extern void rrdvar_custom_host_variable_destroy(RRDHOST *host, const char *name);
359 extern void rrdvar_custom_host_variable_set(RRDVAR *rv, calculated_number value);
360
361 +extern const char *rrdcalc_status2string(int status);
362 +
363 #endif //NETDATA_HEALTH_H
src/rrd2json.c
+33 -8
@@ -107,7 +107,8 @@ void rrd_stats_api_v1_charts(BUFFER *wb)
107
108 RRDCALC *rc;
109 for(rc = localhost.alarms; rc ; rc = rc->next) {
110 - alarms++;
110 + if(rc->rrdset)
111 + alarms++;
112 }
113 pthread_rwlock_unlock(&localhost.rrdset_root_rwlock);
114
@@ -217,21 +218,21 @@ static inline size_t shell_name_copy(char *d, const char *s, size_t usable) {
218 return n;
219 }
220
220 -#define BASH_ELEMENT_MAX 100
221 +#define SHELL_ELEMENT_MAX 100
222
223 void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
224 {
225 pthread_rwlock_rdlock(&localhost.rrdset_root_rwlock);
226
226 - char host[BASH_ELEMENT_MAX + 1];
227 - shell_name_copy(host, config_get("global", "hostname", "localhost"), BASH_ELEMENT_MAX);
227 + char host[SHELL_ELEMENT_MAX + 1];
228 + shell_name_copy(host, config_get("global", "hostname", "localhost"), SHELL_ELEMENT_MAX);
229
230 // for each chart
231 RRDSET *st;
232 for(st = localhost.rrdset_root; st ; st = st->next) {
233 calculated_number total = 0.0;
233 - char chart[BASH_ELEMENT_MAX + 1];
234 - shell_name_copy(chart, st->id, BASH_ELEMENT_MAX);
234 + char chart[SHELL_ELEMENT_MAX + 1];
235 + shell_name_copy(chart, st->id, SHELL_ELEMENT_MAX);
236
237 buffer_sprintf(wb, "\n# chart: %s (name: %s)\n", st->id, st->name);
238 if(st->enabled && st->dimensions) {
@@ -241,8 +242,8 @@ void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
242 RRDDIM *rd;
243 for(rd = st->dimensions; rd ; rd = rd->next) {
244 if(rd->counter) {
244 - char dimension[BASH_ELEMENT_MAX + 1];
245 - shell_name_copy(dimension, rd->id, BASH_ELEMENT_MAX);
245 + char dimension[SHELL_ELEMENT_MAX + 1];
246 + shell_name_copy(dimension, rd->id, SHELL_ELEMENT_MAX);
247
248 calculated_number n = rd->last_stored_value;
249
@@ -263,6 +264,30 @@ void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
264 }
265 }
266
267 + buffer_strcat(wb, "\n# NETDATA ALARMS RUNNING\n");
268 +
269 + RRDCALC *rc;
270 + for(rc = localhost.alarms; rc ;rc = rc->next) {
271 + if(!rc->rrdset) continue;
272 +
273 + char chart[SHELL_ELEMENT_MAX + 1];
274 + shell_name_copy(chart, rc->rrdset->id, SHELL_ELEMENT_MAX);
275 +
276 + char alarm[SHELL_ELEMENT_MAX + 1];
277 + shell_name_copy(alarm, rc->name, SHELL_ELEMENT_MAX);
278 +
279 + calculated_number n = rc->value;
280 +
281 + if(isnan(n) || isinf(n))
282 + buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_VALUE=\"\" # %s\n", chart, alarm, rc->units);
283 + else {
284 + n = roundl(n);
285 + buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_VALUE=\"%0.0Lf\" # %s\n", chart, alarm, n, rc->units);
286 + }
287 +
288 + buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_STATUS=\"%s\"\n", chart, alarm, rrdcalc_status2string(rc->status));
289 + }
290 +
291 pthread_rwlock_unlock(&localhost.rrdset_root_rwlock);
292 }
293