Skip to content

Commit 68cffd2

Browse files
committed
Upgrade OTP versions, supporting now 26/27/28
1 parent d11020e commit 68cffd2

12 files changed

+75
-68
lines changed

.github/workflows/main.yml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ jobs:
1414
name: OTP ${{matrix.otp}}
1515
strategy:
1616
matrix:
17-
otp: ['27', '26', '25']
18-
rebar3: ['3.24.0']
17+
otp: ['28', '27', '26']
18+
rebar3: ['3.24']
1919
runs-on: 'ubuntu-24.04'
2020
env:
2121
OTPVER: ${{ matrix.otp }}
@@ -28,18 +28,17 @@ jobs:
2828
- run: rebar3 compile
2929
- run: rebar3 lint
3030
- run: rebar3 xref
31+
- run: rebar3 dialyzer
3132
- run: rebar3 eunit
3233
- run: rebar3 fmt --check
33-
if: ${{ matrix.otp == '27' }}
34+
if: ${{ matrix.otp == '28' }}
3435
- run: rebar3 ex_doc
35-
if: ${{ matrix.otp == '27' }}
36-
- run: rebar3 dialyzer
37-
if: ${{ matrix.otp == '27' }}
36+
if: ${{ matrix.otp == '28' }}
3837
- run: rebar3 do cover, covertool generate
39-
if: ${{ matrix.otp == '27' }}
38+
if: ${{ matrix.otp == '28' }}
4039
- name: Upload code coverage
4140
uses: codecov/codecov-action@v5
42-
if: ${{ matrix.otp == '27' }}
41+
if: ${{ matrix.otp == '28' }}
4342
with:
4443
files: _build/test/covertool/prometheus.covertool.xml
4544
token: ${{ secrets.CODECOV_TOKEN }}

src/metrics/prometheus_gauge.erl

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,15 @@ set_to_current_time(Registry, Name, LabelValues) ->
334334
set(Registry, Name, LabelValues, os:system_time(seconds)).
335335

