aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2021-03-17 12:37:41 +0100
committerOliver Smith <osmith@sysmocom.de>2021-03-17 17:52:37 +0100
commitd290439b4afe928e7e341540cb92f1abf36a82cb (patch)
tree7bd6f0ce96a532c2fa0a05c3a9220d346ecd8c38
parentd89d35e933baec9bfa5fc78a8230c6e8fea62efe (diff)
stats: log error when missing stats values
Let the user know when the stats were not consumed fast enough for the given FIFO length. Related: SYS#4877 Change-Id: If0e8ab55103007693101538fb6ea310075217774
-rw-r--r--src/stat_item.c5
-rw-r--r--tests/stats/stats_test.c7
-rw-r--r--tests/stats/stats_test.err144
3 files changed, 156 insertions, 0 deletions
diff --git a/src/stat_item.c b/src/stat_item.c
index ba364640..a44b3ad7 100644
--- a/src/stat_item.c
+++ b/src/stat_item.c
@@ -60,6 +60,7 @@
#include <osmocom/core/talloc.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/stat_item.h>
+#include <osmocom/core/logging.h>
/*! global list of stat_item groups */
static LLIST_HEAD(osmo_stat_item_groups);
@@ -242,6 +243,10 @@ int osmo_stat_item_get_next(const struct osmo_stat_item *item, int32_t *next_idx
idx_delta = item_value->id + 1 - *next_idx;
+ if (idx_delta > 1) {
+ LOGP(DLSTATS, LOGL_ERROR, "%s: %d stats values skipped\n", item->desc->name, idx_delta - 1);
+ }
+
*next_idx = item_value->id + 1;
return idx_delta;
diff --git a/tests/stats/stats_test.c b/tests/stats/stats_test.c
index 707f606f..b81ad6b5 100644
--- a/tests/stats/stats_test.c
+++ b/tests/stats/stats_test.c
@@ -120,6 +120,7 @@ static void stat_test(void)
value = osmo_stat_item_get_last(statg->items[TEST_A_ITEM]);
OSMO_ASSERT(value == -1);
+ fprintf(stderr, "osmo_stat_item_get_next rc == 0\n");
rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
OSMO_ASSERT(rc == 0);
@@ -128,13 +129,16 @@ static void stat_test(void)
value = osmo_stat_item_get_last(statg->items[TEST_A_ITEM]);
OSMO_ASSERT(value == 1);
+ fprintf(stderr, "osmo_stat_item_get_next rc > 0\n");
rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
OSMO_ASSERT(rc > 0);
OSMO_ASSERT(value == 1);
+ fprintf(stderr, "osmo_stat_item_get_next rc == 0\n");
rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
OSMO_ASSERT(rc == 0);
+ fprintf(stderr, "osmo_stat_item_get_next rc > 0\n");
for (i = 2; i <= 32; i++) {
osmo_stat_item_set(statg->items[TEST_A_ITEM], i);
osmo_stat_item_set(statg->items[TEST_B_ITEM], 1000 + i);
@@ -220,17 +224,20 @@ static void stat_test(void)
rc = osmo_stat_item_discard(statg->items[TEST_A_ITEM], &rd_a);
OSMO_ASSERT(rc > 0);
+ fprintf(stderr, "osmo_stat_item_get_next rc == 0\n");
rc = osmo_stat_item_discard(statg->items[TEST_A_ITEM], &rd_a);
OSMO_ASSERT(rc == 0);
rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
OSMO_ASSERT(rc == 0);
+ fprintf(stderr, "osmo_stat_item_get_next rc > 0\n");
osmo_stat_item_set(statg->items[TEST_A_ITEM], 98);
rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
OSMO_ASSERT(rc > 0);
OSMO_ASSERT(value == 98);
+ fprintf(stderr, "osmo_stat_item_get_next rc == 0\n");
rc = osmo_stat_item_get_next(statg->items[TEST_A_ITEM], &rd_a, &value);
OSMO_ASSERT(rc == 0);
diff --git a/tests/stats/stats_test.err b/tests/stats/stats_test.err
index 3accf545..d059ffd1 100644
--- a/tests/stats/stats_test.err
+++ b/tests/stats/stats_test.err
@@ -1,3 +1,147 @@
+osmo_stat_item_get_next rc == 0
+osmo_stat_item_get_next rc > 0
+DLSTATS ERROR item.a: 1 stats values skipped
+osmo_stat_item_get_next rc == 0
+osmo_stat_item_get_next rc > 0
+DLSTATS ERROR item.b: 3 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 4 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.a: 57 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.a: 1 stats values skipped
+DLSTATS ERROR item.b: 51 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+DLSTATS ERROR item.b: 1 stats values skipped
+osmo_stat_item_get_next rc == 0
+osmo_stat_item_get_next rc > 0
+osmo_stat_item_get_next rc == 0
Start test: test_reporting
DLGLOBAL ERROR counter group 'ctr-test:one' already exists for index 2, instead using index 3. This is a software bug that needs fixing.
DLGLOBAL ERROR 'ctr-test.one_dot' is not a valid counter group identifier