pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/40633?usp=email )
Change subject: ran_peer: Introduce stats msc.ran_peers.{total,active} ......................................................................
ran_peer: Introduce stats msc.ran_peers.{total,active}
Change-Id: I36e40510c9a95f0c9cf5f32d2a7baab840aa8660 --- M include/osmocom/msc/gsm_data.h M src/libmsc/ran_peer.c 2 files changed, 34 insertions(+), 2 deletions(-)
Approvals: osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h index 119f093..36149e1 100644 --- a/include/osmocom/msc/gsm_data.h +++ b/include/osmocom/msc/gsm_data.h @@ -109,6 +109,8 @@ enum { MSC_STAT_ACTIVE_CALLS, MSC_STAT_ACTIVE_NC_SS, + MSC_STAT_RAN_PEERS_TOTAL, + MSC_STAT_RAN_PEERS_ACTIVE, };
static const struct rate_ctr_group_desc msc_ctrg_desc = { @@ -120,8 +122,10 @@ };
static const struct osmo_stat_item_desc msc_stat_item_description[] = { - [MSC_STAT_ACTIVE_CALLS] = { "msc.active_calls", "Currently active calls " , OSMO_STAT_ITEM_NO_UNIT, 4, 0}, - [MSC_STAT_ACTIVE_NC_SS] = { "msc.active_nc_ss", "Currently active SS/USSD sessions", OSMO_STAT_ITEM_NO_UNIT, 4, 0}, + [MSC_STAT_ACTIVE_CALLS] = { "msc.active_calls", "Currently active calls ", OSMO_STAT_ITEM_NO_UNIT, 4, 0}, + [MSC_STAT_ACTIVE_NC_SS] = { "msc.active_nc_ss", "Currently active SS/USSD sessions", OSMO_STAT_ITEM_NO_UNIT, 4, 0}, + [MSC_STAT_RAN_PEERS_TOTAL] = { "msc.ran_peers.total", "Total RAN peers (BSC, RNC) seen since startup", OSMO_STAT_ITEM_NO_UNIT, 4, 0}, + [MSC_STAT_RAN_PEERS_ACTIVE] = { "msc.ran_peers.active", "Currently active RAN peers (BSSAP/RANAP ready)", OSMO_STAT_ITEM_NO_UNIT, 4, 0}, };
static const struct osmo_stat_item_group_desc msc_statg_desc = { diff --git a/src/libmsc/ran_peer.c b/src/libmsc/ran_peer.c index 26cd7cd..1e9b4b6 100644 --- a/src/libmsc/ran_peer.c +++ b/src/libmsc/ran_peer.c @@ -23,6 +23,7 @@ #include <osmocom/core/linuxlist.h> #include <osmocom/core/logging.h> #include <osmocom/core/fsm.h> +#include <osmocom/core/stat_item.h> #include <osmocom/sigtran/sccp_helpers.h>
#include <osmocom/msc/ran_peer.h> @@ -45,6 +46,7 @@ /* Allocate a RAN peer with FSM instance. To deallocate, call osmo_fsm_inst_term(ran_peer->fi). */ static struct ran_peer *ran_peer_alloc(struct sccp_ran_inst *sri, const struct osmo_sccp_addr *peer_addr) { + struct gsm_network *net = sri->user_data; struct ran_peer *rp; struct osmo_fsm_inst *fi; char *sccp_addr; @@ -75,6 +77,7 @@ fi->priv = rp;
llist_add(&rp->entry, &sri->ran_peers); + osmo_stat_item_inc(osmo_stat_item_group_get_item(net->statg, MSC_STAT_RAN_PEERS_TOTAL), 1);
return rp; } @@ -392,6 +395,14 @@ return msc_i->ran_conn; }
+static void ran_peer_st_ready_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state) +{ + struct ran_peer *rp = fi->priv; + struct gsm_network *net = rp->sri->user_data; + if (prev_state != RAN_PEER_ST_READY) + osmo_stat_item_inc(osmo_stat_item_group_get_item(net->statg, MSC_STAT_RAN_PEERS_ACTIVE), 1); +} + static void ran_peer_st_ready(struct osmo_fsm_inst *fi, uint32_t event, void *data) { struct ran_peer *rp = fi->priv; @@ -489,6 +500,14 @@ } }
+static void ran_peer_st_ready_onleave(struct osmo_fsm_inst *fi, uint32_t next_state) +{ + struct ran_peer *rp = fi->priv; + struct gsm_network *net = rp->sri->user_data; + if (next_state != RAN_PEER_ST_READY) + osmo_stat_item_dec(osmo_stat_item_group_get_item(net->statg, MSC_STAT_RAN_PEERS_ACTIVE), 1); +} + static int ran_peer_fsm_timer_cb(struct osmo_fsm_inst *fi) { struct ran_peer *rp = fi->priv; @@ -499,7 +518,14 @@ static void ran_peer_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause) { struct ran_peer *rp = fi->priv; + struct gsm_network *net = rp->sri->user_data; + ran_peer_discard_all_conns(rp); + + if (rp->fi->state == RAN_PEER_ST_READY) + osmo_stat_item_dec(osmo_stat_item_group_get_item(net->statg, MSC_STAT_RAN_PEERS_ACTIVE), 1); + osmo_stat_item_dec(osmo_stat_item_group_get_item(net->statg, MSC_STAT_RAN_PEERS_TOTAL), 1); + llist_del(&rp->entry); }
@@ -558,6 +584,8 @@ [RAN_PEER_ST_READY] = { .name = "READY", .action = ran_peer_st_ready, + .onenter = ran_peer_st_ready_onenter, + .onleave = ran_peer_st_ready_onleave, .in_event_mask = 0 | S(RAN_PEER_EV_RX_RESET) | S(RAN_PEER_EV_MSG_UP_CO_INITIAL)