1919
2020% % Plugin callbacks
2121-export ([
22- on_config_changed /2
22+ on_config_changed /2 ,
23+ on_health_check /0
2324]).
2425
2526% % gen_server callbacks
3940% %--------------------------------------------------------------------
4041
4142-record (state , {}).
43+
4244-record (on_config_changed , {
4345 old_conf :: map (),
4446 new_conf :: map ()
4547}).
4648
49+ -record (on_health_check , {}).
50+
4751% %--------------------------------------------------------------------
4852% % API
4953% %--------------------------------------------------------------------
@@ -68,7 +72,20 @@ child_spec() ->
6872% %--------------------------------------------------------------------
6973
7074on_config_changed (OldConf , NewConf ) ->
71- gen_server :call (? SERVER , # on_config_changed {old_conf = OldConf , new_conf = NewConf }, ? TIMEOUT ).
75+ try
76+ gen_server :call (? SERVER , # on_config_changed {old_conf = OldConf , new_conf = NewConf }, ? TIMEOUT )
77+ catch
78+ exit :{noproc , _ } ->
79+ ok
80+ end .
81+
82+ on_health_check () ->
83+ try
84+ gen_server :call (? SERVER , # on_health_check {}, ? TIMEOUT )
85+ catch
86+ exit :{noproc , _ } ->
87+ {error , <<" Plugin is not running" >>}
88+ end .
7289
7390% %--------------------------------------------------------------------
7491% % gen_server callbacks
@@ -83,6 +100,8 @@ init([]) ->
83100
84101handle_call (# on_config_changed {old_conf = OldConf , new_conf = NewConf }, _From , State ) ->
85102 {reply , handle_on_config_changed (OldConf , NewConf ), State };
103+ handle_call (# on_health_check {}, _From , State ) ->
104+ {reply , handle_on_health_check (), State };
86105handle_call (Request , From , State ) ->
87106 ? SLOG (error , #{
88107 msg => " offline_message_plugin_unexpected_call" , request => Request , from => From
@@ -125,9 +144,25 @@ handle_on_config_changed(OldConf, NewConf) ->
125144 ok = emqx_omp_redis :on_config_changed (OldRedisConf , NewRedisConf ),
126145 ok .
127146
147+ handle_on_health_check () ->
148+ Config = current_config (),
149+ MysqlConf = maps :get (<<" mysql" >>, Config , #{}),
150+ RedisConf = maps :get (<<" redis" >>, Config , #{}),
151+ MysqlStatus = emqx_omp_mysql :on_health_check (MysqlConf ),
152+ RedisStatus = emqx_omp_redis :on_health_check (RedisConf ),
153+ Errors = status_to_error_list (MysqlStatus ) ++ status_to_error_list (RedisStatus ),
154+ case Errors of
155+ [] ->
156+ ok ;
157+ Errors ->
158+ {error , iolist_to_binary (lists :join (" ," , Errors ))}
159+ end .
160+
161+ status_to_error_list (ok ) -> [];
162+ status_to_error_list ({error , Error }) -> [Error ].
163+
128164current_config () ->
129- {ok , Config } = emqx_plugins :get_config (? PLUGIN_NAME_VSN ),
130- Config .
165+ emqx_plugins :get_config (? PLUGIN_NAME_VSN ).
131166
132167init_metrics () ->
133168 ? SLOG (info , #{msg => " omp_init_metrics" }),
0 commit comments