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