From 8e02d0714c1869d67a3477b45eb8b506a0e23d72 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 6 May 2025 18:12:43 +0800 Subject: [PATCH] fix --- apps/efka/include/efka.hrl | 2 + apps/efka/include/efka_tables.hrl | 9 +- apps/efka/include/message_pb.hrl | 18 +- apps/efka/src/efka_agent.erl | 154 +++++--- apps/efka/src/efka_codec.erl | 64 ---- apps/efka/src/efka_micro_service.erl | 21 +- apps/efka/src/efka_tcp_sup.erl | 4 +- ...o_data_model.erl => micro_cache_model.erl} | 24 +- apps/efka/src/proto/message_pb.erl | 336 ++++++++++-------- message_pb.proto | 18 +- 10 files changed, 348 insertions(+), 302 deletions(-) delete mode 100644 apps/efka/src/efka_codec.erl rename apps/efka/src/mnesia/{micro_data_model.erl => micro_cache_model.erl} (69%) diff --git a/apps/efka/include/efka.hrl b/apps/efka/include/efka.hrl index 59f73f5..170f264 100644 --- a/apps/efka/include/efka.hrl +++ b/apps/efka/include/efka.hrl @@ -30,6 +30,8 @@ %% ai识别的事件上报 -define(METHOD_AI_EVENT, 16#08). +-define(METHOD_PHASE, 16#09). + %% 部署微服务 -define(METHOD_DEPLOY, 16#10). -define(METHOD_ARGUMENTS, 16#11). diff --git a/apps/efka/include/efka_tables.hrl b/apps/efka/include/efka_tables.hrl index 6333c9a..bbebfee 100644 --- a/apps/efka/include/efka_tables.hrl +++ b/apps/efka/include/efka_tables.hrl @@ -21,13 +21,10 @@ }). %% 数据缓存 --record(micro_data, { +-record(micro_cache, { id = 0 :: integer(), - device_uuid :: binary(), - service_name :: binary(), - at :: integer(), - tags :: term(), - fields :: binary() + method :: integer(), + data :: binary() }). %% id生成器 diff --git a/apps/efka/include/message_pb.hrl b/apps/efka/include/message_pb.hrl index 09b07c1..5a8784c 100644 --- a/apps/efka/include/message_pb.hrl +++ b/apps/efka/include/message_pb.hrl @@ -80,11 +80,11 @@ -ifndef('DATA_PB_H'). -define('DATA_PB_H', true). -record(data, - {device_uuid = <<>> :: unicode:chardata() | undefined, % = 1, optional - service_name = <<>> :: unicode:chardata() | undefined, % = 2, optional - at = 0 :: integer() | undefined, % = 3, optional, 32 bits + {service_id = <<>> :: unicode:chardata() | undefined, % = 1, optional + device_uuid = <<>> :: unicode:chardata() | undefined, % = 2, optional + timestamp = 0 :: integer() | undefined, % = 3, optional, 32 bits tags = [] :: [{unicode:chardata(), unicode:chardata()}] | undefined, % = 4 - fields = <<>> :: iodata() | undefined % = 5, optional + fields = <<>> :: unicode:chardata() | undefined % = 5, optional }). -endif. @@ -131,16 +131,18 @@ -ifndef('EVENT_PB_H'). -define('EVENT_PB_H', true). -record(event, - {event_type = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - params = <<>> :: unicode:chardata() | undefined % = 2, optional + {service_id = <<>> :: unicode:chardata() | undefined, % = 1, optional + event_type = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits + params = <<>> :: unicode:chardata() | undefined % = 3, optional }). -endif. -ifndef('AI_EVENT_PB_H'). -define('AI_EVENT_PB_H', true). -record(ai_event, - {event_type = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits - params = <<>> :: unicode:chardata() | undefined % = 2, optional + {service_id = <<>> :: unicode:chardata() | undefined, % = 1, optional + event_type = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits + params = <<>> :: unicode:chardata() | undefined % = 3, optional }). -endif. diff --git a/apps/efka/src/efka_agent.erl b/apps/efka/src/efka_agent.erl index 165555b..fa5f4f6 100644 --- a/apps/efka/src/efka_agent.erl +++ b/apps/efka/src/efka_agent.erl @@ -16,7 +16,7 @@ %% API -export([start_link/0]). --export([data/5, event/2, ai_event/2, feedback_phase/1]). +-export([metric_data/5, event/3, ai_event/3, feedback_phase/5]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). @@ -42,8 +42,8 @@ %%%=================================================================== %% 发送数据 -data(ServiceName, DeviceUUID, At, Tags, Fields) when is_binary(ServiceName), is_binary(DeviceUUID), is_integer(At), is_map(Tags), is_binary(Fields) -> - gen_server:cast(?SERVER, {data, ServiceName, DeviceUUID, At, Tags, Fields}). +metric_data(ServiceId, DeviceUUID, Timestamp, Tags, Fields) when is_binary(ServiceId), is_binary(DeviceUUID), is_integer(Timestamp), is_map(Tags), is_binary(Fields) -> + gen_server:cast(?SERVER, {metric_data, ServiceId, DeviceUUID, Timestamp, Tags, Fields}). ping(AdCode, BootTime, Province, City, EfkaVersion, KernelArch, Ips, CpuCore, CpuLoad, CpuTemperature, Disk, Memory, Interfaces) -> Ping = #ping{ @@ -63,22 +63,14 @@ ping(AdCode, BootTime, Province, City, EfkaVersion, KernelArch, Ips, CpuCore, Cp }, gen_server:cast(?SERVER, {ping, Ping}). -feedback_phase(Phase) -> - ok. +feedback_phase(TaskId, Timestamp, Phase, Code, Message) -> + gen_server:cast(?SERVER, {feedback_phase, TaskId, Timestamp, Phase, Code, Message}). -event(EventType, Params) when is_integer(EventType), is_binary(Params) -> - Event = #event{ - event_type = EventType, - params = Params - }, - gen_server:cast(?SERVER, {event, Event}). +event(ServiceId, EventType, Params) when is_binary(ServiceId), is_integer(EventType), is_binary(Params) -> + gen_server:cast(?SERVER, {event, ServiceId, EventType, Params}). -ai_event(EventType, Params) when is_integer(EventType), is_binary(Params) -> - AIEvent = #ai_event{ - event_type = EventType, - params = Params - }, - gen_server:cast(?SERVER, {event, AIEvent}). +ai_event(ServiceId, EventType, Params) when is_binary(ServiceId), is_integer(EventType), is_binary(Params) -> + gen_server:cast(?SERVER, {ai_event, ServiceId, EventType, Params}). %% @doc Spawns the server and registers the local name (unique) -spec(start_link() -> @@ -119,16 +111,91 @@ handle_call(_Request, _From, State = #state{}) -> {noreply, NewState :: #state{}} | {noreply, NewState :: #state{}, timeout() | hibernate} | {stop, Reason :: term(), NewState :: #state{}}). -handle_cast({data, ServiceName, DeviceUUID, At, Tags, Fields}, State = #state{status = Status}) -> - ok = micro_data_model:insert(#micro_data{ + +%% 发送数据 +handle_cast({metric_data, ServiceId, DeviceUUID, Timestamp, Tags, Fields}, State = #state{status = Status, transport_pid = TransportPid}) -> + Packet = message_pb:encode_msg(#data{ + service_id = ServiceId, device_uuid = DeviceUUID, - service_name = ServiceName, - at = At, + timestamp = Timestamp, tags = Tags, fields = Fields }), - %% 触发下一次的数据处理 - Status =:= ?STATE_ACTIVATED andalso fetch_next(), + + case Status =:= ?STATE_ACTIVATED of + true -> + efka_transport:send(TransportPid, ?METHOD_DATA, Packet); + false -> + ok = micro_cache_model:insert(#micro_cache { + id = micro_cache_model:next_id(), + method = ?METHOD_DATA, + data = Packet + }) + end, + + {noreply, State}; + +%% Event事件 +handle_cast({event, ServiceId, EventType, Params}, State = #state{status = Status, transport_pid = TransportPid}) -> + EventPacket = message_pb:encode_msg(#event{ + service_id = ServiceId, + event_type = EventType, + params = Params + }), + + case Status =:= ?STATE_ACTIVATED of + true -> + efka_transport:send(TransportPid, ?METHOD_EVENT, EventPacket); + false -> + ok = micro_cache_model:insert(#micro_cache { + id = micro_cache_model:next_id(), + method = ?METHOD_EVENT, + data = EventPacket + }) + end, + + {noreply, State}; + +%% AiEvent事件 +handle_cast({ai_event, ServiceId, EventType, Params}, State = #state{status = Status, transport_pid = TransportPid}) -> + EventPacket = message_pb:encode_msg(#ai_event{ + service_id = ServiceId, + event_type = EventType, + params = Params + }), + + case Status =:= ?STATE_ACTIVATED of + true -> + efka_transport:send(TransportPid, ?METHOD_AI_EVENT, EventPacket); + false -> + ok = micro_cache_model:insert(#micro_cache { + id = micro_cache_model:next_id(), + method = ?METHOD_AI_EVENT, + data = EventPacket + }) + end, + + {noreply, State}; + +handle_cast({feedback_phase, TaskId, Timestamp, Phase, Code, Message}, State = #state{status = Status, transport_pid = TransportPid}) -> + PhasePacket = message_pb:encode_msg(#feedback_phase{ + task_id = TaskId, + timestamp = Timestamp, + phase = Phase, + code = Code, + message = Message + }), + + case Status =:= ?STATE_ACTIVATED of + true -> + efka_transport:send(TransportPid, ?METHOD_PHASE, PhasePacket); + false -> + ok = micro_cache_model:insert(#micro_cache { + id = micro_cache_model:next_id(), + method = ?METHOD_PHASE, + data = PhasePacket + }) + end, {noreply, State}; @@ -166,6 +233,14 @@ handle_info({auth_reply, {ok, ReplyBin}}, State = #state{status = ?STATE_AUTH, t case Code of 0 -> lager:debug("[efka_agent] auth failed, message: ~p, repository_url: ~p", [Message, RepositoryUrl]), + + %% 上传缓冲区里面的所有数据 + CacheItems = micro_cache_model:get_all_cache(), + lists:foreach(fun(#micro_cache{id = Id, method = Method, data = Packet}) -> + efka_transport:send(TransportPid, Method, Packet), + micro_cache_model:delete(Id) + end, CacheItems), + {noreply, State#state{status = ?STATE_ACTIVATED}}; 1 -> %% 主机在后台的授权未通过;此时agent不能推送数据给云端服务器,但是云端服务器可以推送命令给agent @@ -214,7 +289,7 @@ handle_info({server_push_message, PacketId, < Reply = #efka_response { code = 0, - message = <<"服务未启动"/utf8>> + message = <<"service not run">> }, efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply)); ServicePid when is_pid(ServicePid) -> @@ -294,32 +369,6 @@ handle_info({server_push_message, PacketId, <<16:8, Directive/binary>>}, State = {noreply, State}; -handle_info(fetch_next, State = #state{status = ?STATE_ACTIVATED, transport_pid = TransportPid}) -> - case micro_data_model:fetch_next() of - error -> - ok; - {ok, #micro_data{id = Id, device_uuid = DeviceUUID, service_name = ServiceName, at = At, tags = Tags, fields = Fields}} -> - DataPacket = message_pb:encode_msg(#data{ - device_uuid = DeviceUUID, - service_name = ServiceName, - at = At, - tags = Tags, - fields = Fields - }), - efka_transport:send(TransportPid, ?METHOD_DATA, DataPacket), - - %% 发送后删除记录 - ok = micro_data_model:delete(Id), - - %% 触发下一次 - fetch_next() - end, - {noreply, State}; - -%% 其他情况下,忽略该消息 -handle_info(fetch_next, State) -> - {noreply, State}; - %% transport进程退出 handle_info({'EXIT', TransportPid, Reason}, State = #state{transport_pid = TransportPid}) -> efka_logger:debug("[efka_agent] transport pid: ~p, exit with reason: ~p", [TransportPid, Reason]), @@ -349,7 +398,4 @@ code_change(_OldVsn, State = #state{}, _Extra) -> %%%=================================================================== %%% Internal functions -%%%=================================================================== - -fetch_next() -> - self() ! fetch_next. \ No newline at end of file +%%%=================================================================== \ No newline at end of file diff --git a/apps/efka/src/efka_codec.erl b/apps/efka/src/efka_codec.erl deleted file mode 100644 index c041f4e..0000000 --- a/apps/efka/src/efka_codec.erl +++ /dev/null @@ -1,64 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author anlicheng -%%% @copyright (C) 2025, -%%% @doc -%%% -%%% @end -%%% Created : 21. 4月 2025 16:18 -%%%------------------------------------------------------------------- --module(efka_codec). --author("anlicheng"). --include("message_pb.hrl"). - -%% 消息体类型 --define(PACKET_REQUEST, 16#01). --define(PACKET_RESPONSE, 16#02). -%% 服务器端推送消息 --define(PACKET_PUBLISH, 16#03). --define(PACKET_PUBLISH_RESPONSE, 16#04). - -%% 主机端上报数据类型标识 -%% 建立到websocket的register关系 --define(METHOD_AUTH, 16#00). --define(METHOD_CREATE_SESSION, 16#01). - --define(METHOD_DATA, 16#02). --define(METHOD_PING, 16#03). --define(METHOD_INFORM, 16#04). --define(METHOD_FEEDBACK_STEP, 16#05). --define(METHOD_FEEDBACK_RESULT, 16#06). --define(METHOD_EVENT, 16#07). -%% ai识别的事件上报 --define(METHOD_AI_EVENT, 16#08). - -%% 事件类型 --define(EVENT_DEVICE, 16#01). -%% 主机的相关事件 --define(EVENT_HOST, 16#02). - -%% ai相关的事件 --define(EVENT_AI, 16#03). - -%% 指令相关 --define(DIRECTIVE_ZD_CTRL, 16#01). - -%% API --export([auth_request/1]). - --spec auth_request(PacketId :: integer()) -> binary(). -auth_request(PacketId) when is_integer(PacketId), PacketId > 0 -> - {ok, AuthInfo} = application:get_env(efka, auth), - UUID = proplists:get_value(uuid, AuthInfo), - Username = proplists:get_value(username, AuthInfo), - Salt = proplists:get_value(salt, AuthInfo), - Token = proplists:get_value(token, AuthInfo), - - RequestBin = message_pb:encode_msg(#auth_request{ - uuid = unicode:characters_to_binary(UUID), - username = unicode:characters_to_binary(Username), - salt = unicode:characters_to_binary(Salt), - token = unicode:characters_to_binary(Token), - timestamp = efka_util:timestamp() - }), - - <>. diff --git a/apps/efka/src/efka_micro_service.erl b/apps/efka/src/efka_micro_service.erl index d67ea2f..e2b33e9 100644 --- a/apps/efka/src/efka_micro_service.erl +++ b/apps/efka/src/efka_micro_service.erl @@ -21,7 +21,7 @@ -export([start_link/2]). -export([get_name/1, get_pid/1, start_service/1, stop_service/1, attach_channel/2]). -export([push_arguments/2, push_metrics/2, request_arguments/1, request_metrics/1]). --export([metric_data/3, send_log/2, send_event/3, send_ai_event/3]). +-export([metric_data/4, send_event/3, send_ai_event/3]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). @@ -77,17 +77,14 @@ request_arguments(Pid) when is_pid(Pid) -> request_metrics(Pid) when is_pid(Pid) -> gen_server:call(Pid, request_metrics). -metric_data(Pid, Fields, Tags) -> - ok. - -send_log(Pid, Log) -> - ok. +metric_data(Pid, DeviceUUID, Tags, Fields) -> + gen_server:cast(Pid, {DeviceUUID, Tags, Fields}). send_event(Pid, EventType, Params) -> - ok. + gen_server:cast(Pid, {send_event, EventType, Params}). send_ai_event(Pid, EventType, Params) -> - ok. + gen_server:cast(Pid, {send_ai_event, EventType, Params}). -spec attach_channel(pid(), pid()) -> ok | {error, Reason :: binary()}. attach_channel(Pid, ChannelPid) when is_pid(Pid), is_pid(ChannelPid) -> @@ -214,6 +211,14 @@ handle_call(_Request, _From, State = #state{}) -> {noreply, NewState :: #state{}} | {noreply, NewState :: #state{}, timeout() | hibernate} | {stop, Reason :: term(), NewState :: #state{}}). +handle_cast({metric_data, DeviceUUID, Tags, Fields}, State = #state{service = #micro_service{service_id = ServiceId}}) -> + efka_agent:metric_data(ServiceId, DeviceUUID, efka_util:timestamp(), Tags, Fields), + {noreply, State}; + +handle_cast({send_event, EventType, Params}, State = #state{service = #micro_service{service_id = ServiceId}}) -> + efka_agent:metric_data(ServiceId, DeviceUUID, efka_util:timestamp(), Tags, Fields), + {noreply, State}; + handle_cast(_Request, State = #state{}) -> {noreply, State}. diff --git a/apps/efka/src/efka_tcp_sup.erl b/apps/efka/src/efka_tcp_sup.erl index b4f23bc..0d3325c 100644 --- a/apps/efka/src/efka_tcp_sup.erl +++ b/apps/efka/src/efka_tcp_sup.erl @@ -28,8 +28,8 @@ start_link() -> init([]) -> SupFlags = #{strategy => simple_one_for_one, intensity => 0, period => 1}, ChildSpec = #{ - id => tcp_channel, - start => {tcp_channel, start_link, []}, + id => efka_tcp_channel, + start => {efka_tcp_channel, start_link, []}, restart => temporary, type => worker }, diff --git a/apps/efka/src/mnesia/micro_data_model.erl b/apps/efka/src/mnesia/micro_cache_model.erl similarity index 69% rename from apps/efka/src/mnesia/micro_data_model.erl rename to apps/efka/src/mnesia/micro_cache_model.erl index faaf240..672209d 100644 --- a/apps/efka/src/mnesia/micro_data_model.erl +++ b/apps/efka/src/mnesia/micro_cache_model.erl @@ -6,7 +6,7 @@ %%% @end %%% Created : 04. 7月 2023 12:31 %%%------------------------------------------------------------------- --module(micro_data_model). +-module(micro_cache_model). -author("aresei"). -include("efka_tables.hrl"). -include_lib("stdlib/include/qlc.hrl"). @@ -15,21 +15,23 @@ %% API -export([create_table/0]). --export([insert/1, get_all_data/0, fetch_next/0, delete/1]). +-export([insert/1, get_all_cache/0, fetch_next/0, delete/1, next_id/0]). create_table() -> %% id生成器 - mnesia:create_table(micro_data, [ - {attributes, record_info(fields, micro_data)}, - {record_name, micro_data}, + mnesia:create_table(micro_cache, [ + {attributes, record_info(fields, micro_cache)}, + {record_name, micro_cache}, {disc_copies, [node()]}, {type, ordered_set} ]). --spec insert(MicroData0 :: #micro_data{}) -> ok | {error, Reason :: any()}. -insert(MicroData0 = #micro_data{}) -> - MicroData = MicroData0#micro_data{id = id_generator_model:next_id(?TAB)}, - case mnesia:transaction(fun() -> mnesia:write(?TAB, MicroData, write) end) of +next_id() -> + id_generator_model:next_id(?TAB). + +-spec insert(MicroData0 :: #micro_cache{}) -> ok | {error, Reason :: any()}. +insert(Cache = #micro_cache{}) -> + case mnesia:transaction(fun() -> mnesia:write(?TAB, Cache, write) end) of {'atomic', ok} -> ok; {'aborted', Reason} -> @@ -53,8 +55,8 @@ delete(Id) when is_integer(Id) -> {error, Reason} end. --spec get_all_data() -> [#micro_data{}]. -get_all_data() -> +-spec get_all_cache() -> [#micro_cache{}]. +get_all_cache() -> Fun = fun() -> Q = qlc:q([E || E <- mnesia:table(?TAB)]), qlc:e(Q) diff --git a/apps/efka/src/proto/message_pb.erl b/apps/efka/src/proto/message_pb.erl index f3a954c..7e83ee9 100644 --- a/apps/efka/src/proto/message_pb.erl +++ b/apps/efka/src/proto/message_pb.erl @@ -378,7 +378,7 @@ encode_msg_service_metrics(#service_metrics{service_id = F1, metrics = F2}, Bin, encode_msg_data(Msg, TrUserData) -> encode_msg_data(Msg, <<>>, TrUserData). -encode_msg_data(#data{device_uuid = F1, service_name = F2, at = F3, tags = F4, fields = F5}, Bin, TrUserData) -> +encode_msg_data(#data{service_id = F1, device_uuid = F2, timestamp = F3, tags = F4, fields = F5}, Bin, TrUserData) -> B1 = if F1 == undefined -> Bin; true -> begin @@ -418,9 +418,9 @@ encode_msg_data(#data{device_uuid = F1, service_name = F2, at = F3, tags = F4, f true -> begin TrF5 = id(F5, TrUserData), - case iolist_size(TrF5) of - 0 -> B4; - _ -> e_type_bytes(TrF5, <>, TrUserData) + case is_empty_string(TrF5) of + true -> B4; + false -> e_type_string(TrF5, <>, TrUserData) end end end. @@ -643,23 +643,33 @@ encode_msg_feedback_phase(#feedback_phase{task_id = F1, timestamp = F2, phase = encode_msg_event(Msg, TrUserData) -> encode_msg_event(Msg, <<>>, TrUserData). -encode_msg_event(#event{event_type = F1, params = F2}, Bin, TrUserData) -> +encode_msg_event(#event{service_id = F1, event_type = F2, params = F3}, Bin, TrUserData) -> B1 = if F1 == undefined -> Bin; true -> begin TrF1 = id(F1, TrUserData), - if TrF1 =:= 0 -> Bin; - true -> e_varint(TrF1, <>, TrUserData) + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) end end end, - if F2 == undefined -> B1; + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end, + if F3 == undefined -> B2; true -> begin - TrF2 = id(F2, TrUserData), - case is_empty_string(TrF2) of - true -> B1; - false -> e_type_string(TrF2, <>, TrUserData) + TrF3 = id(F3, TrUserData), + case is_empty_string(TrF3) of + true -> B2; + false -> e_type_string(TrF3, <>, TrUserData) end end end. @@ -667,23 +677,33 @@ encode_msg_event(#event{event_type = F1, params = F2}, Bin, TrUserData) -> encode_msg_ai_event(Msg, TrUserData) -> encode_msg_ai_event(Msg, <<>>, TrUserData). -encode_msg_ai_event(#ai_event{event_type = F1, params = F2}, Bin, TrUserData) -> +encode_msg_ai_event(#ai_event{service_id = F1, event_type = F2, params = F3}, Bin, TrUserData) -> B1 = if F1 == undefined -> Bin; true -> begin TrF1 = id(F1, TrUserData), - if TrF1 =:= 0 -> Bin; - true -> e_varint(TrF1, <>, TrUserData) + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) end end end, - if F2 == undefined -> B1; + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end, + if F3 == undefined -> B2; true -> begin - TrF2 = id(F2, TrUserData), - case is_empty_string(TrF2) of - true -> B1; - false -> e_type_string(TrF2, <>, TrUserData) + TrF3 = id(F3, TrUserData), + case is_empty_string(TrF3) of + true -> B2; + false -> e_type_string(TrF3, <>, TrUserData) end end end. @@ -1333,21 +1353,21 @@ skip_64_service_metrics(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData decode_msg_data(Bin, TrUserData) -> dfp_read_field_def_data(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), 'tr_decode_init_default_data.tags'([], TrUserData), id(<<>>, TrUserData), TrUserData). -dfp_read_field_def_data(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_device_uuid(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_data(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_service_name(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_data(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_at(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_data(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_service_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_data(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_device_uuid(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_data(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_timestamp(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); dfp_read_field_def_data(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_tags(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); dfp_read_field_def_data(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_fields(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -dfp_read_field_def_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, R1, F@_5, TrUserData) -> #data{device_uuid = F@_1, service_name = F@_2, at = F@_3, tags = 'tr_decode_repeated_finalize_data.tags'(R1, TrUserData), fields = F@_5}; +dfp_read_field_def_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, R1, F@_5, TrUserData) -> #data{service_id = F@_1, device_uuid = F@_2, timestamp = F@_3, tags = 'tr_decode_repeated_finalize_data.tags'(R1, TrUserData), fields = F@_5}; dfp_read_field_def_data(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dg_read_field_def_data(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). dg_read_field_def_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 32 - 7 -> dg_read_field_def_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); dg_read_field_def_data(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> Key = X bsl N + Acc, case Key of - 10 -> d_field_data_device_uuid(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 18 -> d_field_data_service_name(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); - 24 -> d_field_data_at(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 10 -> d_field_data_service_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 18 -> d_field_data_device_uuid(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 24 -> d_field_data_timestamp(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); 34 -> d_field_data_tags(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); 42 -> d_field_data_fields(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); _ -> @@ -1359,20 +1379,20 @@ dg_read_field_def_data(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F 5 -> skip_32_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) end end; -dg_read_field_def_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, R1, F@_5, TrUserData) -> #data{device_uuid = F@_1, service_name = F@_2, at = F@_3, tags = 'tr_decode_repeated_finalize_data.tags'(R1, TrUserData), fields = F@_5}. +dg_read_field_def_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, R1, F@_5, TrUserData) -> #data{service_id = F@_1, device_uuid = F@_2, timestamp = F@_3, tags = 'tr_decode_repeated_finalize_data.tags'(R1, TrUserData), fields = F@_5}. -d_field_data_device_uuid(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_device_uuid(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_data_device_uuid(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> +d_field_data_service_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_service_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_data_service_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, dfp_read_field_def_data(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, TrUserData). -d_field_data_service_name(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_service_name(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_data_service_name(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> +d_field_data_device_uuid(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_device_uuid(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_data_device_uuid(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, dfp_read_field_def_data(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, TrUserData). -d_field_data_at(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_at(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); -d_field_data_at(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, TrUserData) -> +d_field_data_timestamp(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_timestamp(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_data_timestamp(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, TrUserData) -> {NewFValue, RestF} = {begin <> = <<(X bsl N + Acc):32/unsigned-native>>, id(Res, TrUserData) end, Rest}, dfp_read_field_def_data(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, TrUserData). @@ -1760,107 +1780,121 @@ skip_32_feedback_phase(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, skip_64_feedback_phase(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_feedback_phase(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). -decode_msg_event(Bin, TrUserData) -> dfp_read_field_def_event(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). +decode_msg_event(Bin, TrUserData) -> dfp_read_field_def_event(Bin, 0, 0, 0, id(<<>>, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), TrUserData). -dfp_read_field_def_event(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_event_event_type(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_event(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_event_params(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_event(<<>>, 0, 0, _, F@_1, F@_2, _) -> #event{event_type = F@_1, params = F@_2}; -dfp_read_field_def_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). +dfp_read_field_def_event(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_event_service_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_event(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_event_event_type(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_event(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_event_params(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_event(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #event{service_id = F@_1, event_type = F@_2, params = F@_3}; +dfp_read_field_def_event(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dg_read_field_def_event(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). -dg_read_field_def_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -dg_read_field_def_event(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> +dg_read_field_def_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> dg_read_field_def_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +dg_read_field_def_event(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> Key = X bsl N + Acc, case Key of - 8 -> d_field_event_event_type(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); - 18 -> d_field_event_params(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 10 -> d_field_event_service_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 16 -> d_field_event_event_type(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 26 -> d_field_event_params(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); _ -> case Key band 7 of - 0 -> skip_varint_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 1 -> skip_64_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 2 -> skip_length_delimited_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 3 -> skip_group_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 5 -> skip_32_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + 0 -> skip_varint_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 1 -> skip_64_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 2 -> skip_length_delimited_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 3 -> skip_group_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 5 -> skip_32_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) end end; -dg_read_field_def_event(<<>>, 0, 0, _, F@_1, F@_2, _) -> #event{event_type = F@_1, params = F@_2}. +dg_read_field_def_event(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #event{service_id = F@_1, event_type = F@_2, params = F@_3}. -d_field_event_event_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_event_event_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_event_event_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_event(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). - -d_field_event_params(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_event_params(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_event_params(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> +d_field_event_service_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_event_service_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_event_service_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_event(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + dfp_read_field_def_event(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). -skip_varint_event(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -skip_varint_event(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +d_field_event_event_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_event_event_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_event_event_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_event(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). -skip_length_delimited_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -skip_length_delimited_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> +d_field_event_params(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_event_params(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_event_params(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_event(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). + +skip_varint_event(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> skip_varint_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +skip_varint_event(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +skip_length_delimited_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> skip_length_delimited_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +skip_length_delimited_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_event(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + dfp_read_field_def_event(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). -skip_group_event(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> +skip_group_event(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_event(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + dfp_read_field_def_event(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). -skip_32_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +skip_32_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). -skip_64_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +skip_64_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). -decode_msg_ai_event(Bin, TrUserData) -> dfp_read_field_def_ai_event(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). +decode_msg_ai_event(Bin, TrUserData) -> dfp_read_field_def_ai_event(Bin, 0, 0, 0, id(<<>>, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), TrUserData). -dfp_read_field_def_ai_event(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ai_event_event_type(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_ai_event(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ai_event_params(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -dfp_read_field_def_ai_event(<<>>, 0, 0, _, F@_1, F@_2, _) -> #ai_event{event_type = F@_1, params = F@_2}; -dfp_read_field_def_ai_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_ai_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). +dfp_read_field_def_ai_event(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_ai_event_service_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_ai_event(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_ai_event_event_type(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_ai_event(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_ai_event_params(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +dfp_read_field_def_ai_event(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #ai_event{service_id = F@_1, event_type = F@_2, params = F@_3}; +dfp_read_field_def_ai_event(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dg_read_field_def_ai_event(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). -dg_read_field_def_ai_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_ai_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -dg_read_field_def_ai_event(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> +dg_read_field_def_ai_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> dg_read_field_def_ai_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +dg_read_field_def_ai_event(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) -> Key = X bsl N + Acc, case Key of - 8 -> d_field_ai_event_event_type(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); - 18 -> d_field_ai_event_params(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 10 -> d_field_ai_event_service_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 16 -> d_field_ai_event_event_type(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); + 26 -> d_field_ai_event_params(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData); _ -> case Key band 7 of - 0 -> skip_varint_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 1 -> skip_64_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 2 -> skip_length_delimited_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 3 -> skip_group_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); - 5 -> skip_32_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + 0 -> skip_varint_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 1 -> skip_64_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 2 -> skip_length_delimited_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 3 -> skip_group_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData); + 5 -> skip_32_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData) end end; -dg_read_field_def_ai_event(<<>>, 0, 0, _, F@_1, F@_2, _) -> #ai_event{event_type = F@_1, params = F@_2}. +dg_read_field_def_ai_event(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #ai_event{service_id = F@_1, event_type = F@_2, params = F@_3}. -d_field_ai_event_event_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ai_event_event_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_ai_event_event_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> - {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, - dfp_read_field_def_ai_event(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). - -d_field_ai_event_params(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ai_event_params(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -d_field_ai_event_params(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> +d_field_ai_event_service_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_ai_event_service_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_ai_event_service_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_ai_event(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + dfp_read_field_def_ai_event(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData). -skip_varint_ai_event(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); -skip_varint_ai_event(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +d_field_ai_event_event_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_ai_event_event_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_ai_event_event_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_ai_event(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData). -skip_length_delimited_ai_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_ai_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); -skip_length_delimited_ai_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> +d_field_ai_event_params(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_ai_event_params(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +d_field_ai_event_params(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ai_event(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData). + +skip_varint_ai_event(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> skip_varint_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData); +skip_varint_ai_event(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). + +skip_length_delimited_ai_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> skip_length_delimited_ai_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData); +skip_length_delimited_ai_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) -> Length = X bsl N + Acc, <<_:Length/binary, Rest2/binary>> = Rest, - dfp_read_field_def_ai_event(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + dfp_read_field_def_ai_event(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData). -skip_group_ai_event(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> +skip_group_ai_event(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) -> {_, Rest} = read_group(Bin, FNum), - dfp_read_field_def_ai_event(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + dfp_read_field_def_ai_event(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData). -skip_32_ai_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +skip_32_ai_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). -skip_64_ai_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +skip_64_ai_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData). 'decode_msg_map'(Bin, TrUserData) -> 'dfp_read_field_def_map'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). @@ -2104,19 +2138,19 @@ merge_msg_service_metrics(#service_metrics{service_id = PFservice_id, metrics = end}. -compile({nowarn_unused_function,merge_msg_data/3}). -merge_msg_data(#data{device_uuid = PFdevice_uuid, service_name = PFservice_name, at = PFat, tags = PFtags, fields = PFfields}, #data{device_uuid = NFdevice_uuid, service_name = NFservice_name, at = NFat, tags = NFtags, fields = NFfields}, - TrUserData) -> - #data{device_uuid = +merge_msg_data(#data{service_id = PFservice_id, device_uuid = PFdevice_uuid, timestamp = PFtimestamp, tags = PFtags, fields = PFfields}, + #data{service_id = NFservice_id, device_uuid = NFdevice_uuid, timestamp = NFtimestamp, tags = NFtags, fields = NFfields}, TrUserData) -> + #data{service_id = + if NFservice_id =:= undefined -> PFservice_id; + true -> NFservice_id + end, + device_uuid = if NFdevice_uuid =:= undefined -> PFdevice_uuid; true -> NFdevice_uuid end, - service_name = - if NFservice_name =:= undefined -> PFservice_name; - true -> NFservice_name - end, - at = - if NFat =:= undefined -> PFat; - true -> NFat + timestamp = + if NFtimestamp =:= undefined -> PFtimestamp; + true -> NFtimestamp end, tags = if PFtags /= undefined, NFtags /= undefined -> 'tr_merge_data.tags'(PFtags, NFtags, TrUserData); @@ -2234,8 +2268,12 @@ merge_msg_feedback_phase(#feedback_phase{task_id = PFtask_id, timestamp = PFtime end}. -compile({nowarn_unused_function,merge_msg_event/3}). -merge_msg_event(#event{event_type = PFevent_type, params = PFparams}, #event{event_type = NFevent_type, params = NFparams}, _) -> - #event{event_type = +merge_msg_event(#event{service_id = PFservice_id, event_type = PFevent_type, params = PFparams}, #event{service_id = NFservice_id, event_type = NFevent_type, params = NFparams}, _) -> + #event{service_id = + if NFservice_id =:= undefined -> PFservice_id; + true -> NFservice_id + end, + event_type = if NFevent_type =:= undefined -> PFevent_type; true -> NFevent_type end, @@ -2245,8 +2283,12 @@ merge_msg_event(#event{event_type = PFevent_type, params = PFparams}, #event{eve end}. -compile({nowarn_unused_function,merge_msg_ai_event/3}). -merge_msg_ai_event(#ai_event{event_type = PFevent_type, params = PFparams}, #ai_event{event_type = NFevent_type, params = NFparams}, _) -> - #ai_event{event_type = +merge_msg_ai_event(#ai_event{service_id = PFservice_id, event_type = PFevent_type, params = PFparams}, #ai_event{service_id = NFservice_id, event_type = NFevent_type, params = NFparams}, _) -> + #ai_event{service_id = + if NFservice_id =:= undefined -> PFservice_id; + true -> NFservice_id + end, + event_type = if NFevent_type =:= undefined -> PFevent_type; true -> NFevent_type end, @@ -2397,19 +2439,19 @@ v_msg_service_metrics(X, Path, _TrUserData) -> mk_type_error({expected_msg, serv -compile({nowarn_unused_function,v_msg_data/3}). -dialyzer({nowarn_function,v_msg_data/3}). -v_msg_data(#data{device_uuid = F1, service_name = F2, at = F3, tags = F4, fields = F5}, Path, TrUserData) -> +v_msg_data(#data{service_id = F1, device_uuid = F2, timestamp = F3, tags = F4, fields = F5}, Path, TrUserData) -> if F1 == undefined -> ok; - true -> v_type_string(F1, [device_uuid | Path], TrUserData) + true -> v_type_string(F1, [service_id | Path], TrUserData) end, if F2 == undefined -> ok; - true -> v_type_string(F2, [service_name | Path], TrUserData) + true -> v_type_string(F2, [device_uuid | Path], TrUserData) end, if F3 == undefined -> ok; - true -> v_type_int32(F3, [at | Path], TrUserData) + true -> v_type_int32(F3, [timestamp | Path], TrUserData) end, 'v_map'(F4, [tags | Path], TrUserData), if F5 == undefined -> ok; - true -> v_type_bytes(F5, [fields | Path], TrUserData) + true -> v_type_string(F5, [fields | Path], TrUserData) end, ok; v_msg_data(X, Path, _TrUserData) -> mk_type_error({expected_msg, data}, X, Path). @@ -2506,24 +2548,30 @@ v_msg_feedback_phase(X, Path, _TrUserData) -> mk_type_error({expected_msg, feedb -compile({nowarn_unused_function,v_msg_event/3}). -dialyzer({nowarn_function,v_msg_event/3}). -v_msg_event(#event{event_type = F1, params = F2}, Path, TrUserData) -> +v_msg_event(#event{service_id = F1, event_type = F2, params = F3}, Path, TrUserData) -> if F1 == undefined -> ok; - true -> v_type_uint32(F1, [event_type | Path], TrUserData) + true -> v_type_string(F1, [service_id | Path], TrUserData) end, if F2 == undefined -> ok; - true -> v_type_string(F2, [params | Path], TrUserData) + true -> v_type_uint32(F2, [event_type | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_string(F3, [params | Path], TrUserData) end, ok; v_msg_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, event}, X, Path). -compile({nowarn_unused_function,v_msg_ai_event/3}). -dialyzer({nowarn_function,v_msg_ai_event/3}). -v_msg_ai_event(#ai_event{event_type = F1, params = F2}, Path, TrUserData) -> +v_msg_ai_event(#ai_event{service_id = F1, event_type = F2, params = F3}, Path, TrUserData) -> if F1 == undefined -> ok; - true -> v_type_uint32(F1, [event_type | Path], TrUserData) + true -> v_type_string(F1, [service_id | Path], TrUserData) end, if F2 == undefined -> ok; - true -> v_type_string(F2, [params | Path], TrUserData) + true -> v_type_uint32(F2, [event_type | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_string(F3, [params | Path], TrUserData) end, ok; v_msg_ai_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, ai_event}, X, Path). @@ -2568,12 +2616,6 @@ v_type_string(S, Path, _TrUserData) when is_list(S); is_binary(S) -> end; v_type_string(X, Path, _TrUserData) -> mk_type_error(bad_unicode_string, X, Path). --compile({nowarn_unused_function,v_type_bytes/3}). --dialyzer({nowarn_function,v_type_bytes/3}). -v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> ok; -v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> ok; -v_type_bytes(X, Path, _TrUserData) -> mk_type_error(bad_binary_value, X, Path). - -compile({nowarn_unused_function,'v_map'/3}). -dialyzer({nowarn_function,'v_map'/3}). 'v_map'(KVs, Path, TrUserData) when is_list(KVs) -> @@ -2685,11 +2727,11 @@ get_msg_defs() -> {{msg, service_arguments}, [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = args, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]}, {{msg, service_metrics}, [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = metrics, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]}, {{msg, data}, - [#field{name = device_uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, - #field{name = service_name, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, - #field{name = at, fnum = 3, rnum = 4, type = int32, occurrence = optional, opts = []}, + [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = device_uuid, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = timestamp, fnum = 3, rnum = 4, type = int32, occurrence = optional, opts = []}, #field{name = tags, fnum = 4, rnum = 5, type = {map, string, string}, occurrence = repeated, opts = []}, - #field{name = fields, fnum = 5, rnum = 6, type = bytes, occurrence = optional, opts = []}]}, + #field{name = fields, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}]}, {{msg, ping}, [#field{name = adcode, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = boot_time, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, @@ -2715,8 +2757,14 @@ get_msg_defs() -> #field{name = phase, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}, #field{name = code, fnum = 4, rnum = 5, type = uint32, occurrence = optional, opts = []}, #field{name = message, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}]}, - {{msg, event}, [#field{name = event_type, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]}, - {{msg, ai_event}, [#field{name = event_type, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]}]. + {{msg, event}, + [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = event_type, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, + #field{name = params, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}]}, + {{msg, ai_event}, + [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = event_type, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, + #field{name = params, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}]}]. get_msg_names() -> [auth_request, auth_reply, activate_push, deploy, efka_response, topic_message, service_arguments, service_metrics, data, ping, service_inform, feedback_phase, event, ai_event]. @@ -2765,11 +2813,11 @@ find_msg_def(topic_message) -> [#field{name = topic, fnum = 1, rnum = 2, type = find_msg_def(service_arguments) -> [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = args, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]; find_msg_def(service_metrics) -> [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = metrics, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]; find_msg_def(data) -> - [#field{name = device_uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, - #field{name = service_name, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, - #field{name = at, fnum = 3, rnum = 4, type = int32, occurrence = optional, opts = []}, + [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = device_uuid, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = timestamp, fnum = 3, rnum = 4, type = int32, occurrence = optional, opts = []}, #field{name = tags, fnum = 4, rnum = 5, type = {map, string, string}, occurrence = repeated, opts = []}, - #field{name = fields, fnum = 5, rnum = 6, type = bytes, occurrence = optional, opts = []}]; + #field{name = fields, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}]; find_msg_def(ping) -> [#field{name = adcode, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = boot_time, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, @@ -2795,8 +2843,14 @@ find_msg_def(feedback_phase) -> #field{name = phase, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}, #field{name = code, fnum = 4, rnum = 5, type = uint32, occurrence = optional, opts = []}, #field{name = message, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}]; -find_msg_def(event) -> [#field{name = event_type, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]; -find_msg_def(ai_event) -> [#field{name = event_type, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]; +find_msg_def(event) -> + [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = event_type, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, + #field{name = params, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}]; +find_msg_def(ai_event) -> + [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = event_type, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, + #field{name = params, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}]; find_msg_def(_) -> error. diff --git a/message_pb.proto b/message_pb.proto index a88ad12..355ba7a 100644 --- a/message_pb.proto +++ b/message_pb.proto @@ -55,12 +55,12 @@ message ServiceMetrics { // 数据传输 message Data { - string device_uuid = 1; - string service_name = 2; - int32 at = 3; + string service_id = 1; + string device_uuid = 2; + int32 timestamp = 3; map tags = 4; // 为了数据的灵活性,存储类型无关的二进制流; 兼容更多的业务逻辑情况 - bytes fields = 5; + string fields = 5; } //#{<<"adcode">> => 0,<<"boot_time">> => 18256077,<<"city">> => <<>>, @@ -114,11 +114,13 @@ message FeedbackPhase { } message Event { - uint32 event_type = 1; - string params = 2; + string service_id = 1; + uint32 event_type = 2; + string params = 3; } message AIEvent { - uint32 event_type = 1; - string params = 2; + string service_id = 1; + uint32 event_type = 2; + string params = 3; } \ No newline at end of file