diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/http_auth.erl | 3 | ||||
-rw-r--r-- | src/statusreport.erl | 41 |
2 files changed, 36 insertions, 8 deletions
diff --git a/src/http_auth.erl b/src/http_auth.erl index e083a2c..c8a8389 100644 --- a/src/http_auth.erl +++ b/src/http_auth.erl @@ -25,9 +25,8 @@ read_key_table() -> none end. - own_name() -> - {_Key, KeyName} = own_key(), + {ok, {KeyName, _}} = application:get_env(plop, own_key), KeyName. own_key() -> diff --git a/src/statusreport.erl b/src/statusreport.erl index 63414cd..f0b7503 100644 --- a/src/statusreport.erl +++ b/src/statusreport.erl @@ -24,7 +24,8 @@ init([]) -> process_flag(trap_exit, true), ReportInterval = application:get_env(plop, status_report_interval, 1000), lager:info("~p: starting", [?MODULE]), - %Timer = erlang:start_timer(1000, self(), dist), + HeartbeatInterval = application:get_env(plop, heartbeat_interval, 1000), + erlang:start_timer(HeartbeatInterval, self(), heartbeat), {ok, #state{timer = none, nodename = http_auth:own_name(), statusreports = dict:new(), @@ -49,6 +50,20 @@ store_multi_status(State, Service, Target, Variable, Status) -> State#state.statusreports), State#state{statusreports = Statusreports}. +store_set_status(State, Service, Target, Variable, Statuses) -> + Statusreports = dict:store({Service, Target, Variable}, + {multi, Statuses}, + State#state.statusreports), + State#state{statusreports = Statusreports}. + +heartbeat(State) -> + {ok, ConfigVersion} = plopconfig:get_env(version), + RunningApps = [atom_to_list(App) ++ " " ++ Vsn || {App, _Desc, Vsn} <- application:which_applications()], + + NewState1 = store_status(State, "heartbeat", "", "configversion", ConfigVersion), + NewState2 = store_set_status(NewState1, "heartbeat", "", "applications", sets:from_list(RunningApps)), + NewState2. + handle_call(_, _From, State) -> {noreply, State}. @@ -61,7 +76,14 @@ handle_cast({report_multi, Service, Target, Variable, Status}, State) -> handle_info({timeout, _Timer, force_send}, State) -> lager:debug("statusreport timer timeout"), - {noreply, force_send(State)}. + {noreply, force_send(State)}; + +handle_info({timeout, _Timer, heartbeat}, State) -> + lager:debug("statusreport timer timeout"), + HeartbeatInterval = application:get_env(plop, heartbeat_interval, 1000), + erlang:start_timer(HeartbeatInterval, self(), heartbeat), + NewState = heartbeat(State), + {noreply, try_send(NewState)}. code_change(_OldVsn, State, _Extra) -> {ok, State}. @@ -105,10 +127,17 @@ group_by_service(Statusreports) -> dict:append(Service, {Target, Variable, Status}, Acc) end, dict:new(), dict:to_list(Statusreports))). -encode_status({single, Status}) -> +encode_one_status(Status) when is_number(Status) -> Status; +encode_one_status(Status) when is_list(Status) -> + list_to_binary(Status); +encode_one_status(Status) when is_binary(Status) -> + Status. + +encode_status({single, Status}) -> + encode_one_status(Status); encode_status({multi, Statuses}) -> - sets:to_list(Statuses). + lists:map(fun encode_one_status/1, sets:to_list(Statuses)). send(Service, Statusreports, Nodename) -> lager:debug("reporting status to ~p: ~p", [Service, Statusreports]), @@ -160,10 +189,10 @@ try_send(State) -> force_send(State) end. -report(Service, Target, Variable, Status) -> +report(Service, Target, Variable, Status) when is_number(Status); is_list(Status); is_binary(Status) -> lager:debug("reporting status ~p ~p ~p ~p", [Service, Target, Variable, Status]), gen_server:cast(?MODULE, {report, Service, Target, Variable, Status}). -report_multi(Service, Target, Variable, Status) -> +report_multi(Service, Target, Variable, Status) when is_number(Status); is_list(Status); is_binary(Status) -> lager:debug("reporting multi status ~p ~p ~p ~p", [Service, Target, Variable, Status]), gen_server:cast(?MODULE, {report_multi, Service, Target, Variable, Status}). |