aboutsummaryrefslogtreecommitdiffstats
path: root/src/ctrl
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2017-11-23 20:34:02 +0100
committerMax <msuraev@sysmocom.de>2017-11-24 10:44:28 +0000
commit52a38ddfde38afcbfa0fd57d1286aaf238dfffcd (patch)
tree6cc92aeee28610ac89c7a0c34bee7058cd9007d6 /src/ctrl
parentf9b1e5556a43738322b8a566beec7bc93d120fdd (diff)
Ctrl: add rate counter group introspection
Before user have to know group name and index in advance to request rate counter value. Introduce introspection function which allows user to obtain all the groups and their indexes by requesting 'rate_ctr.*' variable. This simplifies KPI dumping over ctrl interface. Change-Id: Ifad8b4f0360c8bcd123a838676516476e84c246a Related: OS#2550
Diffstat (limited to 'src/ctrl')
-rw-r--r--src/ctrl/control_if.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c
index 07b17c90..665239a2 100644
--- a/src/ctrl/control_if.c
+++ b/src/ctrl/control_if.c
@@ -534,6 +534,19 @@ oom:
return CTRL_CMD_ERROR;
}
+static int ctrl_rate_ctr_group_handler(struct rate_ctr_group *ctrg, void *data)
+{
+ struct ctrl_cmd *cmd = data;
+
+ cmd->reply = talloc_asprintf_append(cmd->reply, "%s.%u;", ctrg->desc->group_name_prefix, ctrg->idx);
+ if (!cmd->reply) {
+ cmd->reply = "OOM";
+ return -1;
+ }
+
+ return 0;
+}
+
/* rate_ctr */
CTRL_CMD_DEFINE(rate_ctr, "rate_ctr *");
static int get_rate_ctr(struct ctrl_cmd *cmd, void *data)
@@ -574,6 +587,11 @@ static int get_rate_ctr(struct ctrl_cmd *cmd, void *data)
intv = RATE_CTR_INTV_HOUR;
} else if (!strcmp(interval, "per_day")) {
intv = RATE_CTR_INTV_DAY;
+ } else if (!strcmp(interval, "*")) {
+ intv = rate_ctr_for_each_group(ctrl_rate_ctr_group_handler, cmd);
+ if (intv < 0)
+ return CTRL_CMD_ERROR;
+ return CTRL_CMD_REPLY;
} else {
talloc_free(dup);
cmd->reply = "Wrong interval.";