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).