<p>ipse <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/18091">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">stats: Report per channel type load to statsd counters.<br><br>Change-Id: I2eac4c93061204aeb8f3d223f7e78158c61c7156<br>---<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/chan_alloc.c<br>M src/osmo-bsc/gsm_data.c<br>3 files changed, 82 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index 3fd466c..ecc1f0a 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -1453,6 +1453,22 @@</span><br><span> </span><br><span> enum {</span><br><span>       BTS_STAT_CHAN_LOAD_AVERAGE,</span><br><span style="color: hsl(120, 100%, 40%);">+   BTS_STAT_CHAN_CCCH_SDCCH4_USED,</span><br><span style="color: hsl(120, 100%, 40%);">+       BTS_STAT_CHAN_CCCH_SDCCH4_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+      BTS_STAT_CHAN_TCH_F_USED,</span><br><span style="color: hsl(120, 100%, 40%);">+     BTS_STAT_CHAN_TCH_F_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+    BTS_STAT_CHAN_TCH_H_USED,</span><br><span style="color: hsl(120, 100%, 40%);">+     BTS_STAT_CHAN_TCH_H_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+    BTS_STAT_CHAN_SDCCH8_USED,</span><br><span style="color: hsl(120, 100%, 40%);">+    BTS_STAT_CHAN_SDCCH8_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+   BTS_STAT_CHAN_TCH_F_PDCH_USED,</span><br><span style="color: hsl(120, 100%, 40%);">+        BTS_STAT_CHAN_TCH_F_PDCH_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+       BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_USED,</span><br><span style="color: hsl(120, 100%, 40%);">+  BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+ BTS_STAT_CHAN_SDCCH8_CBCH_USED,</span><br><span style="color: hsl(120, 100%, 40%);">+       BTS_STAT_CHAN_SDCCH8_CBCH_TOTAL,</span><br><span style="color: hsl(120, 100%, 40%);">+      BTS_STAT_CHAN_TCH_F_TCH_H_PDCH_USED,</span><br><span style="color: hsl(120, 100%, 40%);">+  BTS_STAT_CHAN_TCH_F_TCH_H_PDCH_TOTAL,</span><br><span>        BTS_STAT_T3122,</span><br><span>      BTS_STAT_RACH_BUSY,</span><br><span>  BTS_STAT_RACH_ACCESS,</span><br><span>diff --git a/src/osmo-bsc/chan_alloc.c b/src/osmo-bsc/chan_alloc.c</span><br><span>index ac246e0..b2fbac8 100644</span><br><span>--- a/src/osmo-bsc/chan_alloc.c</span><br><span>+++ b/src/osmo-bsc/chan_alloc.c</span><br><span>@@ -109,6 +109,53 @@</span><br><span>                bts_chan_load(pl, bts);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void chan_load_stat_set(enum gsm_phys_chan_config pchan,</span><br><span style="color: hsl(120, 100%, 40%);">+                               struct gsm_bts *bts,</span><br><span style="color: hsl(120, 100%, 40%);">+                               struct load_counter *lc)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    switch (pchan) {</span><br><span style="color: hsl(120, 100%, 40%);">+      case GSM_PCHAN_NONE:</span><br><span style="color: hsl(120, 100%, 40%);">+  case GSM_PCHAN_CCCH:</span><br><span style="color: hsl(120, 100%, 40%);">+  case GSM_PCHAN_PDCH:</span><br><span style="color: hsl(120, 100%, 40%);">+  case GSM_PCHAN_UNKNOWN:</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM_PCHAN_CCCH_SDCCH4:</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_CCCH_SDCCH4_USED], lc->used);</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_CCCH_SDCCH4_TOTAL], lc->total);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM_PCHAN_TCH_F:</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_TCH_F_USED], lc->used);</span><br><span style="color: hsl(120, 100%, 40%);">+               osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_TCH_F_TOTAL], lc->total);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM_PCHAN_TCH_H:</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_TCH_H_USED], lc->used);</span><br><span style="color: hsl(120, 100%, 40%);">+               osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_TCH_H_TOTAL], lc->total);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM_PCHAN_SDCCH8_SACCH8C:</span><br><span style="color: hsl(120, 100%, 40%);">+                osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_SDCCH8_USED], lc->used);</span><br><span style="color: hsl(120, 100%, 40%);">+              osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_SDCCH8_TOTAL], lc->total);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM_PCHAN_TCH_F_PDCH:</span><br><span style="color: hsl(120, 100%, 40%);">+            osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_TCH_F_PDCH_USED], lc->used);</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_TCH_F_PDCH_TOTAL], lc->total);</span><br><span style="color: hsl(120, 100%, 40%);">+                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM_PCHAN_CCCH_SDCCH4_CBCH:</span><br><span style="color: hsl(120, 100%, 40%);">+              osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_USED], lc->used);</span><br><span style="color: hsl(120, 100%, 40%);">+            osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_CCCH_SDCCH4_CBCH_TOTAL], lc->total);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM_PCHAN_SDCCH8_SACCH8C_CBCH:</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_SDCCH8_CBCH_USED], lc->used);</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_SDCCH8_CBCH_TOTAL], lc->total);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM_PCHAN_TCH_F_TCH_H_PDCH:</span><br><span style="color: hsl(120, 100%, 40%);">+              osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_TCH_F_TCH_H_PDCH_USED], lc->used);</span><br><span style="color: hsl(120, 100%, 40%);">+            osmo_stat_item_set(bts->bts_statg->items[BTS_STAT_CHAN_TCH_F_TCH_H_PDCH_TOTAL], lc->total);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              LOG_BTS(bts, DRLL, LOGL_NOTICE, "Unknown channel type %d\n", pchan);</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Update T3122 wait indicator based on samples of BTS channel load. */</span><br><span> void</span><br><span> bts_update_t3122_chan_load(struct gsm_bts *bts)</span><br><span>@@ -133,6 +180,9 @@</span><br><span>   for (i = 0; i < ARRAY_SIZE(pl.pchan); i++) {</span><br><span>              struct load_counter *lc = &pl.pchan[i];</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+               /* Export channel load to stats gauges */</span><br><span style="color: hsl(120, 100%, 40%);">+             chan_load_stat_set(i, bts, lc);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>            /* Ignore samples too large for fixed-point calculations (shouldn't happen). */</span><br><span>          if (lc->used > UINT16_MAX || lc->total > UINT16_MAX) {</span><br><span>                   LOG_BTS(bts, DRLL, LOGL_NOTICE, "numbers in channel load sample "</span><br><span>diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c</span><br><span>index fe421a4..8852efa 100644</span><br><span>--- a/src/osmo-bsc/gsm_data.c</span><br><span>+++ b/src/osmo-bsc/gsm_data.c</span><br><span>@@ -371,6 +371,22 @@</span><br><span> </span><br><span> static const struct osmo_stat_item_desc bts_stat_desc[] = {</span><br><span>       { "chanloadavg", "Channel load average.", "%", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ { "chan_ccch_sdcch4:used", "Number of CCCH+SDCCH4 channels used", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "chan_ccch_sdcch4:total", "Number of CCCH+SDCCH4 channels total", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { "chan_tch_f:used", "Number of TCH/F channels used", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { "chan_tch_f:total", "Number of TCH/F channels total", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "chan_tch_h:used", "Number of TCH/H channels used", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { "chan_tch_h:total", "Number of TCH/H channels total", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "chan_sdcch8:used", "Number of SDCCH8 channels used", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "chan_sdcch8:total", "Number of SDCCH8 channels total", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "chan_tch_f_pdch:used", "Number of TCH/F_PDCH channels used", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { "chan_tch_f_pdch:total", "Number of TCH/F_PDCH channels total", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "chan_ccch_sdcch4_cbch:used", "Number of CCCH+SDCCH4+CBCH channels used", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { "chan_ccch_sdcch4_cbch:total", "Number of CCCH+SDCCH4+CBCH channels total", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+      { "chan_sdcch8_cbch:used", "Number of SDCCH8+CBCH channels used", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { "chan_sdcch8_cbch:total", "Number of SDCCH8+CBCH channels total", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { "chan_tch_f_tch_h_pdch:used", "Number of TCH/F_TCH/H_PDCH channels used", "", 16, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+        { "chan_tch_f_tch_h_pdch:total", "Number of TCH/F_TCH/H_PDCH channels total", "", 16, 0 },</span><br><span>     { "T3122", "T3122 IMMEDIATE ASSIGNMENT REJECT wait indicator.", "s", 16, GSM_T3122_DEFAULT },</span><br><span>  { "rach_busy", "RACH slots with signal above threshold", "%", 16, 0 },</span><br><span>         { "rach_access", "RACH slots with access bursts in them", "%", 16, 0 },</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/18091">change 18091</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bsc/+/18091"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I2eac4c93061204aeb8f3d223f7e78158c61c7156 </div>
<div style="display:none"> Gerrit-Change-Number: 18091 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: ipse <Alexander.Chemeris@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: ipse <Alexander.Chemeris@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>