fixeria has submitted this change. (
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/38297?usp=email )
(
2 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
)Change subject: s1gw_metrics: more precise type hints
......................................................................
s1gw_metrics: more precise type hints
This enables dialyzer to detect errors when:
* ctr_* API is used on an ?S1GW_GAUGE_* definition, and
* gauge_* API is used on an ?S1GW_CTR_* definition.
One of such errors has been fixed in a previous commit.
Change-Id: I36eaa5e04037e165e43eb960c541f967c394a2ea
---
M src/s1gw_metrics.erl
1 file changed, 16 insertions(+), 13 deletions(-)
Approvals:
Jenkins Builder: Verified
pespin: Looks good to me, approved
diff --git a/src/s1gw_metrics.erl b/src/s1gw_metrics.erl
index 6b078e5..ee14d08 100644
--- a/src/s1gw_metrics.erl
+++ b/src/s1gw_metrics.erl
@@ -82,31 +82,34 @@
?S1GW_GAUGE_S1AP_PROXY_UPLINK_PACKETS_QUEUED
]).
--spec new_ctr(list()) -> ok.
+-type counter() :: [ctr | _].
+-type gauge() :: [gauge | _].
+
+-spec new_ctr(counter()) -> ok.
new_ctr(Name) ->
%%?LOG_INFO("New counter ~p", [Name]),
ok = exometer:new(Name, counter).
--spec new_ctrs(list()) -> ok.
+-spec new_ctrs(list(counter())) -> ok.
new_ctrs([]) ->
ok;
new_ctrs([Name | MoreNames]) ->
new_ctr(Name),
new_ctrs(MoreNames).
--spec new_gauge(list()) -> ok.
+-spec new_gauge(gauge()) -> ok.
new_gauge(Name) ->
%%?LOG_INFO("New gauge ~p", [Name]),
ok = exometer:new(Name, gauge).
--spec new_gauges(list()) -> ok.
+-spec new_gauges(list(gauge())) -> ok.
new_gauges([]) ->
ok;
new_gauges([Name | MoreNames]) ->
new_gauge(Name),
new_gauges(MoreNames).
--spec get_current_value(list()) -> integer().
+-spec get_current_value(counter() | gauge()) -> integer().
get_current_value(Name) ->
Result = exometer:get_value(Name, value),
{ok, [{value, PrevVal}]} = Result,
@@ -124,43 +127,43 @@
%%%%%%%%%%%%%
%% CTR APIs
%%%%%%%%%%%%%
--spec ctr_reset(list()) -> ok | {error, any()}.
+-spec ctr_reset(counter()) -> ok | {error, any()}.
ctr_reset(Name) ->
?LOG_DEBUG("ctr_reset(~p)", [Name]),
exometer:reset(Name).
--spec ctr_inc(list(), integer()) -> ok | {error, any()}.
+-spec ctr_inc(counter(), integer()) -> ok | {error, any()}.
ctr_inc(Name, Value) ->
?LOG_DEBUG("ctr_inc(~p, ~p)", [Name, Value]),
exometer:update(Name, Value).
--spec ctr_inc(list()) -> ok | {error, any()}.
+-spec ctr_inc(counter()) -> ok | {error, any()}.
ctr_inc(Name) ->
ctr_inc(Name, 1).
%%%%%%%%%%%%%
%% GAUGE APIs
%%%%%%%%%%%%%
--spec gauge_reset(list()) -> ok | {error, any()}.
+-spec gauge_reset(gauge()) -> ok | {error, any()}.
gauge_reset(Name) ->
?LOG_DEBUG("gauge_reset(~p)", [Name]),
exometer:reset(Name).
--spec gauge_set(list(), integer()) -> ok | {error, any()}.
+-spec gauge_set(gauge(), integer()) -> ok | {error, any()}.
gauge_set(Name, Value) ->
exometer:update(Name, Value).
--spec gauge_inc(list(), integer()) -> ok | {error, any()}.
+-spec gauge_inc(gauge(), integer()) -> ok | {error, any()}.
gauge_inc(Name, Value) ->
PrevVal = get_current_value(Name),
?LOG_DEBUG("gauge_inc(~p, ~p): pre_val=~p", [Name, Value, PrevVal]),
exometer:update(Name, Value + PrevVal).
--spec gauge_inc(list()) -> ok | {error, any()}.
+-spec gauge_inc(gauge()) -> ok | {error, any()}.
gauge_inc(Name) ->
gauge_inc(Name, 1).
--spec gauge_dec(list()) -> ok | {error, any()}.
+-spec gauge_dec(gauge()) -> ok | {error, any()}.
gauge_dec(Name) ->
gauge_inc(Name, -1).
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/38297?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: erlang/osmo-s1gw
Gerrit-Branch: master
Gerrit-Change-Id: I36eaa5e04037e165e43eb960c541f967c394a2ea
Gerrit-Change-Number: 38297
Gerrit-PatchSet: 5
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>