336336
?DOC(#{equiv => track_inprogress(default, Name, [], Fun)}).
337-
-spec track_inprogress(prometheus_metric:name(), fun(() -> any())) -> any().
337+
-spec track_inprogress(prometheus_metric:name(), fun(() -> dynamic())) -> dynamic().
338338
track_inprogress(Name, Fun) ->
339339
track_inprogress(default, Name, [], Fun).
340340

341341
?DOC(#{equiv => track_inprogress(default, Name, LabelValues, Fun)}).
342-
-spec track_inprogress(prometheus_metric:name(), prometheus_metric:label_values(), fun(() -> any())) ->
343-
any().
342+
-spec track_inprogress(Name, LabelValues, Fun) -> dynamic() when
343+
Name :: prometheus_metric:name(),
344+
LabelValues :: prometheus_metric:label_values(),
345+
Fun :: fun(() -> dynamic()).
344346
track_inprogress(Name, LabelValues, Fun) ->
345347
track_inprogress(default, Name, LabelValues, Fun).
346348

@@ -354,11 +356,11 @@ Raises:
354356
* `{invalid_metric_arity, Present, Expected}` error if labels count mismatch.
355357
* `{invalid_value, Value, Message}` if `Fun` isn't a function.
356358
""").
357-
-spec track_inprogress(Registry, Name, LabelValues, Fun) -> any() when
359+
-spec track_inprogress(Registry, Name, LabelValues, Fun) -> dynamic() when
358360
Registry :: prometheus_registry:registry(),
359361
Name :: prometheus_metric:name(),
360362
LabelValues :: prometheus_metric:label_values(),
361-
Fun :: fun(() -> any()).
363+
Fun :: fun(() -> dynamic()).
362364
track_inprogress(Registry, Name, LabelValues, Fun) when is_function(Fun, 0) ->
363365
inc(Registry, Name, LabelValues, 1),
364366
try
@@ -370,13 +372,15 @@ track_inprogress(_Registry, _Name, _LabelValues, Fun) ->
370372
erlang:error({invalid_value, Fun, "track_inprogress accepts only functions"}).
371373

372374
?DOC(#{equiv => set_duration(default, Name, [], Fun)}).
373-
-spec set_duration(prometheus_metric:name(), fun(() -> any())) -> any().
375+
-spec set_duration(prometheus_metric:name(), fun(() -> dynamic())) -> dynamic().
374376
set_duration(Name, Fun) ->
375377
set_duration(default, Name, [], Fun).
376378

377379
?DOC(#{equiv => set_duration(default, Name, LabelValues, Fun)}).
378-
-spec set_duration(prometheus_metric:name(), prometheus_metric:label_values(), fun(() -> any())) ->
379-
any().
380+
-spec set_duration(Name, LabelValues, Fun) -> dynamic() when
381+
Name :: prometheus_metric:name(),
382+
LabelValues :: prometheus_metric:label_values(),
383+
Fun :: fun(() -> dynamic()).
380384
set_duration(Name, LabelValues, Fun) ->
381385
set_duration(default, Name, LabelValues, Fun).
382386

@@ -390,11 +394,11 @@ Raises:
390394
* `{invalid_metric_arity, Present, Expected}` error if labels count mismatch.
391395
* `{invalid_value, Value, Message}` if `Fun` isn't a function.
392396
""").
393-
-spec set_duration(Registry, Name, LabelValues, Fun) -> any() when
397+
-spec set_duration(Registry, Name, LabelValues, Fun) -> dynamic() when
394398
Registry :: prometheus_registry:registry(),
395399
Name :: prometheus_metric:name(),
396400
LabelValues :: prometheus_metric:label_values(),
397-
Fun :: fun(() -> any()).
401+
Fun :: fun(() -> dynamic()).
398402
set_duration(Registry, Name, LabelValues, Fun) when is_function(Fun, 0) ->
399403
Start = erlang:monotonic_time(),
400404
try

src/metrics/prometheus_histogram.erl

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -241,25 +241,23 @@ Raises:
241241
Count :: integer().
242242
observe_n(Registry, Name, LabelValues, Value, Count) when is_integer(Value), is_integer(Count) ->
243243
Key = key(Registry, Name, LabelValues),
244-
try ets:lookup_element(?TABLE, Key, ?BOUNDS_POS) of
245-
Buckets ->
244+
case ets:lookup_element(?TABLE, Key, ?BOUNDS_POS, undefined) of
245+
undefined ->
246+
insert_metric(Registry, Name, LabelValues, Value, Count, fun observe_n/5);
247+
Buckets when is_tuple(Buckets) ->
246248
BucketPosition = prometheus_buckets:position(Buckets, Value),
247249
Spec = [{?ISUM_POS, Value * Count}, {?BUCKETS_START + BucketPosition, Count}],
248250
ets:update_counter(?TABLE, Key, Spec)
249-
catch
250-
error:badarg ->
251-
insert_metric(Registry, Name, LabelValues, Value, Count, fun observe_n/5)
252251
end,
253252
ok;
254253
observe_n(Registry, Name, LabelValues, Value, Count) when is_float(Value), is_integer(Count) ->
255254
Key = key(Registry, Name, LabelValues),
256-
try ets:lookup_element(?TABLE, Key, ?BOUNDS_POS) of
257-
Buckets ->
255+
case ets:lookup_element(?TABLE, Key, ?BOUNDS_POS, undefined) of
256+
undefined ->
257+
insert_metric(Registry, Name, LabelValues, Value, Count, fun observe_n/5);
258+
Buckets when is_tuple(Buckets) ->
258259
BucketPosition = prometheus_buckets:position(Buckets, Value),
259260
fobserve_impl(Key, Buckets, BucketPosition, Value, Count)
260-
catch
261-
error:badarg ->
262-
insert_metric(Registry, Name, LabelValues, Value, Count, fun observe_n/5)
263261
end;
264262
observe_n(_Registry, _Name, _LabelValues, Value, Count) when is_number(Value) ->
265263
erlang:error({invalid_count, Count, "observe_n accepts only integer counts"});
@@ -305,13 +303,15 @@ pobserve(_Registry, _Name, _LabelValues, _Buckets, _Pos, Value) ->
305303
erlang:error({invalid_value, Value, "pobserve accepts only numbers"}).
306304

307305
?DOC(#{equiv => observe_duration(default, Name, [], Fun)}).
308-
-spec observe_duration(prometheus_metric:name(), fun(() -> term())) -> term().
306+
-spec observe_duration(prometheus_metric:name(), fun(() -> dynamic())) -> dynamic().
309307
observe_duration(Name, Fun) ->
310308
observe_duration(default, Name, [], Fun).
311309

312310
?DOC(#{equiv => observe_duration(default, Name, LabelValues, Fun)}).
313-
-spec observe_duration(prometheus_metric:name(), prometheus_metric:label_values(), fun(() -> term())) ->
314-
term().
311+
-spec observe_duration(Name, LabelValues, Fun) -> dynamic() when
312+
Name :: prometheus_metric:name(),
313+
LabelValues :: prometheus_metric:label_values(),
314+
Fun :: fun(() -> dynamic()).
315315
observe_duration(Name, LabelValues, Fun) ->
316316
observe_duration(default, Name, LabelValues, Fun).
317317

@@ -323,11 +323,11 @@ Raises:
323323
* `{invalid_metric_arity, Present, Expected}` error if labels count mismatch.
324324
* `{invalid_value, Value, Message}` if `Fun` isn't a function.
325325
""").
326-
-spec observe_duration(Registry, Name, LabelValues, Fun) -> any() when
326+
-spec observe_duration(Registry, Name, LabelValues, Fun) -> dynamic() when
327327
Registry :: prometheus_registry:registry(),
328328
Name :: prometheus_metric:name(),
329329
LabelValues :: prometheus_metric:label_values(),
330-
Fun :: fun(() -> any()).
330+
Fun :: fun(() -> dynamic()).
331331
observe_duration(Registry, Name, LabelValues, Fun) when is_function(Fun, 0) ->
332332
Start = erlang:monotonic_time(),
333333
try

src/metrics/prometheus_quantile_summary.erl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,13 +208,15 @@ observe(_Registry, _Name, _LabelValues, Value) ->
208208
erlang:error({invalid_value, Value, "observe accepts only numbers"}).
209209

210210
?DOC(#{equiv => observe_duration(default, Name, [], Fun)}).
211-
-spec observe_duration(prometheus_metric:name(), fun(() -> term())) -> term().
211+
-spec observe_duration(prometheus_metric:name(), fun(() -> dynamic())) -> dynamic().
212212
observe_duration(Name, Fun) ->
213213
observe_duration(default, Name, [], Fun).
214214

215215
?DOC(#{equiv => observe_duration(default, Name, LabelValues, Fun)}).
216-
-spec observe_duration(prometheus_metric:name(), prometheus_metric:label_values(), fun(() -> term())) ->
217-
term().
216+
-spec observe_duration(Name, LabelValues, Value) -> dynamic() when
217+
Name :: prometheus_metric:name(),
218+
LabelValues :: prometheus_metric:label_values(),
219+
Value :: fun(() -> dynamic()).
218220
observe_duration(Name, LabelValues, Fun) ->
219221
observe_duration(default, Name, LabelValues, Fun).
220222

@@ -226,11 +228,11 @@ Raises:
226228
* `{invalid_metric_arity, Present, Expected}` error if labels count mismatch.
227229
* `{invalid_value, Value, Message}` if `Fun` isn't a function.
228230
""").
229-
-spec observe_duration(Registry, Name, LabelValues, Value) -> T when
231+
-spec observe_duration(Registry, Name, LabelValues, Value) -> dynamic() when
230232
Registry :: prometheus_registry:registry(),
231233
Name :: prometheus_metric:name(),
232234
LabelValues :: prometheus_metric:label_values(),
233-
Value :: fun(() -> T).
235+
Value :: fun(() -> dynamic()).
234236
observe_duration(Registry, Name, LabelValues, Fun) when is_function(Fun) ->
235237
Start = erlang:monotonic_time(),
236238
try

src/metrics/prometheus_summary.erl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -184,13 +184,15 @@ observe(_Registry, _Name, _LabelValues, Value) ->
184184
erlang:error({invalid_value, Value, "observe accepts only numbers"}).
185185

186186
?DOC(#{equiv => observe_duration(default, Name, [], Fun)}).
187-
-spec observe_duration(prometheus_metric:name(), fun(() -> term())) -> term().
187+
-spec observe_duration(prometheus_metric:name(), fun(() -> dynamic())) -> dynamic().
188188
observe_duration(Name, Fun) ->
189189
observe_duration(default, Name, [], Fun).
190190

191191
?DOC(#{equiv => observe_duration(default, Name, LabelValues, Fun)}).
192-
-spec observe_duration(prometheus_metric:name(), prometheus_metric:label_values(), fun(() -> term())) ->
193-
term().
192+
-spec observe_duration(Name, LabelValues, Fun) -> dynamic() when
193+
Name :: prometheus_metric:name(),
194+
LabelValues :: prometheus_metric:label_values(),
195+
Fun :: fun(() -> dynamic()).
194196
observe_duration(Name, LabelValues, Fun) ->
195197
observe_duration(default, Name, LabelValues, Fun).
196198

@@ -202,11 +204,11 @@ Raises:
202204
* `{invalid_metric_arity, Present, Expected}` error if labels count mismatch.
203205
* `{invalid_value, Value, Message}` if `Fun` isn't a function.
204206
""").
205-
-spec observe_duration(Registry, Name, LabelValues, Fun) -> any() when
207+
-spec observe_duration(Registry, Name, LabelValues, Fun) -> dynamic() when
206208
Registry :: prometheus_registry:registry(),
207209
Name :: prometheus_metric:name(),
208210
LabelValues :: prometheus_metric:label_values(),
209-
Fun :: fun(() -> any()).
211+
Fun :: fun(() -> dynamic()).
210212
observe_duration(Registry, Name, LabelValues, Fun) when is_function(Fun) ->
211213
Start = erlang:monotonic_time(),
212214
try

src/prometheus.erl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010
-behaviour(application).
1111

12-
-type label_name() :: term().
13-
-type label_value() :: term().
12+
-type label_name() :: dynamic().
13+
-type label_value() :: dynamic().
1414
-type label() :: {label_name(), label_value()}.
1515
-type pre_rendered_labels() :: binary().
1616
-type labels() :: [label()] | #{label_name() => label_value()} | pre_rendered_labels().
@@ -59,16 +59,16 @@
5959
-export([start/2, stop/1]).
6060
-export([start/0, stop/0]).
6161

62-
-spec start(application:start_type(), term()) -> supervisor:startlink_ret().
62+
-spec start(application:start_type(), dynamic()) -> supervisor:startlink_ret().
6363
start(_StartType, _StartArgs) ->
6464
prometheus_sup:start_link().
6565

66-
-spec stop(term()) -> ok.
66+
-spec stop(dynamic()) -> ok.
6767
stop(_State) ->
6868
ok.
6969

7070
?DOC(false).
71-
-spec start() -> ok | {error, term()}.
71+
-spec start() -> ok | {error, dynamic()}.
7272
start() ->
7373
case application:ensure_all_started(?MODULE) of
7474
{ok, _} ->
@@ -78,6 +78,6 @@ start() ->
7878
end.
7979

8080
?DOC(false).
81-
-spec stop() -> ok | {error, term()}.
81+
-spec stop() -> ok | {error, dynamic()}.
8282
stop() ->
8383
application:stop(?MODULE).

src/prometheus_collector.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,10 @@ create_gauge(Name, Help, Data) ->
9191
-type collector() :: atom().
9292

9393
?DOC("Data associated with a collector").
94-
-type data() :: any().
94+
-type data() :: dynamic().
9595

9696
?DOC("Callback for `collect_mf/3`").
97-
-type collect_mf_callback() :: fun((prometheus_model:'MetricFamily'()) -> any()).
97+
-type collect_mf_callback() :: fun((prometheus_model:'MetricFamily'()) -> dynamic()).
9898

9999
?DOC("Should call `Callback` for each `MetricFamily` of this collector").
100100
-callback collect_mf(Registry, Callback) -> ok when

src/prometheus_metric.erl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ as well as handling metric labels and data.
7575
registry => prometheus_registry:registry(),
7676
constant_labels => [{atom(), term()}],
7777
labels => labels(),
78-
data => any(),
78+
data => term(),
7979
atom() => _
8080
}.
8181

@@ -86,7 +86,7 @@ as well as handling metric labels and data.
8686
-callback declare(Spec :: spec()) -> boolean().
8787

8888
?DOC("Sets the default metric function for the module.").
89-
-callback set_default(Registry, Name) -> any() when
89+
-callback set_default(Registry, Name) -> dynamic() when
9090
Registry :: prometheus_registry:registry(),
9191
Name :: name().
9292

@@ -180,7 +180,7 @@ deregister_mf(Table, Registry, Name) ->
180180
end.
181181

182182
?DOC(false).
183-
-spec check_mf_exists(Table, Registry, Name, LabelValues) -> any() | no_return() when
183+
-spec check_mf_exists(Table, Registry, Name, LabelValues) -> dynamic() | no_return() when
184184
Table :: atom(),
185185
Registry :: prometheus_registry:registry(),
186186
Name :: name(),
@@ -213,28 +213,28 @@ check_mf_exists(Table, Registry, Name) ->
213213
end.
214214

215215
?DOC(false).
216-
-spec mf_labels(tuple()) -> any().
216+
-spec mf_labels(tuple()) -> dynamic().
217217
mf_labels(MF) ->
218218
{Labels, _} = element(2, MF),
219219
Labels.
220220

221221
?DOC(false).
222-
-spec mf_constant_labels(tuple()) -> any().
222+
-spec mf_constant_labels(tuple()) -> dynamic().
223223
mf_constant_labels(MF) ->
224224
element(3, MF).
225225

226226
?DOC(false).
227-
-spec mf_duration_unit(tuple()) -> any().
227+
-spec mf_duration_unit(tuple()) -> dynamic().
228228
mf_duration_unit(MF) ->
229229
element(4, MF).
230230

231231
?DOC(false).
232-
-spec mf_data(tuple()) -> any().
232+
-spec mf_data(tuple()) -> dynamic().
233233
mf_data(MF) ->
234234
element(5, MF).
235235

236236
?DOC(false).
237-
-spec metrics(term(), term()) -> any().
237+
-spec metrics(ets:table(), prometheus_registry:registry()) -> dynamic().
238238
metrics(Table, Registry) ->
239239
ets:match(Table, {{Registry, mf, '$1'}, '$2', '$3', '$4', '$5'}).
240240

src/prometheus_metric_spec.erl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ help(Spec) ->
5555
validate_metric_help(Help).
5656

5757
?DOC(false).
58-
-spec data(Spec :: prometheus_metric:spec()) -> any().
58+
-spec data(Spec :: prometheus_metric:spec()) -> dynamic().
5959
data(Spec) ->
6060
get_value(data, Spec).
6161

@@ -102,7 +102,7 @@ duration_unit_from_spec(Spec) ->
102102
Help :: prometheus_metric:help(),
103103
CallTimeout :: [{atom(), term()}],
104104
DurationUnit :: prometheus_time:maybe_duration_unit(),
105-
Data :: any().
105+
Data :: dynamic().
106106
extract_common_params(Spec) ->
107107
Registry = registry(Spec),
108108
Name = name(Spec),
@@ -115,27 +115,27 @@ extract_common_params(Spec) ->
115115

116116
?DOC(false).
117117
?DOC(#{equiv => get_value(Key, Spec, undefined)}).
118-
-spec add_value(Key :: atom(), Value :: any(), Spec :: prometheus_metric:spec()) -> any().
118+
-spec add_value(Key :: atom(), Value :: dynamic(), Spec :: prometheus_metric:spec()) -> term().
119119
add_value(Key, Value, Spec) when is_list(Spec) ->
120120
[{Key, Value} | Spec];
121121
add_value(Key, Value, Spec) when is_map(Spec) ->
122122
Spec#{Key => Value}.
123123

124124
?DOC(false).
125125
?DOC(#{equiv => get_value(Key, Spec, undefined)}).
126-
-spec get_value(Key :: atom(), Spec :: prometheus_metric:spec()) -> any().
126+
-spec get_value(Key :: atom(), Spec :: prometheus_metric:spec()) -> term().
127127
get_value(Key, Spec) ->
128128
get_value(Key, Spec, undefined).
129129

130130
?DOC(false).
131-
-spec get_value(Key :: atom(), Spec :: prometheus_metric:spec(), Default :: any()) -> any().
131+
-spec get_value(Key :: atom(), Spec :: prometheus_metric:spec(), Default :: dynamic()) -> dynamic().
132132
get_value(Key, Spec, Default) when is_list(Spec) ->
133133
proplists:get_value(Key, Spec, Default);
134134
get_value(Key, Spec, Default) when is_map(Spec) ->
135135
maps:get(Key, Spec, Default).
136136

137137
?DOC(false).
138-
-spec fetch_value(Key :: atom(), Spec :: prometheus_metric:spec()) -> any() | no_return().
138+
-spec fetch_value(Key :: atom(), Spec :: prometheus_metric:spec()) -> dynamic() | no_return().
139139
fetch_value(Key, Spec) when is_list(Spec) ->
140140
case proplists:get_value(Key, Spec) of
141141
undefined ->

0 commit comments

Comments
 (0)