<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/25463">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">stat_item: add osmo_stat_item_get()<br><br>So far we often invoke a cascade of functions, one retrieving the group,<br>the other the stat item within that group. To relieve that pain, provide<br>a single function taking group name, index and stat name args.<br><br>Since this is supposedly the canonical normal way of getting a handle on<br>a stat item, and since most other useful names are already taken with<br>more obscure functions, call this simply osmo_stat_item_get().<br><br>Similarly add osmo_stat_item_get_using_idxname(), which uses a group's<br>object name (index-name) instead of the group index number. Again,<br>better naming is obstructed by already existing names in the API.<br><br>Related: SYS#5542<br>Change-Id: I58886ae8af6b1f770088410f63d27ac21bf979fb<br>---<br>M include/osmocom/core/stat_item.h<br>M src/stat_item.c<br>M tests/stats/stats_test.c<br>3 files changed, 44 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/63/25463/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/stat_item.h b/include/osmocom/core/stat_item.h</span><br><span>index 402a7ae..c4e8332 100644</span><br><span>--- a/include/osmocom/core/stat_item.h</span><br><span>+++ b/include/osmocom/core/stat_item.h</span><br><span>@@ -93,6 +93,10 @@</span><br><span> void osmo_stat_item_dec(struct osmo_stat_item *item, int32_t value);</span><br><span> void osmo_stat_item_set(struct osmo_stat_item *item, int32_t value);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_stat_item *osmo_stat_item_get(const char *group_name, const unsigned int group_idx, const char *item_name);</span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_stat_item *osmo_stat_item_get_using_idxname(const char *group_name, const char *group_idx_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    const char *item_name);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int osmo_stat_item_init(void *tall_ctx);</span><br><span> </span><br><span> struct osmo_stat_item_group *osmo_stat_item_get_group_by_name_idx(</span><br><span>diff --git a/src/stat_item.c b/src/stat_item.c</span><br><span>index 1788746..aca8ba6 100644</span><br><span>--- a/src/stat_item.c</span><br><span>+++ b/src/stat_item.c</span><br><span>@@ -231,6 +231,38 @@</span><br><span>      item->values[item->last_offs].id    = id;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Retrieve a stat item struct.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Shorthand for osmo_stat_item_get_by_name(osmo_stat_item_get_group_by_name_idx(group_name, group_idx), item_name),</span><br><span style="color: hsl(120, 100%, 40%);">+ * and returns a mutable (non-const) pointer.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param group_name  Name of the stat group.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param group_idx  Group index, i.e. pick a specific instance of a stat group.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param item_name  Name of the stat item within the group.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return stat item pointer, or NULL if not found.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_stat_item *osmo_stat_item_get(const char *group_name, const unsigned int group_idx, const char *item_name)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   return (struct osmo_stat_item*)osmo_stat_item_get_by_name(</span><br><span style="color: hsl(120, 100%, 40%);">+                                    osmo_stat_item_get_group_by_name_idx(group_name, group_idx),</span><br><span style="color: hsl(120, 100%, 40%);">+                                  item_name);</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%);">+/*! Retrieve a stat item struct.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Shorthand for</span><br><span style="color: hsl(120, 100%, 40%);">+ * osmo_stat_item_get_by_name(osmo_stat_item_get_group_by_name_idxname(group_name, group_idx_name), item_name),</span><br><span style="color: hsl(120, 100%, 40%);">+ * and returns a mutable (non-const) pointer.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param group_name  Name of the stat group.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param group_idx_name  Group index identified by name, i.e. pick a specific instance of a stat group.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param item_name  Name of the stat item within the group.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return stat item pointer, or NULL if not found.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_stat_item *osmo_stat_item_get_using_idxname(const char *group_name, const char *group_idx_name,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    const char *item_name)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     return (struct osmo_stat_item*)osmo_stat_item_get_by_name(</span><br><span style="color: hsl(120, 100%, 40%);">+                                    osmo_stat_item_get_group_by_name_idxname(group_name, group_idx_name),</span><br><span style="color: hsl(120, 100%, 40%);">+                                 item_name);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Retrieve the next value from the osmo_stat_item object.</span><br><span>  * If a new value has been set, it is returned. The next_id is used to decide</span><br><span>  * which value to return.</span><br><span>diff --git a/tests/stats/stats_test.c b/tests/stats/stats_test.c</span><br><span>index 9489e60..ccb3f91 100644</span><br><span>--- a/tests/stats/stats_test.c</span><br><span>+++ b/tests/stats/stats_test.c</span><br><span>@@ -96,6 +96,8 @@</span><br><span> </span><br><span>   OSMO_ASSERT(statg != NULL);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_stat_item_group_set_name(statg, "name-for-idx-0");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  sgrp2 = osmo_stat_item_get_group_by_name_idx("test.one", 0);</span><br><span>       OSMO_ASSERT(sgrp2 == statg);</span><br><span> </span><br><span>@@ -112,11 +114,17 @@</span><br><span>     OSMO_ASSERT(sitem1 != NULL);</span><br><span>         OSMO_ASSERT(sitem1 == osmo_stat_item_group_get_item(statg, TEST_A_ITEM));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(osmo_stat_item_get("test.one", 0, "item.a") == sitem1);</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(osmo_stat_item_get_using_idxname("test.one", "name-for-idx-0", "item.a") == sitem1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     sitem2 = osmo_stat_item_get_by_name(statg, "item.b");</span><br><span>      OSMO_ASSERT(sitem2 != NULL);</span><br><span>         OSMO_ASSERT(sitem2 != sitem1);</span><br><span>       OSMO_ASSERT(sitem2 == osmo_stat_item_group_get_item(statg, TEST_B_ITEM));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(osmo_stat_item_get("test.one", 0, "item.b") == sitem2);</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(osmo_stat_item_get_using_idxname("test.one", "name-for-idx-0", "item.b") == sitem2);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     value = osmo_stat_item_get_last(osmo_stat_item_group_get_item(statg, TEST_A_ITEM));</span><br><span>  OSMO_ASSERT(value == -1);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/25463">change 25463</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/libosmocore/+/25463"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I58886ae8af6b1f770088410f63d27ac21bf979fb </div>
<div style="display:none"> Gerrit-Change-Number: 25463 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>