aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bsc
diff options
context:
space:
mode:
authorMichael Iedema <michael@kapsulate.com>2021-03-04 13:14:10 +0000
committerdaniel <dwillmann@sysmocom.de>2021-05-04 16:09:46 +0000
commit858ac62b883900eb8958ccf8ec1f8aab21100476 (patch)
tree085c13acff520134083f60ead562710231e044f5 /src/osmo-bsc
parent377aac83bb31b876f02670b36097ab6a8d442b38 (diff)
stats: add BTS uptime counter
Diffstat (limited to 'src/osmo-bsc')
-rw-r--r--src/osmo-bsc/bsc_init.c16
-rw-r--r--src/osmo-bsc/bts.c9
2 files changed, 25 insertions, 0 deletions
diff --git a/src/osmo-bsc/bsc_init.c b/src/osmo-bsc/bsc_init.c
index b572f27f0..24596f4eb 100644
--- a/src/osmo-bsc/bsc_init.c
+++ b/src/osmo-bsc/bsc_init.c
@@ -85,6 +85,18 @@ static void update_t3122_chan_load_timer(void *data)
osmo_timer_schedule(&net->t3122_chan_load_timer, T3122_CHAN_LOAD_SAMPLE_INTERVAL, 0);
}
+static void bsc_store_bts_uptime(void *data)
+{
+ struct gsm_network *net = data;
+ struct gsm_bts *bts;
+
+ llist_for_each_entry(bts, &net->bts_list, list)
+ bts_store_uptime(bts);
+
+ /* Keep this timer ticking. */
+ osmo_timer_schedule(&net->bts_store_uptime_timer, BTS_STORE_UPTIME_INTERVAL, 0);
+}
+
static struct gsm_network *bsc_network_init(void *ctx)
{
struct gsm_network *net = gsm_network_init(ctx);
@@ -128,6 +140,10 @@ static struct gsm_network *bsc_network_init(void *ctx)
osmo_timer_setup(&net->t3122_chan_load_timer, update_t3122_chan_load_timer, net);
osmo_timer_schedule(&net->t3122_chan_load_timer, T3122_CHAN_LOAD_SAMPLE_INTERVAL, 0);
+ /* Init uptime tracking timer. */
+ osmo_timer_setup(&net->bts_store_uptime_timer, bsc_store_bts_uptime, net);
+ osmo_timer_schedule(&net->bts_store_uptime_timer, BTS_STORE_UPTIME_INTERVAL, 0);
+
net->cbc->net = net;
net->cbc->mode = BSC_CBC_LINK_MODE_DISABLED;
net->cbc->server.local_addr = bsc_cbc_default_server_local_addr;
diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c
index 2192c560f..17659a1b2 100644
--- a/src/osmo-bsc/bts.c
+++ b/src/osmo-bsc/bts.c
@@ -556,6 +556,11 @@ struct gsm_bts_trx *gsm_bts_trx_num(const struct gsm_bts *bts, int num)
return NULL;
}
+void bts_store_uptime(struct gsm_bts *bts)
+{
+ osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_UPTIME_SECONDS], bts_uptime(bts));
+}
+
unsigned long long bts_uptime(const struct gsm_bts *bts)
{
struct timespec tp;
@@ -1112,6 +1117,10 @@ const struct rate_ctr_group_desc bts_ctrg_desc = {
};
const struct osmo_stat_item_desc bts_stat_desc[] = {
+ [BTS_STAT_UPTIME_SECONDS] = \
+ { "uptime:seconds",
+ "Seconds of uptime",
+ "s", 60, 0 },
[BTS_STAT_CHAN_LOAD_AVERAGE] = \
{ "chanloadavg",
"Channel load average",