diff --git a/apps/efka/include/efka.hrl b/apps/efka/include/efka.hrl index 4d5f217..eaa6495 100644 --- a/apps/efka/include/efka.hrl +++ b/apps/efka/include/efka.hrl @@ -22,6 +22,9 @@ -define(PACKET_ASYNC_CALL, 16#05). -define(PACKET_ASYNC_CALL_REPLY, 16#06). +%% ping包,客户端主动发起 +-define(PACKET_PING, 16#FF). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% 二级分类定义 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/apps/efka/src/efka_transport.erl b/apps/efka/src/efka_transport.erl index 82aa873..31957d8 100644 --- a/apps/efka/src/efka_transport.erl +++ b/apps/efka/src/efka_transport.erl @@ -70,6 +70,7 @@ start_link(ParentPid, Host, Port) when is_pid(ParentPid), is_list(Host), is_inte {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {stop, Reason :: term()} | ignore). init([ParentPid, Host, Port]) -> + ping_ticker(), {ok, #state{parent_pid = ParentPid, host = Host, port = Port, socket = undefined}}. %% @private @@ -160,6 +161,11 @@ handle_info({ssl_error, Socket, Reason}, State = #state{socket = Socket}) -> handle_info({ssl_closed, Socket}, State = #state{socket = Socket}) -> {stop, normal, State}; +handle_info({timeout, _, ping_ticker}, State = #state{socket = Socket}) -> + ok = ssl:send(Socket, <>), + ping_ticker(), + {noreply, State}; + handle_info(Info, State = #state{}) -> lager:notice("[efka_transport] get unknown info: ~p", [Info]), {noreply, State}. @@ -185,4 +191,7 @@ code_change(_OldVsn, State = #state{}, _Extra) -> %%%=================================================================== %%% Internal functions -%%%=================================================================== \ No newline at end of file +%%%=================================================================== + +ping_ticker() -> + erlang:start_timer(5000, self(), ping_ticker). \ No newline at end of file diff --git a/apps/efka/src/mnesia/service_model.erl b/apps/efka/src/mnesia/service_model.erl index b967b69..0c2d79e 100644 --- a/apps/efka/src/mnesia/service_model.erl +++ b/apps/efka/src/mnesia/service_model.erl @@ -17,6 +17,7 @@ -export([create_table/0]). -export([insert/1, get_all_services/0, get_all_service_ids/0, get_running_services/0]). -export([get_metrics/1, get_params/1, set_metrics/2, set_params/2, get_service/1, get_status/1, change_status/2]). +-export([display_services/0]). create_table() -> %% id生成器 @@ -150,4 +151,16 @@ get_running_services() -> {ok, Services}; {aborted, Error} -> {error, Error} + end. + +display_services() -> + F = fun() -> + Q = qlc:q([E || E <- mnesia:table(?TAB), E]), + qlc:e(Q) + end, + case mnesia:transaction(F) of + {atomic, Services} -> + {ok, Services}; + {aborted, Error} -> + {error, Error} end. \ No newline at end of file