diff --git a/doc/exometer_report.md b/doc/exometer_report.md index 5ca65c1..e3fbafd 100644 --- a/doc/exometer_report.md +++ b/doc/exometer_report.md @@ -342,7 +342,7 @@ time_ms() = pos_integer() ## Function Index ## -
add_reporter/2 | Add a reporter. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
call_reporter/2 | Send a custom (synchronous) call to Reporter . | ||||||||||||||||||||||||||||||||||||||||||||||||||||
cast_reporter/2 | Send a custom (asynchronous) cast to Reporter . | ||||||||||||||||||||||||||||||||||||||||||||||||||||
delete_interval/2 | Delete a named interval. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
disable_me/2 | Used by a reporter to disable itself. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
disable_reporter/1 | Disable Reporter . | ||||||||||||||||||||||||||||||||||||||||||||||||||||
enable_reporter/1 | Enable Reporter . | ||||||||||||||||||||||||||||||||||||||||||||||||||||
list_metrics/0 | Equivalent to list_metrics([]). | ||||||||||||||||||||||||||||||||||||||||||||||||||||
list_metrics/1 | List all metrics matching Path , together with subscription status. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
list_reporters/0 | List the name and pid of each known reporter. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
list_subscriptions/1 | List all subscriptions for Reporter . | ||||||||||||||||||||||||||||||||||||||||||||||||||||
new_entry/1 | Called by exometer whenever a new entry is created. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
remove_reporter/1 | Remove reporter and all its subscriptions. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
remove_reporter/2 | Remove Reporter (non-blocking call). | ||||||||||||||||||||||||||||||||||||||||||||||||||||
restart_intervals/1 | Restart all named intervals, respecting specified delays. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
set_interval/3 | Specify a named interval. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
setopts/3 | Called by exometer when options of a metric entry are changed. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
start_link/0 | Starts the server
+
++ +List the named intervals for `Reporter`. ### list_metrics/0 ### diff --git a/src/exometer_report.erl b/src/exometer_report.erl index a4fb07e..c6d6f69 100644 --- a/src/exometer_report.erl +++ b/src/exometer_report.erl @@ -160,6 +160,7 @@ set_interval/3, delete_interval/2, restart_intervals/1, + get_intervals/1, remove_reporter/1, remove_reporter/2, terminate_reporter/1, enable_reporter/1, @@ -458,6 +459,14 @@ delete_interval(Reporter, Name) -> restart_intervals(Reporter) -> call({restart_intervals, Reporter}). +-spec get_intervals(reporter_name()) -> + [{atom(), [{time, pos_integer()} + | {delay, pos_integer()} + | {timer_ref, reference()}]}]. +%% @doc List the named intervals for `Reporter'. +get_intervals(Reporter) -> + call({get_intervals, Reporter}). + -spec enable_reporter(reporter_name()) -> ok | {error, any()}. %% @doc Enable `Reporter'. @@ -628,14 +637,15 @@ make_reporter_recs([{R, Opts}|T]) -> module = get_module(R, Opts), status = proplists:get_value(status, Opts, enabled), opts = Opts, - intervals = get_intervals(Opts)}|make_reporter_recs(T)]; + intervals = get_interval_opts(Opts)}|make_reporter_recs(T)]; make_reporter_recs([]) -> []. get_module(R, Opts) -> proplists:get_value(module, Opts, R). -get_intervals(Opts) -> +-spec get_interval_opts([named_interval() | any()]) -> [#interval{}]. +get_interval_opts(Opts) -> case lists:keyfind(intervals, 1, Opts) of false -> []; {_, Is} -> @@ -878,6 +888,20 @@ handle_call({restart_intervals, Reporter}, _, #st{} = St) -> [] -> {reply, {error, not_found}, St} end; +handle_call({get_intervals, Reporter}, _, #st{} = St) -> + case ets:lookup(?EXOMETER_REPORTERS, Reporter) of + [#reporter{intervals = Ints}] -> + Info = + [{Name, [{time, T}, + {delay, D}, + {timer_ref, TR}]} || #interval{name = Name, + time = T, + delay = D, + t_ref = TR} <- Ints], + {reply, Info, St}; + [] -> + {reply, {error, not_found}, St} + end; handle_call({setopts, Metric, Options, Status}, _, #st{}=St) -> [erlang:send(Pid, {exometer_setopts, Metric, Options, Status}) || Pid <- reporter_pids()], |