|
|
@@ -20,7 +20,9 @@
|
|
|
, delete_checker/1
|
|
|
]).
|
|
|
|
|
|
--export([health_check/2]).
|
|
|
+-export([ start_health_check/2
|
|
|
+ , health_check_timeout_checker/3
|
|
|
+ ]).
|
|
|
|
|
|
-define(SUP, emqx_resource_health_check_sup).
|
|
|
-define(ID(NAME), {resource_health_check, NAME}).
|
|
|
@@ -32,7 +34,7 @@ child_spec(Name, Sleep) ->
|
|
|
shutdown => 5000, type => worker, modules => [?MODULE]}.
|
|
|
|
|
|
start_link(Name, Sleep) ->
|
|
|
- Pid = proc_lib:spawn_link(?MODULE, health_check, [Name, Sleep]),
|
|
|
+ Pid = proc_lib:spawn_link(?MODULE, start_health_check, [Name, Sleep]),
|
|
|
{ok, Pid}.
|
|
|
|
|
|
create_checker(Name, Sleep) ->
|
|
|
@@ -54,13 +56,36 @@ delete_checker(Name) ->
|
|
|
Error -> Error
|
|
|
end.
|
|
|
|
|
|
-health_check(Name, SleepTime) ->
|
|
|
- case emqx_resource:health_check(Name) of
|
|
|
- ok ->
|
|
|
- emqx_alarm:deactivate(Name);
|
|
|
- {error, _} ->
|
|
|
- emqx_alarm:activate(Name, #{name => Name},
|
|
|
- <<Name/binary, " health check failed">>)
|
|
|
+start_health_check(Name, Sleep) ->
|
|
|
+ Pid = self(),
|
|
|
+ _ = proc_lib:spawn_link(?MODULE, health_check_timeout_checker, [Pid, Name, Sleep]),
|
|
|
+ health_check(Name).
|
|
|
+
|
|
|
+health_check(Name) ->
|
|
|
+ receive
|
|
|
+ {Pid, begin_health_check} ->
|
|
|
+ case emqx_resource:health_check(Name) of
|
|
|
+ ok ->
|
|
|
+ emqx_alarm:deactivate(Name);
|
|
|
+ {error, _} ->
|
|
|
+ emqx_alarm:activate(Name, #{name => Name},
|
|
|
+ <<Name/binary, " health check failed">>)
|
|
|
+ end,
|
|
|
+ Pid ! health_check_finish
|
|
|
+ end,
|
|
|
+ health_check(Name).
|
|
|
+
|
|
|
+health_check_timeout_checker(Pid, Name, SleepTime) ->
|
|
|
+ SelfPid = self(),
|
|
|
+ Pid ! {SelfPid, begin_health_check},
|
|
|
+ receive
|
|
|
+ health_check_finish -> timer:sleep(SleepTime)
|
|
|
+ after 10000 ->
|
|
|
+ emqx_alarm:activate(Name, #{name => Name},
|
|
|
+ <<Name/binary, " health check timout">>),
|
|
|
+ emqx_resource:set_resource_status_stoped(Name),
|
|
|
+ receive
|
|
|
+ health_check_finish -> timer:sleep(SleepTime)
|
|
|
+ end
|
|
|
end,
|
|
|
- timer:sleep(SleepTime),
|
|
|
- health_check(Name, SleepTime).
|
|
|
+ health_check_timeout_checker(Pid, Name, SleepTime).
|