fix
This commit is contained in:
parent
2e34e76d52
commit
ad5f06be0e
@ -16,20 +16,21 @@
|
|||||||
%% 消息类型
|
%% 消息类型
|
||||||
|
|
||||||
%% 服务注册
|
%% 服务注册
|
||||||
-define(PACKET_REGISTER, 16).
|
-define(PACKET_REGISTER, 16#00).
|
||||||
%% 上传数据
|
|
||||||
-define(PACKET_METRIC_DATA, 3).
|
|
||||||
%% 消息响应
|
%% 消息响应
|
||||||
-define(PACKET_RESPONSE, 7).
|
-define(PACKET_RESPONSE, 16#01).
|
||||||
|
|
||||||
%% efka下发给微服务配置
|
%% 上传数据
|
||||||
-define(PACKET_PUSH_CONFIG, 5).
|
-define(PACKET_METRIC_DATA, 16#02).
|
||||||
|
%% 微服务事件上报
|
||||||
|
-define(PACKET_EVENT, 16#03).
|
||||||
|
|
||||||
%% 微服务从efka获取自身的采集项
|
%% 微服务从efka获取自身的采集项
|
||||||
-define(PACKET_REQUEST_CONFIG, 10).
|
-define(PACKET_REQUEST_CONFIG, 16#04).
|
||||||
|
|
||||||
%% 微服务事件上报
|
%% efka下发给微服务配置
|
||||||
-define(PACKET_EVENT, 15).
|
-define(PACKET_PUSH_CONFIG, 16#10).
|
||||||
|
-define(PACKET_INVOKE, 16#11).
|
||||||
|
|
||||||
%% API
|
%% API
|
||||||
-export([start_link/3]).
|
-export([start_link/3]).
|
||||||
@ -66,11 +67,15 @@ send_metric_data(DeviceUUID, Measurement, Tags, Fields) when is_binary(DeviceUUI
|
|||||||
-spec request_config() -> {ok, Result :: list() | map()} | {error, Reason :: any()}.
|
-spec request_config() -> {ok, Result :: list() | map()} | {error, Reason :: any()}.
|
||||||
request_config() ->
|
request_config() ->
|
||||||
{ok, Ref} = gen_server:call(?MODULE, {request_config, self()}),
|
{ok, Ref} = gen_server:call(?MODULE, {request_config, self()}),
|
||||||
case await_reply(Ref, ?EFKA_REQUEST_TIMEOUT) of
|
receive
|
||||||
{ok, Reply} ->
|
{response, Ref, {ok, Reply}} ->
|
||||||
{ok, jiffy:decode(Reply, [return_maps])};
|
Config = jiffy:decode(Reply, [return_maps]),
|
||||||
Error ->
|
{ok, Config};
|
||||||
Error
|
{response, Ref, {error, Reason}} ->
|
||||||
|
{error, Reason}
|
||||||
|
after
|
||||||
|
?EFKA_REQUEST_TIMEOUT ->
|
||||||
|
{error, timeout}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec device_offline(DeviceUUID :: binary()) -> no_return().
|
-spec device_offline(DeviceUUID :: binary()) -> no_return().
|
||||||
@ -89,18 +94,6 @@ send_event(EventType, Params) when is_integer(EventType), is_binary(Params) ->
|
|||||||
%%% API
|
%%% API
|
||||||
%%%===================================================================
|
%%%===================================================================
|
||||||
|
|
||||||
-spec await_reply(Ref :: reference(), Timeout :: integer()) -> {ok, Result :: any()} | {error, Reason :: any()}.
|
|
||||||
await_reply(Ref, Timeout) when is_reference(Ref), is_integer(Timeout) ->
|
|
||||||
receive
|
|
||||||
{response, Ref, {ok, Reply}} ->
|
|
||||||
{ok, Reply};
|
|
||||||
{response, Ref, {error, Reason}} ->
|
|
||||||
{error, Reason}
|
|
||||||
after
|
|
||||||
Timeout ->
|
|
||||||
{error, timeout}
|
|
||||||
end.
|
|
||||||
|
|
||||||
%% @doc Spawns the server and registers the local name (unique)
|
%% @doc Spawns the server and registers the local name (unique)
|
||||||
-spec(start_link(ServiceId :: binary(), Host :: string(), Port :: integer()) ->
|
-spec(start_link(ServiceId :: binary(), Host :: string(), Port :: integer()) ->
|
||||||
{ok, Pid :: pid()} | ignore | {error, Reason :: term()}).
|
{ok, Pid :: pid()} | ignore | {error, Reason :: term()}).
|
||||||
@ -169,14 +162,14 @@ handle_cast({send_metric_data, DeviceUUID, Measurement, Tags, Fields}, State = #
|
|||||||
Body = efka_point:normalized(Point),
|
Body = efka_point:normalized(Point),
|
||||||
Len = byte_size(DeviceUUID),
|
Len = byte_size(DeviceUUID),
|
||||||
|
|
||||||
Packet = <<?PACKET_METRIC_DATA, 0:32, Len:8, DeviceUUID/binary, Body/binary>>,
|
Packet = <<?PACKET_METRIC_DATA, Len:8, DeviceUUID/binary, Body/binary>>,
|
||||||
ok = gen_tcp:send(Socket, Packet),
|
ok = gen_tcp:send(Socket, Packet),
|
||||||
|
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
|
|
||||||
%% done
|
%% done
|
||||||
handle_cast({send_event, EventType, Params}, State = #state{socket = Socket}) ->
|
handle_cast({send_event, EventType, Params}, State = #state{socket = Socket}) ->
|
||||||
Packet = <<?PACKET_EVENT:8, 0:32, EventType:16, Params/binary>>,
|
Packet = <<?PACKET_EVENT:8, EventType:16, Params/binary>>,
|
||||||
ok = gen_tcp:send(Socket, Packet),
|
ok = gen_tcp:send(Socket, Packet),
|
||||||
|
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
|
|||||||
@ -23,21 +23,21 @@
|
|||||||
%% 消息类型
|
%% 消息类型
|
||||||
|
|
||||||
%% 服务注册
|
%% 服务注册
|
||||||
-define(PACKET_REGISTER, 16).
|
-define(PACKET_REGISTER, 16#00).
|
||||||
%% 上传数据
|
|
||||||
-define(PACKET_METRIC_DATA, 3).
|
|
||||||
%% 消息响应
|
%% 消息响应
|
||||||
-define(PACKET_RESPONSE, 7).
|
-define(PACKET_RESPONSE, 16#01).
|
||||||
|
|
||||||
|
%% 上传数据
|
||||||
|
-define(PACKET_METRIC_DATA, 16#02).
|
||||||
|
%% 微服务事件上报
|
||||||
|
-define(PACKET_EVENT, 16#03).
|
||||||
|
|
||||||
|
%% 微服务从efka获取自身的采集项
|
||||||
|
-define(PACKET_REQUEST_CONFIG, 16#04).
|
||||||
|
|
||||||
%% efka下发给微服务配置
|
%% efka下发给微服务配置
|
||||||
-define(PACKET_PUSH_CONFIG, 5).
|
-define(PACKET_PUSH_CONFIG, 16#10).
|
||||||
|
-define(PACKET_INVOKE, 16#11).
|
||||||
-define(PACKET_INVOKE, 6).
|
|
||||||
|
|
||||||
-define(PACKET_REQUEST_CONFIG, 10).
|
|
||||||
|
|
||||||
%% 微服务事件上报
|
|
||||||
-define(PACKET_EVENT, 15).
|
|
||||||
|
|
||||||
-record(state, {
|
-record(state, {
|
||||||
packet_id = 1,
|
packet_id = 1,
|
||||||
@ -145,12 +145,12 @@ handle_info({tcp, Socket, <<?PACKET_REQUEST_CONFIG:8, PacketId:32>>}, State = #s
|
|||||||
{noreply, State};
|
{noreply, State};
|
||||||
|
|
||||||
%% 数据项
|
%% 数据项
|
||||||
handle_info({tcp, Socket, <<?PACKET_METRIC_DATA:8, 0:32, Len:8, DeviceUUID:Len/binary, Data/binary>>}, State = #state{socket = Socket, service_pid = ServicePid, is_registered = true}) ->
|
handle_info({tcp, Socket, <<?PACKET_METRIC_DATA:8, Len:8, DeviceUUID:Len/binary, Data/binary>>}, State = #state{socket = Socket, service_pid = ServicePid, is_registered = true}) ->
|
||||||
efka_service:metric_data(ServicePid, DeviceUUID, Data),
|
efka_service:metric_data(ServicePid, DeviceUUID, Data),
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
|
|
||||||
%% Event事件
|
%% Event事件
|
||||||
handle_info({tcp, Socket, <<?PACKET_EVENT:8, 0:32, EventType:16, Params/binary>>}, State = #state{socket = Socket, service_pid = ServicePid, is_registered = true}) ->
|
handle_info({tcp, Socket, <<?PACKET_EVENT:8, EventType:16, Params/binary>>}, State = #state{socket = Socket, service_pid = ServicePid, is_registered = true}) ->
|
||||||
efka_service:send_event(ServicePid, EventType, Params),
|
efka_service:send_event(ServicePid, EventType, Params),
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user