|
|
@@ -38,7 +38,7 @@
|
|
|
]).
|
|
|
|
|
|
%% Interface
|
|
|
--export([start_link/0]).
|
|
|
+-export([start_link/1]).
|
|
|
|
|
|
%% Internal Exports
|
|
|
-export([
|
|
|
@@ -68,17 +68,18 @@ do_restart() ->
|
|
|
ok = do_start(),
|
|
|
ok.
|
|
|
|
|
|
-start_link() ->
|
|
|
- gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
|
|
+start_link(Conf) ->
|
|
|
+ gen_server:start_link({local, ?MODULE}, ?MODULE, Conf, []).
|
|
|
|
|
|
-init([]) ->
|
|
|
+init(Conf) ->
|
|
|
process_flag(trap_exit, true),
|
|
|
#{
|
|
|
tags := TagsRaw,
|
|
|
server := Server,
|
|
|
sample_time_interval := SampleTimeInterval,
|
|
|
flush_time_interval := FlushTimeInterval
|
|
|
- } = emqx_conf:get([statsd]),
|
|
|
+ } = Conf,
|
|
|
+ FlushTimeInterval1 = flush_interval(FlushTimeInterval, SampleTimeInterval),
|
|
|
{Host, Port} = emqx_schema:parse_server(Server, ?SERVER_PARSE_OPTS),
|
|
|
Tags = maps:fold(fun(K, V, Acc) -> [{to_bin(K), to_bin(V)} | Acc] end, [], TagsRaw),
|
|
|
Opts = [{tags, Tags}, {host, Host}, {port, Port}, {prefix, <<"emqx">>}],
|
|
|
@@ -86,7 +87,7 @@ init([]) ->
|
|
|
{ok,
|
|
|
ensure_timer(#{
|
|
|
sample_time_interval => SampleTimeInterval,
|
|
|
- flush_time_interval => FlushTimeInterval,
|
|
|
+ flush_time_interval => FlushTimeInterval1,
|
|
|
estatsd_pid => Pid
|
|
|
})}.
|
|
|
|
|
|
@@ -129,6 +130,19 @@ terminate(_Reason, #{estatsd_pid := Pid}) ->
|
|
|
%% Internal function
|
|
|
%%------------------------------------------------------------------------------
|
|
|
|
|
|
+flush_interval(FlushInterval, SampleInterval) when FlushInterval >= SampleInterval ->
|
|
|
+ FlushInterval;
|
|
|
+flush_interval(_FlushInterval, SampleInterval) ->
|
|
|
+ ?SLOG(
|
|
|
+ warning,
|
|
|
+ #{
|
|
|
+ msg =>
|
|
|
+ "Configured flush_time_interval is lower than sample_time_interval, "
|
|
|
+ "setting: flush_time_interval = sample_time_interval."
|
|
|
+ }
|
|
|
+ ),
|
|
|
+ SampleInterval.
|
|
|
+
|
|
|
ensure_timer(State = #{sample_time_interval := SampleTimeInterval}) ->
|
|
|
State#{timer => emqx_misc:start_timer(SampleTimeInterval, ?SAMPLE_TIMEOUT)}.
|
|
|
|