Skip to content

Commit 1388091

Browse files
committed
Merge branch 'master' into summary_sketch
2 parents 46a742a + b89f97b commit 1388091

15 files changed

+102
-78
lines changed

.github/workflows/main.yml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ on:
1111

1212
jobs:
1313
test:
14-
name: OTP ${{matrix.otp}}
14+
name: OTP ${{matrix.otp}} - rebar3 ${{matrix.rebar3}}
1515
strategy:
1616
matrix:
17-
otp: ['27', '26', '25']
18-
rebar3: ['3.24.0']
17+
otp: ['28', '27', '26']
18+
rebar3: ['3.24', '3.25']
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 }}

rebar.config

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
%% -*- mode: erlang -*-
2+
{minimum_otp_vsn, "26"}.
3+
24
{erl_opts, [
35
debug_info,
46
warn_unused_vars,
@@ -13,9 +15,8 @@
1315
warn_obsolete_guard,
1416
strict_validation,
1517
warn_export_vars,
16-
warn_exported_vars,
18+
warn_exported_vars
1719
%warn_missing_spec, warn_untyped_record, <- Added dynamically for OTP >=27 in rebar.config.script
18-
{platform_define, "^(2|3)", recent_otp}
1920
]}.
2021

2122
{deps, [
@@ -120,15 +121,16 @@
120121
filter => "*.erl",
121122
rules => [
122123
{elvis_text_style, line_length, #{limit => 120, skip_comments => false}},
124+
{elvis_style, consistent_generic_type, #{preferred_type => term}},
123125
{elvis_style, invalid_dynamic_call, #{
124126
ignore => [
125127
prometheus_misc,
126128
prometheus_registry,
127129
prometheus_sup
128130
]
129131
}},
130-
{elvis_style, god_modules, #{limit => 54}},
131-
{elvis_style, dont_repeat_yourself, #{min_complexity => 50}},
132+
{elvis_style, god_modules, #{limit => 40}},
133+
{elvis_style, dont_repeat_yourself, #{min_complexity => 15}},
132134
{elvis_style, no_catch_expressions, disable}
133135
],
134136
ruleset => erl_files

src/collectors/vm/prometheus_vm_statistics_collector.erl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,6 @@ metrics() ->
144144
"except that real time is measured.", WallclockTime}
145145
].
146146

147-
-ifdef(recent_otp).
148147
dirty_stat() ->
149148
try
150149
SO = erlang:system_info(schedulers_online),
@@ -156,10 +155,6 @@ dirty_stat() ->
156155
catch
157156
_:_ -> [undefined, undefined]
158157
end.
159-
-else.
160-
dirty_stat() ->
161-
[undefined, undefined].
162-
-endif.
163158

164159
enabled_metrics() ->
165160
application:get_env(prometheus, vm_statistics_collector_metrics, all).

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
@@ -185,13 +185,15 @@ observe(_Registry, _Name, _LabelValues, Value) ->
185185
erlang:error({invalid_value, Value, "observe accepts only numbers"}).
186186

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

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

@@ -203,11 +205,11 @@ Raises:
203205
* `{invalid_metric_arity, Present, Expected}` error if labels count mismatch.
204206
* `{invalid_value, Value, Message}` if `Fun` isn't a function.
205207
""").
206-
-spec observe_duration(Registry, Name, LabelValues, Value) -> T when
208+
-spec observe_duration(Registry, Name, LabelValues, Value) -> dynamic() when
207209
Registry :: prometheus_registry:registry(),
208210
Name :: prometheus_metric:name(),
209211
LabelValues :: prometheus_metric:label_values(),
210-
Value :: fun(() -> T).
212+
Value :: fun(() -> dynamic()).
211213
observe_duration(Registry, Name, LabelValues, Fun) when is_function(Fun) ->
212214
Start = erlang:monotonic_time(),
213215
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

0 commit comments

Comments
 (0)