From bc4f7ae512b32fa4b569dfc5242d0b7a5da3f81b Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Wed, 28 Oct 2015 21:47:45 +0100 Subject: stats: Add log reporter This reporter passes the measurement values to the logging subsystem as DSTATS (which is currently DLGLOBAL) level INFO messages. Sponsored-by: On-Waves ehf --- src/stats.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src/stats.c') diff --git a/src/stats.c b/src/stats.c index f4c0b623..5027a621 100644 --- a/src/stats.c +++ b/src/stats.c @@ -68,6 +68,14 @@ static int stats_reporter_statsd_send_item(struct stats_reporter *srep, const struct stat_item_group *statg, const struct stat_item_desc *desc, int value); +static int stats_reporter_log_send_counter(struct stats_reporter *srep, + const struct rate_ctr_group *ctrg, + const struct rate_ctr_desc *desc, + int64_t value, int64_t delta); +static int stats_reporter_log_send_item(struct stats_reporter *srep, + const struct stat_item_group *statg, + const struct stat_item_desc *desc, int value); + static int stats_reporter_send(struct stats_reporter *srep, const char *data, int data_len); static int stats_reporter_send_buffer(struct stats_reporter *srep); @@ -309,6 +317,61 @@ static int stats_reporter_send_buffer(struct stats_reporter *srep) return rc; } +/*** log reporter ***/ + +struct stats_reporter *stats_reporter_create_log(const char *name) +{ + struct stats_reporter *srep; + srep = stats_reporter_alloc(STATS_REPORTER_LOG, name); + + srep->have_net_config = 0; + + srep->send_counter = stats_reporter_log_send_counter; + srep->send_item = stats_reporter_log_send_item; + + return srep; +} + +static int stats_reporter_log_send(struct stats_reporter *srep, + const char *type, + const char *name1, int index1, const char *name2, int value, + const char *unit) +{ + LOGP(DSTATS, LOGL_INFO, + "stats t=%s p=%s g=%s i=%d n=%s v=%d u=%s\n", + type, srep->name_prefix ? srep->name_prefix : "", + name1 ? name1 : "", index1, + name2, value, unit ? unit : ""); + + return 0; +} + + +static int stats_reporter_log_send_counter(struct stats_reporter *srep, + const struct rate_ctr_group *ctrg, + const struct rate_ctr_desc *desc, + int64_t value, int64_t delta) +{ + if (ctrg) + return stats_reporter_log_send(srep, "c", + ctrg->desc->group_name_prefix, + ctrg->idx, + desc->name, value, NULL); + else + return stats_reporter_log_send(srep, "c", + NULL, -1, + desc->name, value, NULL); +} + +static int stats_reporter_log_send_item(struct stats_reporter *srep, + const struct stat_item_group *statg, + const struct stat_item_desc *desc, int value) +{ + return stats_reporter_log_send(srep, "i", + statg->desc->group_name_prefix, statg->idx, + desc->name, value, desc->unit); +} + /*** statsd reporter ***/ struct stats_reporter *stats_reporter_create_statsd(const char *name) -- cgit v1.2.3