./ct_report/coverage/mongoose_instrument_probe.COVER.html

1 -module(mongoose_instrument_probe).
2
3 -export([start_probe_timer/3, call/3]).
4
5 -callback probe(mongoose_instrument:event_name(), mongoose_instrument:labels()) ->
6 mongoose_instrument:measurements().
7
8 -ignore_xref([call/4]).
9
10 -spec start_probe_timer(mongoose_instrument:event_name(),
11 mongoose_instrument:labels(),
12 mongoose_instrument:probe_config()) -> timer:tref().
13 start_probe_timer(EventName, Labels, #{module := Module} = ProbeConfig) ->
14
:-(
Interval = timer:seconds(get_probe_interval(ProbeConfig)),
15 %% TODO: when dropping support for OTP25, consider changing this to apply_repeatedly
16
:-(
{ok, TRef} = timer:apply_interval(Interval, ?MODULE, call, [Module, EventName, Labels]),
17
:-(
TRef.
18
19 call(ProbeMod, EventName, Labels) ->
20
:-(
case safely:apply_and_log(ProbeMod, probe, [EventName, Labels],
21 #{what => probe_failed, probe_mod => ProbeMod,
22 event_name => EventName, labels => Labels}) of
23 {exception, _} ->
24
:-(
ok; % Already logged
25 Measurements = #{} ->
26
:-(
mongoose_instrument:execute(EventName, Labels, Measurements)
27 end.
28
29 -spec get_probe_interval(mongoose_instrument:probe_config()) -> pos_integer().
30 get_probe_interval(#{interval := Interval}) when is_integer(Interval), Interval > 0 ->
31
:-(
Interval;
32 get_probe_interval(#{}) ->
33
:-(
mongoose_config:get_opt([instrumentation, probe_interval]).
Line Hits Source