stat: Explicitly support stat_items without unit

Add OSMO_STAT_ITEM_NO_UNIT for stat items without an unit. The
statsd reporter uses gauges ("g") to report them.

Sponsored-by: On-Waves ehf
diff --git a/include/osmocom/core/stat_item.h b/include/osmocom/core/stat_item.h
index c1466f8..b3a3d9c 100644
--- a/include/osmocom/core/stat_item.h
+++ b/include/osmocom/core/stat_item.h
@@ -13,6 +13,7 @@
 struct osmo_stat_item_desc;
 
 #define STAT_ITEM_NOVALUE_ID 0
+#define OSMO_STAT_ITEM_NO_UNIT NULL
 
 struct osmo_stat_item_value {
 	int32_t id;
diff --git a/src/stats_statsd.c b/src/stats_statsd.c
index c76f8f6..b93d90a 100644
--- a/src/stats_statsd.c
+++ b/src/stats_statsd.c
@@ -151,8 +151,18 @@
 	const struct osmo_stat_item_group *statg,
 	const struct osmo_stat_item_desc *desc, int value)
 {
+	char *unit = desc->unit;
+
+	if (unit == OSMO_STAT_ITEM_NO_UNIT) {
+		unit = "g";
+		if (value < 0)
+			osmo_stats_reporter_statsd_send(srep,
+				statg->desc->group_name_prefix,
+				statg->idx,
+				desc->name, 0, unit);
+	}
 	return osmo_stats_reporter_statsd_send(srep,
 		statg->desc->group_name_prefix,
 		statg->idx,
-		desc->name, value, desc->unit);
+		desc->name, value, unit);
 }
diff --git a/src/vty/utils.c b/src/vty/utils.c
index b15c8d8..3a0f138 100644
--- a/src/vty/utils.c
+++ b/src/vty/utils.c
@@ -87,11 +87,14 @@
 {
 	struct vty_out_context *vctx = vctx_;
 	struct vty *vty = vctx->vty;
+	const char *unit =
+		item->desc->unit != OSMO_STAT_ITEM_NO_UNIT ?
+		item->desc->unit : "";
 
 	vty_out(vty, " %s%s: %8" PRIi32 " %s%s",
 		vctx->prefix, item->desc->description,
 		osmo_stat_item_get_last(item),
-		item->desc->unit, VTY_NEWLINE);
+		unit, VTY_NEWLINE);
 
 	return 0;
 }