diff --git a/src/efka_client.erl b/src/efka_client.erl index c0c7b06..70a69e4 100644 --- a/src/efka_client.erl +++ b/src/efka_client.erl @@ -17,7 +17,7 @@ %% API -export([start_link/0]). -export([metric_data/2, ping/13, task_event_stream/3, close_task_event_stream/2]). --export([send_task_event_stream/3, send_close_task_event_stream/2]). +-export([is_activated/0]). %% gen_statem callbacks -export([init/1, handle_event/4, terminate/3, code_change/4, callback_mode/0]). @@ -56,13 +56,9 @@ task_event_stream(TaskId, Type, Stream) when is_integer(TaskId), is_binary(Type) close_task_event_stream(TaskId, Reason) when is_integer(TaskId), is_binary(Reason) -> gen_statem:cast(?SERVER, {close_task_event_stream, TaskId, Reason}). --spec send_task_event_stream(TaskId :: integer(), Type :: binary(), Stream :: binary()) -> ok | not_ready. -send_task_event_stream(TaskId, Type, Stream) when is_integer(TaskId), is_binary(Type), is_binary(Stream) -> - gen_statem:call(?SERVER, {send_task_event_stream, TaskId, Type, Stream}). - --spec send_close_task_event_stream(TaskId :: integer(), Reason :: binary()) -> ok | not_ready. -send_close_task_event_stream(TaskId, Reason) when is_integer(TaskId), is_binary(Reason) -> - gen_statem:call(?SERVER, {send_close_task_event_stream, TaskId, Reason}). +-spec is_activated() -> boolean(). +is_activated() -> + gen_statem:call(?SERVER, is_activated). ping(AdCode, BootTime, Province, City, EfkaVersion, KernelArch, Ips, CpuCore, CpuLoad, CpuTemperature, Disk, Memory, Interfaces) -> gen_statem:cast(?SERVER, {ping, AdCode, BootTime, Province, City, EfkaVersion, KernelArch, Ips, CpuCore, CpuLoad, CpuTemperature, Disk, Memory, Interfaces}). @@ -118,23 +114,10 @@ handle_event(cast, {task_event_stream, _TaskId, _Stream}, _, State = #state{}) - handle_event(cast, {close_task_event_stream, _TaskId, _Reason}, _, State = #state{}) -> {keep_state, State}; -handle_event({call, From}, {send_task_event_stream, TaskId, Type, Stream}, ?STATE_ACTIVATED, State = #state{socket = Socket}) -> - EventPacket = message_pb:encode_msg(#'CastFrame'{ - body = {event_stream, #'TaskEventStream'{task_id = TaskId, type = Type, stream = Stream}} - }), - send_packet(Socket, <>), - {keep_state, State, [{reply, From, ok}]}; -handle_event({call, From}, {send_task_event_stream, _TaskId, _Type, _Stream}, _StateName, State = #state{}) -> - {keep_state, State, [{reply, From, not_ready}]}; - -handle_event({call, From}, {send_close_task_event_stream, TaskId, Reason}, ?STATE_ACTIVATED, State = #state{socket = Socket}) -> - EventPacket = message_pb:encode_msg(#'CastFrame'{ - body = {event_stream, #'TaskEventStream'{task_id = TaskId, type = <<"close">>, stream = Reason}} - }), - send_packet(Socket, <>), - {keep_state, State, [{reply, From, ok}]}; -handle_event({call, From}, {send_close_task_event_stream, _TaskId, _Reason}, _StateName, State = #state{}) -> - {keep_state, State, [{reply, From, not_ready}]}; +handle_event({call, From}, is_activated, ?STATE_ACTIVATED, State = #state{}) -> + {keep_state, State, [{reply, From, true}]}; +handle_event({call, From}, is_activated, _StateName, State = #state{}) -> + {keep_state, State, [{reply, From, false}]}; %% 异步建立到服务器的连接 handle_event(info, {timeout, _, create_transport}, ?STATE_DISCONNECTED, State = #state{next_packet_id = PacketId}) -> diff --git a/src/efka_task_reporter.erl b/src/efka_task_reporter.erl index dfc9875..541c9dd 100644 --- a/src/efka_task_reporter.erl +++ b/src/efka_task_reporter.erl @@ -97,11 +97,15 @@ flush_pending(State = #state{pending = Pending0}) -> end. send_event({stream, TaskId, Type, Stream}) -> - send_result(catch efka_client:send_task_event_stream(TaskId, Type, Stream)); + maybe_send(fun() -> efka_client:task_event_stream(TaskId, Type, Stream) end); send_event({close, TaskId, Reason}) -> - send_result(catch efka_client:send_close_task_event_stream(TaskId, Reason)). + maybe_send(fun() -> efka_client:close_task_event_stream(TaskId, Reason) end). -send_result(ok) -> - ok; -send_result(_) -> - not_ready. +maybe_send(SendFun) -> + case catch efka_client:is_activated() of + true -> + _ = catch SendFun(), + ok; + _ -> + not_ready + end.