aboutsummaryrefslogtreecommitdiffstats
path: root/src/stats.c
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-11-09 15:33:44 +0100
committerJacob Erlbeck <jerlbeck@sysmocom.de>2015-11-26 12:52:24 +0100
commitb6e6bea4ecea4b0769fc56136321f01f553459ba (patch)
tree763a7e41398f8334f9f54edbc8c6145bb2c4a920 /src/stats.c
parent5fa0dcc2750a79920d4a6404e960c50667840058 (diff)
stats: Move statsd related code into a separate file
This commit moves the stats specific code parts into stats_statsd.c while keeping the generic parts in stats.c. The code in stats.c no longer contains references to statsd symbols. Note that the VTY code still needs to know about every stats reporter backend. Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/stats.c')
-rw-r--r--src/stats.c148
1 files changed, 9 insertions, 139 deletions
diff --git a/src/stats.c b/src/stats.c
index 16e2971d..55479109 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -42,7 +42,7 @@
#include <osmocom/core/msgb.h>
#define STATS_DEFAULT_INTERVAL 5 /* secs */
-#define STATS_DEFAULT_STATSD_BUFLEN 256
+#define STATS_DEFAULT_BUFLEN 256
static LLIST_HEAD(osmo_stats_reporter_list);
static void *osmo_stats_ctx = NULL;
@@ -56,16 +56,6 @@ struct osmo_stats_config *osmo_stats_config = &s_stats_config;
static struct osmo_timer_list osmo_stats_timer;
-static int osmo_stats_reporter_statsd_open(struct osmo_stats_reporter *srep);
-static int osmo_stats_reporter_statsd_close(struct osmo_stats_reporter *srep);
-static int osmo_stats_reporter_statsd_send_counter(struct osmo_stats_reporter *srep,
- const struct rate_ctr_group *ctrg,
- const struct rate_ctr_desc *desc,
- int64_t value, int64_t delta);
-static int osmo_stats_reporter_statsd_send_item(struct osmo_stats_reporter *srep,
- const struct osmo_stat_item_group *statg,
- const struct osmo_stat_item_desc *desc, int value);
-
static int osmo_stats_reporter_log_send_counter(struct osmo_stats_reporter *srep,
const struct rate_ctr_group *ctrg,
const struct rate_ctr_desc *desc,
@@ -74,10 +64,6 @@ static int osmo_stats_reporter_log_send_item(struct osmo_stats_reporter *srep,
const struct osmo_stat_item_group *statg,
const struct osmo_stat_item_desc *desc, int value);
-static int osmo_stats_reporter_send(struct osmo_stats_reporter *srep, const char *data,
- int data_len);
-static int osmo_stats_reporter_send_buffer(struct osmo_stats_reporter *srep);
-
static int update_srep_config(struct osmo_stats_reporter *srep)
{
int rc = 0;
@@ -300,7 +286,7 @@ int osmo_stats_reporter_disable(struct osmo_stats_reporter *srep)
return update_srep_config(srep);
}
-static int osmo_stats_reporter_send(struct osmo_stats_reporter *srep, const char *data,
+int osmo_stats_reporter_send(struct osmo_stats_reporter *srep, const char *data,
int data_len)
{
int rc;
@@ -314,7 +300,7 @@ static int osmo_stats_reporter_send(struct osmo_stats_reporter *srep, const char
return rc;
}
-static int osmo_stats_reporter_send_buffer(struct osmo_stats_reporter *srep)
+int osmo_stats_reporter_send_buffer(struct osmo_stats_reporter *srep)
{
int rc;
@@ -394,31 +380,16 @@ static int osmo_stats_reporter_log_send_item(struct osmo_stats_reporter *srep,
desc->name, value, desc->unit);
}
-/*** statsd reporter ***/
-
-struct osmo_stats_reporter *osmo_stats_reporter_create_statsd(const char *name)
-{
- struct osmo_stats_reporter *srep;
- srep = osmo_stats_reporter_alloc(OSMO_STATS_REPORTER_STATSD, name);
-
- srep->have_net_config = 1;
-
- srep->open = osmo_stats_reporter_statsd_open;
- srep->close = osmo_stats_reporter_statsd_close;
- srep->send_counter = osmo_stats_reporter_statsd_send_counter;
- srep->send_item = osmo_stats_reporter_statsd_send_item;
-
- return srep;
-}
+/*** i/o helper functions ***/
-static int osmo_stats_reporter_statsd_open(struct osmo_stats_reporter *srep)
+int osmo_stats_reporter_udp_open(struct osmo_stats_reporter *srep)
{
int sock;
int rc;
- int buffer_size = STATS_DEFAULT_STATSD_BUFLEN;
+ int buffer_size = STATS_DEFAULT_BUFLEN;
- if (srep->fd != -1)
- osmo_stats_reporter_statsd_close(srep);
+ if (srep->fd != -1 && srep->close)
+ srep->close(srep);
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1)
@@ -448,7 +419,7 @@ failed:
return rc;
}
-static int osmo_stats_reporter_statsd_close(struct osmo_stats_reporter *srep)
+int osmo_stats_reporter_udp_close(struct osmo_stats_reporter *srep)
{
int rc;
if (srep->fd == -1)
@@ -463,107 +434,6 @@ static int osmo_stats_reporter_statsd_close(struct osmo_stats_reporter *srep)
return rc == -1 ? -errno : 0;
}
-static int osmo_stats_reporter_statsd_send(struct osmo_stats_reporter *srep,
- const char *name1, unsigned int index1, const char *name2, int value,
- const char *unit)
-{
- char *buf;
- int buf_size;
- int nchars, rc = 0;
- char *fmt = NULL;
- char *prefix = srep->name_prefix;
- int old_len = msgb_length(srep->buffer);
-
- if (prefix) {
- if (name1) {
- if (index1 != 0)
- fmt = "%1$s.%2$s.%6$u.%3$s:%4$d|%5$s";
- else
- fmt = "%1$s.%2$s.%3$s:%4$d|%5$s";
- } else {
- fmt = "%1$s.%2$0.0s%3$s:%4$d|%5$s";
- }
- } else {
- prefix = "";
- if (name1) {
- if (index1 != 0)
- fmt = "%1$s%2$s.%6$u.%3$s:%4$d|%5$s";
- else
- fmt = "%1$s%2$s.%3$s:%4$d|%5$s";
- } else {
- fmt = "%1$s%2$0.0s%3$s:%4$d|%5$s";
- }
- }
-
- if (srep->agg_enabled) {
- if (msgb_length(srep->buffer) > 0 &&
- msgb_tailroom(srep->buffer) > 0)
- {
- msgb_put_u8(srep->buffer, '\n');
- }
- }
-
- buf = (char *)msgb_put(srep->buffer, 0);
- buf_size = msgb_tailroom(srep->buffer);
-
- nchars = snprintf(buf, buf_size, fmt,
- prefix, name1, name2,
- value, unit, index1);
-
- if (nchars >= buf_size) {
- /* Truncated */
- /* Restore original buffer (without trailing LF) */
- msgb_trim(srep->buffer, old_len);
- /* Send it */
- rc = osmo_stats_reporter_send_buffer(srep);
-
- /* Try again */
- buf = (char *)msgb_put(srep->buffer, 0);
- buf_size = msgb_tailroom(srep->buffer);
-
- nchars = snprintf(buf, buf_size, fmt,
- prefix, name1, name2,
- value, unit, index1);
-
- if (nchars >= buf_size)
- return -EMSGSIZE;
- }
-
- if (nchars > 0)
- msgb_trim(srep->buffer, msgb_length(srep->buffer) + nchars);
-
- if (!srep->agg_enabled)
- rc = osmo_stats_reporter_send_buffer(srep);
-
- return rc;
-}
-
-static int osmo_stats_reporter_statsd_send_counter(struct osmo_stats_reporter *srep,
- const struct rate_ctr_group *ctrg,
- const struct rate_ctr_desc *desc,
- int64_t value, int64_t delta)
-{
- if (ctrg)
- return osmo_stats_reporter_statsd_send(srep,
- ctrg->desc->group_name_prefix,
- ctrg->idx,
- desc->name, delta, "c");
- else
- return osmo_stats_reporter_statsd_send(srep,
- NULL, 0,
- desc->name, delta, "c");
-}
-
-static int osmo_stats_reporter_statsd_send_item(struct osmo_stats_reporter *srep,
- const struct osmo_stat_item_group *statg,
- const struct osmo_stat_item_desc *desc, int value)
-{
- return osmo_stats_reporter_statsd_send(srep,
- statg->desc->group_name_prefix,
- statg->idx,
- desc->name, value, desc->unit);
-}
-
/*** generic rate counter support ***/
static int osmo_stats_reporter_send_counter(struct osmo_stats_reporter *srep,