pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-msc/+/40633?usp=email )
Change subject: ran_peer: Introuce stats msc.ran_peers.{total,active} ......................................................................
ran_peer: Introuce 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, 33 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/33/40633/1
diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h index 119f093..03fba55 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)", 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 d87a279..222a014 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 ran_peer_free(). */ 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; char *sccp_addr; char *pos; @@ -72,17 +74,24 @@ osmo_fsm_inst_update_id_f(rp->fi, "%s:%s", osmo_rat_type_name(sri->ran->type), sccp_addr);
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; }
void ran_peer_free(struct ran_peer *rp) { + struct gsm_network *net; if (!rp) return;
ran_peer_discard_all_conns(rp);
+ net = rp->sri->user_data; + 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); + osmo_fsm_inst_free(rp->fi); rp->fi = NULL; llist_del(&rp->entry); @@ -376,6 +385,14 @@ return msc_i->ran_conn; }
+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); +} + void ran_peer_st_ready(struct osmo_fsm_inst *fi, uint32_t event, void *data) { struct ran_peer *rp = fi->priv; @@ -464,6 +481,14 @@ } }
+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; @@ -524,6 +549,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)