@cryptotaxi247 / netdata-1 / commits / 47ff87a0a

added chart to track the useful statsd metrics

Costa Tsaousis (ktsaou) committed Apr 17, 2018 at 02:00 UTC 47ff87a0a1c1abd95eb4bb28630ea5deaf171b61
1 file changed +36 -8
src/statsd.c
+36 -8
@@ -142,6 +142,7 @@ typedef struct statsd_index {
142 char *name; // the name of the index of metrics
143 size_t events; // the number of events processed for this index
144 size_t metrics; // the number of metrics in this index
145 + size_t useful; // the number of useful metrics in this index
146
147 STATSD_AVL_TREE index; // the AVL tree
148
@@ -458,13 +459,8 @@ static inline int value_is_zinit(const char *value) {
459 return (value && *value == 'z' && *++value == 'i' && *++value == 'n' && *++value == 'i' && *++value == 't' && *++value == '\0');
460 }
461
461 -static inline int is_metric_checked(STATSD_METRIC *m) {
462 - return ((m->options & (STATSD_METRIC_OPTION_PRIVATE_CHART_CHECKED|STATSD_METRIC_OPTION_CHECKED_IN_APPS)) == (STATSD_METRIC_OPTION_PRIVATE_CHART_CHECKED|STATSD_METRIC_OPTION_CHECKED_IN_APPS));
463 -}
464 -
465 -static inline int is_metric_useful(STATSD_METRIC *m) {
466 - return (!is_metric_checked(m) || (m->options & (STATSD_METRIC_OPTION_PRIVATE_CHART_ENABLED|STATSD_METRIC_OPTION_USED_IN_APPS)) != 0);
467 -}
462 +#define is_metric_checked(m) (((m)->options & (STATSD_METRIC_OPTION_PRIVATE_CHART_CHECKED|STATSD_METRIC_OPTION_CHECKED_IN_APPS)) == (STATSD_METRIC_OPTION_PRIVATE_CHART_CHECKED|STATSD_METRIC_OPTION_CHECKED_IN_APPS))
463 +#define is_metric_useful(m) (!is_metric_checked(m) || ((m)->options & (STATSD_METRIC_OPTION_PRIVATE_CHART_ENABLED|STATSD_METRIC_OPTION_USED_IN_APPS)) != 0)
464
465 static inline void statsd_process_gauge(STATSD_METRIC *m, const char *value, const char *sampling) {
466 if(!is_metric_useful(m)) return;
@@ -2089,14 +2085,16 @@ static inline void statsd_flush_index_metrics(STATSD_INDEX *index, void (*flush_
2085 }
2086
2087 if(is_metric_useful(m)) {
2088 + index->useful++;
2089 m->next_useful = index->first_useful;
2090 index->first_useful = m;
2091 }
2092 }
2093
2094 // flush all the useful metrics
2098 - for(m = index->first_useful; m ; m = m->next_useful)
2095 + for(m = index->first_useful; m ; m = m->next_useful) {
2096 flush_metric(m);
2097 + }
2098 }
2099
2100
@@ -2263,6 +2261,27 @@ void *statsd_main(void *ptr) {
2261 RRDDIM *rd_metrics_histogram = rrddim_add(st_metrics, "histograms", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2262 RRDDIM *rd_metrics_set = rrddim_add(st_metrics, "sets", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2263
2264 + RRDSET *st_useful_metrics = rrdset_create_localhost(
2265 + "netdata"
2266 + , "statsd_useful_metrics"
2267 + , NULL
2268 + , "statsd"
2269 + , NULL
2270 + , "Useful metrics in the netdata statsd database"
2271 + , "metrics"
2272 + , "statsd"
2273 + , "stats"
2274 + , 132010
2275 + , statsd.update_every
2276 + , RRDSET_TYPE_STACKED
2277 + );
2278 + RRDDIM *rd_useful_metrics_gauge = rrddim_add(st_useful_metrics, "gauges", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2279 + RRDDIM *rd_useful_metrics_counter = rrddim_add(st_useful_metrics, "counters", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2280 + RRDDIM *rd_useful_metrics_timer = rrddim_add(st_useful_metrics, "timers", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2281 + RRDDIM *rd_useful_metrics_meter = rrddim_add(st_useful_metrics, "meters", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2282 + RRDDIM *rd_useful_metrics_histogram = rrddim_add(st_useful_metrics, "histograms", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2283 + RRDDIM *rd_useful_metrics_set = rrddim_add(st_useful_metrics, "sets", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2284 +
2285 RRDSET *st_events = rrdset_create_localhost(
2286 "netdata"
2287 , "statsd_events"
@@ -2456,6 +2475,7 @@ void *statsd_main(void *ptr) {
2475
2476 if(likely(hb_dt)) {
2477 rrdset_next(st_metrics);
2478 + rrdset_next(st_useful_metrics);
2479 rrdset_next(st_events);
2480 rrdset_next(st_reads);
2481 rrdset_next(st_bytes);
@@ -2476,6 +2496,14 @@ void *statsd_main(void *ptr) {
2496 rrddim_set_by_pointer(st_metrics, rd_metrics_set, (collected_number)statsd.sets.metrics);
2497 rrdset_done(st_metrics);
2498
2499 + rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_gauge, (collected_number)statsd.gauges.useful);
2500 + rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_counter, (collected_number)statsd.counters.useful);
2501 + rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_timer, (collected_number)statsd.timers.useful);
2502 + rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_meter, (collected_number)statsd.meters.useful);
2503 + rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_histogram, (collected_number)statsd.histograms.useful);
2504 + rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_set, (collected_number)statsd.sets.useful);
2505 + rrdset_done(st_useful_metrics);
2506 +
2507 rrddim_set_by_pointer(st_events, rd_events_gauge, (collected_number)statsd.gauges.events);
2508 rrddim_set_by_pointer(st_events, rd_events_counter, (collected_number)statsd.counters.events);
2509 rrddim_set_by_pointer(st_events, rd_events_timer, (collected_number)statsd.timers.events);