This commit is contained in:
anlicheng 2025-05-06 18:12:43 +08:00
parent ffd786b96f
commit 8e02d0714c
10 changed files with 348 additions and 302 deletions

View File

@ -30,6 +30,8 @@
%% ai识别的事件上报 %% ai识别的事件上报
-define(METHOD_AI_EVENT, 16#08). -define(METHOD_AI_EVENT, 16#08).
-define(METHOD_PHASE, 16#09).
%% %%
-define(METHOD_DEPLOY, 16#10). -define(METHOD_DEPLOY, 16#10).
-define(METHOD_ARGUMENTS, 16#11). -define(METHOD_ARGUMENTS, 16#11).

View File

@ -21,13 +21,10 @@
}). }).
%% %%
-record(micro_data, { -record(micro_cache, {
id = 0 :: integer(), id = 0 :: integer(),
device_uuid :: binary(), method :: integer(),
service_name :: binary(), data :: binary()
at :: integer(),
tags :: term(),
fields :: binary()
}). }).
%% id生成器 %% id生成器

View File

@ -80,11 +80,11 @@
-ifndef('DATA_PB_H'). -ifndef('DATA_PB_H').
-define('DATA_PB_H', true). -define('DATA_PB_H', true).
-record(data, -record(data,
{device_uuid = <<>> :: unicode:chardata() | undefined, % = 1, optional {service_id = <<>> :: unicode:chardata() | undefined, % = 1, optional
service_name = <<>> :: unicode:chardata() | undefined, % = 2, optional device_uuid = <<>> :: unicode:chardata() | undefined, % = 2, optional
at = 0 :: integer() | undefined, % = 3, optional, 32 bits timestamp = 0 :: integer() | undefined, % = 3, optional, 32 bits
tags = [] :: [{unicode:chardata(), unicode:chardata()}] | undefined, % = 4 tags = [] :: [{unicode:chardata(), unicode:chardata()}] | undefined, % = 4
fields = <<>> :: iodata() | undefined % = 5, optional fields = <<>> :: unicode:chardata() | undefined % = 5, optional
}). }).
-endif. -endif.
@ -131,16 +131,18 @@
-ifndef('EVENT_PB_H'). -ifndef('EVENT_PB_H').
-define('EVENT_PB_H', true). -define('EVENT_PB_H', true).
-record(event, -record(event,
{event_type = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits {service_id = <<>> :: unicode:chardata() | undefined, % = 1, optional
params = <<>> :: unicode:chardata() | undefined % = 2, optional event_type = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits
params = <<>> :: unicode:chardata() | undefined % = 3, optional
}). }).
-endif. -endif.
-ifndef('AI_EVENT_PB_H'). -ifndef('AI_EVENT_PB_H').
-define('AI_EVENT_PB_H', true). -define('AI_EVENT_PB_H', true).
-record(ai_event, -record(ai_event,
{event_type = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits {service_id = <<>> :: unicode:chardata() | undefined, % = 1, optional
params = <<>> :: unicode:chardata() | undefined % = 2, optional event_type = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits
params = <<>> :: unicode:chardata() | undefined % = 3, optional
}). }).
-endif. -endif.

View File

@ -16,7 +16,7 @@
%% API %% API
-export([start_link/0]). -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 %% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -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) -> 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, {data, ServiceName, DeviceUUID, At, Tags, 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(AdCode, BootTime, Province, City, EfkaVersion, KernelArch, Ips, CpuCore, CpuLoad, CpuTemperature, Disk, Memory, Interfaces) ->
Ping = #ping{ Ping = #ping{
@ -63,22 +63,14 @@ ping(AdCode, BootTime, Province, City, EfkaVersion, KernelArch, Ips, CpuCore, Cp
}, },
gen_server:cast(?SERVER, {ping, Ping}). gen_server:cast(?SERVER, {ping, Ping}).
feedback_phase(Phase) -> feedback_phase(TaskId, Timestamp, Phase, Code, Message) ->
ok. gen_server:cast(?SERVER, {feedback_phase, TaskId, Timestamp, Phase, Code, Message}).
event(EventType, Params) when is_integer(EventType), is_binary(Params) -> event(ServiceId, EventType, Params) when is_binary(ServiceId), is_integer(EventType), is_binary(Params) ->
Event = #event{ gen_server:cast(?SERVER, {event, ServiceId, EventType, Params}).
event_type = EventType,
params = Params
},
gen_server:cast(?SERVER, {event, Event}).
ai_event(EventType, Params) when is_integer(EventType), is_binary(Params) -> ai_event(ServiceId, EventType, Params) when is_binary(ServiceId), is_integer(EventType), is_binary(Params) ->
AIEvent = #ai_event{ gen_server:cast(?SERVER, {ai_event, ServiceId, EventType, Params}).
event_type = EventType,
params = Params
},
gen_server:cast(?SERVER, {event, AIEvent}).
%% @doc Spawns the server and registers the local name (unique) %% @doc Spawns the server and registers the local name (unique)
-spec(start_link() -> -spec(start_link() ->
@ -119,16 +111,91 @@ handle_call(_Request, _From, State = #state{}) ->
{noreply, NewState :: #state{}} | {noreply, NewState :: #state{}} |
{noreply, NewState :: #state{}, timeout() | hibernate} | {noreply, NewState :: #state{}, timeout() | hibernate} |
{stop, Reason :: term(), NewState :: #state{}}). {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, device_uuid = DeviceUUID,
service_name = ServiceName, timestamp = Timestamp,
at = At,
tags = Tags, tags = Tags,
fields = Fields 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}; {noreply, State};
@ -166,6 +233,14 @@ handle_info({auth_reply, {ok, ReplyBin}}, State = #state{status = ?STATE_AUTH, t
case Code of case Code of
0 -> 0 ->
lager:debug("[efka_agent] auth failed, message: ~p, repository_url: ~p", [Message, RepositoryUrl]), 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}}; {noreply, State#state{status = ?STATE_ACTIVATED}};
1 -> 1 ->
%% agent不能推送数据给云端服务器agent %% agent不能推送数据给云端服务器agent
@ -214,7 +289,7 @@ handle_info({server_push_message, PacketId, <<?METHOD_ARGUMENTS:8, ArgumentsBin/
undefined -> undefined ->
Reply = #efka_response { Reply = #efka_response {
code = 0, code = 0,
message = <<"服务未启动"/utf8>> message = <<"service not run">>
}, },
efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply)); efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply));
ServicePid when is_pid(ServicePid) -> ServicePid when is_pid(ServicePid) ->
@ -294,32 +369,6 @@ handle_info({server_push_message, PacketId, <<16:8, Directive/binary>>}, State =
{noreply, 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进程退出 %% transport进程退出
handle_info({'EXIT', TransportPid, Reason}, State = #state{transport_pid = TransportPid}) -> handle_info({'EXIT', TransportPid, Reason}, State = #state{transport_pid = TransportPid}) ->
efka_logger:debug("[efka_agent] transport pid: ~p, exit with reason: ~p", [TransportPid, Reason]), 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 %%% Internal functions
%%%=================================================================== %%%===================================================================
fetch_next() ->
self() ! fetch_next.

View File

@ -1,64 +0,0 @@
%%%-------------------------------------------------------------------
%%% @author anlicheng
%%% @copyright (C) 2025, <COMPANY>
%%% @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()
}),
<<?PACKET_REQUEST, PacketId:32, ?METHOD_AUTH, RequestBin/binary>>.

View File

@ -21,7 +21,7 @@
-export([start_link/2]). -export([start_link/2]).
-export([get_name/1, get_pid/1, start_service/1, stop_service/1, attach_channel/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([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 %% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -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) -> request_metrics(Pid) when is_pid(Pid) ->
gen_server:call(Pid, request_metrics). gen_server:call(Pid, request_metrics).
metric_data(Pid, Fields, Tags) -> metric_data(Pid, DeviceUUID, Tags, Fields) ->
ok. gen_server:cast(Pid, {DeviceUUID, Tags, Fields}).
send_log(Pid, Log) ->
ok.
send_event(Pid, EventType, Params) -> send_event(Pid, EventType, Params) ->
ok. gen_server:cast(Pid, {send_event, EventType, Params}).
send_ai_event(Pid, 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()}. -spec attach_channel(pid(), pid()) -> ok | {error, Reason :: binary()}.
attach_channel(Pid, ChannelPid) when is_pid(Pid), is_pid(ChannelPid) -> 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{}} |
{noreply, NewState :: #state{}, timeout() | hibernate} | {noreply, NewState :: #state{}, timeout() | hibernate} |
{stop, Reason :: term(), NewState :: #state{}}). {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{}) -> handle_cast(_Request, State = #state{}) ->
{noreply, State}. {noreply, State}.

View File

@ -28,8 +28,8 @@ start_link() ->
init([]) -> init([]) ->
SupFlags = #{strategy => simple_one_for_one, intensity => 0, period => 1}, SupFlags = #{strategy => simple_one_for_one, intensity => 0, period => 1},
ChildSpec = #{ ChildSpec = #{
id => tcp_channel, id => efka_tcp_channel,
start => {tcp_channel, start_link, []}, start => {efka_tcp_channel, start_link, []},
restart => temporary, restart => temporary,
type => worker type => worker
}, },

View File

@ -6,7 +6,7 @@
%%% @end %%% @end
%%% Created : 04. 7 2023 12:31 %%% Created : 04. 7 2023 12:31
%%%------------------------------------------------------------------- %%%-------------------------------------------------------------------
-module(micro_data_model). -module(micro_cache_model).
-author("aresei"). -author("aresei").
-include("efka_tables.hrl"). -include("efka_tables.hrl").
-include_lib("stdlib/include/qlc.hrl"). -include_lib("stdlib/include/qlc.hrl").
@ -15,21 +15,23 @@
%% API %% API
-export([create_table/0]). -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() -> create_table() ->
%% id生成器 %% id生成器
mnesia:create_table(micro_data, [ mnesia:create_table(micro_cache, [
{attributes, record_info(fields, micro_data)}, {attributes, record_info(fields, micro_cache)},
{record_name, micro_data}, {record_name, micro_cache},
{disc_copies, [node()]}, {disc_copies, [node()]},
{type, ordered_set} {type, ordered_set}
]). ]).
-spec insert(MicroData0 :: #micro_data{}) -> ok | {error, Reason :: any()}. next_id() ->
insert(MicroData0 = #micro_data{}) -> id_generator_model:next_id(?TAB).
MicroData = MicroData0#micro_data{id = id_generator_model:next_id(?TAB)},
case mnesia:transaction(fun() -> mnesia:write(?TAB, MicroData, write) end) of -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} -> {'atomic', ok} ->
ok; ok;
{'aborted', Reason} -> {'aborted', Reason} ->
@ -53,8 +55,8 @@ delete(Id) when is_integer(Id) ->
{error, Reason} {error, Reason}
end. end.
-spec get_all_data() -> [#micro_data{}]. -spec get_all_cache() -> [#micro_cache{}].
get_all_data() -> get_all_cache() ->
Fun = fun() -> Fun = fun() ->
Q = qlc:q([E || E <- mnesia:table(?TAB)]), Q = qlc:q([E || E <- mnesia:table(?TAB)]),
qlc:e(Q) qlc:e(Q)

View File

@ -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(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; B1 = if F1 == undefined -> Bin;
true -> true ->
begin begin
@ -418,9 +418,9 @@ encode_msg_data(#data{device_uuid = F1, service_name = F2, at = F3, tags = F4, f
true -> true ->
begin begin
TrF5 = id(F5, TrUserData), TrF5 = id(F5, TrUserData),
case iolist_size(TrF5) of case is_empty_string(TrF5) of
0 -> B4; true -> B4;
_ -> e_type_bytes(TrF5, <<B4/binary, 42>>, TrUserData) false -> e_type_string(TrF5, <<B4/binary, 42>>, TrUserData)
end end
end 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(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; B1 = if F1 == undefined -> Bin;
true -> true ->
begin begin
TrF1 = id(F1, TrUserData), TrF1 = id(F1, TrUserData),
if TrF1 =:= 0 -> Bin; case is_empty_string(TrF1) of
true -> e_varint(TrF1, <<Bin/binary, 8>>, TrUserData) true -> Bin;
false -> e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)
end end
end 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, <<B1/binary, 16>>, TrUserData)
end
end
end,
if F3 == undefined -> B2;
true -> true ->
begin begin
TrF2 = id(F2, TrUserData), TrF3 = id(F3, TrUserData),
case is_empty_string(TrF2) of case is_empty_string(TrF3) of
true -> B1; true -> B2;
false -> e_type_string(TrF2, <<B1/binary, 18>>, TrUserData) false -> e_type_string(TrF3, <<B2/binary, 26>>, TrUserData)
end end
end 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(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; B1 = if F1 == undefined -> Bin;
true -> true ->
begin begin
TrF1 = id(F1, TrUserData), TrF1 = id(F1, TrUserData),
if TrF1 =:= 0 -> Bin; case is_empty_string(TrF1) of
true -> e_varint(TrF1, <<Bin/binary, 8>>, TrUserData) true -> Bin;
false -> e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)
end end
end 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, <<B1/binary, 16>>, TrUserData)
end
end
end,
if F3 == undefined -> B2;
true -> true ->
begin begin
TrF2 = id(F2, TrUserData), TrF3 = id(F3, TrUserData),
case is_empty_string(TrF2) of case is_empty_string(TrF3) of
true -> B1; true -> B2;
false -> e_type_string(TrF2, <<B1/binary, 18>>, TrUserData) false -> e_type_string(TrF3, <<B2/binary, 26>>, TrUserData)
end end
end 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). 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(<<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_service_name(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_at(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(<<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(<<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). 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(<<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) -> 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, Key = X bsl N + Acc,
case Key of case Key of
10 -> d_field_data_device_uuid(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_service_name(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_at(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); 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); 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) 5 -> skip_32_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData)
end end
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_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_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(<<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, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, {NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = 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). 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_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_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(<<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, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, {NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = 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). 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_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_at(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, 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 <<Res:32/signed-native>> = <<(X bsl N + Acc):32/unsigned-native>>, id(Res, TrUserData) end, Rest}, {NewFValue, RestF} = {begin <<Res:32/signed-native>> = <<(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). 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). 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(<<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(<<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(<<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(<<>>, 0, 0, _, F@_1, F@_2, _) -> #event{event_type = F@_1, params = F@_2}; 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(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(<<>>, 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(<<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, 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, Key = X bsl N + Acc,
case Key of case Key of
8 -> d_field_event_event_type(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);
18 -> d_field_event_params(Rest, 0, 0, 0, F@_1, F@_2, 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 case Key band 7 of
0 -> skip_varint_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, 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, 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, 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, TrUserData) 5 -> skip_32_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData)
end end
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_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_event_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> d_field_event_service_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, 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) ->
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, {NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = 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); 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);
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(<<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); 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);
skip_length_delimited_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, 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, <<Bytes:Len/binary, Rest2/binary>> = 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 = X bsl N + Acc,
<<_:Length/binary, Rest2/binary>> = Rest, <<_: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), {_, 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(<<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(<<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(<<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(<<>>, 0, 0, _, F@_1, F@_2, _) -> #ai_event{event_type = F@_1, params = F@_2}; 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(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(<<>>, 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(<<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, 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, Key = X bsl N + Acc,
case Key of case Key of
8 -> d_field_ai_event_event_type(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);
18 -> d_field_ai_event_params(Rest, 0, 0, 0, F@_1, F@_2, 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 case Key band 7 of
0 -> skip_varint_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, 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, 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, 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, TrUserData) 5 -> skip_32_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData)
end end
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_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_event_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> d_field_ai_event_service_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, 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) ->
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, {NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = 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); 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);
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(<<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); 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);
skip_length_delimited_ai_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, 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, <<Bytes:Len/binary, Rest2/binary>> = 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 = X bsl N + Acc,
<<_:Length/binary, Rest2/binary>> = Rest, <<_: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), {_, 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<string,string>'(Bin, TrUserData) -> 'dfp_read_field_def_map<string,string>'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). 'decode_msg_map<string,string>'(Bin, TrUserData) -> 'dfp_read_field_def_map<string,string>'(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}. end}.
-compile({nowarn_unused_function,merge_msg_data/3}). -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}, merge_msg_data(#data{service_id = PFservice_id, device_uuid = PFdevice_uuid, timestamp = PFtimestamp, tags = PFtags, fields = PFfields},
TrUserData) -> #data{service_id = NFservice_id, device_uuid = NFdevice_uuid, timestamp = NFtimestamp, tags = NFtags, fields = NFfields}, TrUserData) ->
#data{device_uuid = #data{service_id =
if NFservice_id =:= undefined -> PFservice_id;
true -> NFservice_id
end,
device_uuid =
if NFdevice_uuid =:= undefined -> PFdevice_uuid; if NFdevice_uuid =:= undefined -> PFdevice_uuid;
true -> NFdevice_uuid true -> NFdevice_uuid
end, end,
service_name = timestamp =
if NFservice_name =:= undefined -> PFservice_name; if NFtimestamp =:= undefined -> PFtimestamp;
true -> NFservice_name true -> NFtimestamp
end,
at =
if NFat =:= undefined -> PFat;
true -> NFat
end, end,
tags = tags =
if PFtags /= undefined, NFtags /= undefined -> 'tr_merge_data.tags'(PFtags, NFtags, TrUserData); 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}. end}.
-compile({nowarn_unused_function,merge_msg_event/3}). -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}, _) -> 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{event_type = #event{service_id =
if NFservice_id =:= undefined -> PFservice_id;
true -> NFservice_id
end,
event_type =
if NFevent_type =:= undefined -> PFevent_type; if NFevent_type =:= undefined -> PFevent_type;
true -> NFevent_type true -> NFevent_type
end, end,
@ -2245,8 +2283,12 @@ merge_msg_event(#event{event_type = PFevent_type, params = PFparams}, #event{eve
end}. end}.
-compile({nowarn_unused_function,merge_msg_ai_event/3}). -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}, _) -> 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{event_type = #ai_event{service_id =
if NFservice_id =:= undefined -> PFservice_id;
true -> NFservice_id
end,
event_type =
if NFevent_type =:= undefined -> PFevent_type; if NFevent_type =:= undefined -> PFevent_type;
true -> NFevent_type true -> NFevent_type
end, 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}). -compile({nowarn_unused_function,v_msg_data/3}).
-dialyzer({nowarn_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; if F1 == undefined -> ok;
true -> v_type_string(F1, [device_uuid | Path], TrUserData) true -> v_type_string(F1, [service_id | Path], TrUserData)
end, end,
if F2 == undefined -> ok; if F2 == undefined -> ok;
true -> v_type_string(F2, [service_name | Path], TrUserData) true -> v_type_string(F2, [device_uuid | Path], TrUserData)
end, end,
if F3 == undefined -> ok; if F3 == undefined -> ok;
true -> v_type_int32(F3, [at | Path], TrUserData) true -> v_type_int32(F3, [timestamp | Path], TrUserData)
end, end,
'v_map<string,string>'(F4, [tags | Path], TrUserData), 'v_map<string,string>'(F4, [tags | Path], TrUserData),
if F5 == undefined -> ok; if F5 == undefined -> ok;
true -> v_type_bytes(F5, [fields | Path], TrUserData) true -> v_type_string(F5, [fields | Path], TrUserData)
end, end,
ok; ok;
v_msg_data(X, Path, _TrUserData) -> mk_type_error({expected_msg, data}, X, Path). 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}). -compile({nowarn_unused_function,v_msg_event/3}).
-dialyzer({nowarn_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; if F1 == undefined -> ok;
true -> v_type_uint32(F1, [event_type | Path], TrUserData) true -> v_type_string(F1, [service_id | Path], TrUserData)
end, end,
if F2 == undefined -> ok; 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, end,
ok; ok;
v_msg_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, event}, X, Path). v_msg_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, event}, X, Path).
-compile({nowarn_unused_function,v_msg_ai_event/3}). -compile({nowarn_unused_function,v_msg_ai_event/3}).
-dialyzer({nowarn_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; if F1 == undefined -> ok;
true -> v_type_uint32(F1, [event_type | Path], TrUserData) true -> v_type_string(F1, [service_id | Path], TrUserData)
end, end,
if F2 == undefined -> ok; 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, end,
ok; ok;
v_msg_ai_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, ai_event}, X, Path). 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; end;
v_type_string(X, Path, _TrUserData) -> mk_type_error(bad_unicode_string, X, Path). 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<string,string>'/3}). -compile({nowarn_unused_function,'v_map<string,string>'/3}).
-dialyzer({nowarn_function,'v_map<string,string>'/3}). -dialyzer({nowarn_function,'v_map<string,string>'/3}).
'v_map<string,string>'(KVs, Path, TrUserData) when is_list(KVs) -> 'v_map<string,string>'(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_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, 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}, {{msg, data},
[#field{name = device_uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []},
#field{name = service_name, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, #field{name = device_uuid, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []},
#field{name = at, fnum = 3, rnum = 4, type = int32, 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 = 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}, {{msg, ping},
[#field{name = adcode, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, [#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 = []}, #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 = phase, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []},
#field{name = code, fnum = 4, rnum = 5, type = uint32, 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 = []}]}, #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, event},
{{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 = []}]}]. [#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]. 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_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(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) -> find_msg_def(data) ->
[#field{name = device_uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, [#field{name = service_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []},
#field{name = service_name, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, #field{name = device_uuid, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []},
#field{name = at, fnum = 3, rnum = 4, type = int32, 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 = 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) -> find_msg_def(ping) ->
[#field{name = adcode, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, [#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 = []}, #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 = phase, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []},
#field{name = code, fnum = 4, rnum = 5, type = uint32, 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 = []}]; #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(event) ->
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 = []}]; [#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. find_msg_def(_) -> error.

View File

@ -55,12 +55,12 @@ message ServiceMetrics {
// //
message Data { message Data {
string device_uuid = 1; string service_id = 1;
string service_name = 2; string device_uuid = 2;
int32 at = 3; int32 timestamp = 3;
map<string, string> tags = 4; map<string, string> tags = 4;
// ; // ;
bytes fields = 5; string fields = 5;
} }
//#{<<"adcode">> => 0,<<"boot_time">> => 18256077,<<"city">> => <<>>, //#{<<"adcode">> => 0,<<"boot_time">> => 18256077,<<"city">> => <<>>,
@ -114,11 +114,13 @@ message FeedbackPhase {
} }
message Event { message Event {
uint32 event_type = 1; string service_id = 1;
string params = 2; uint32 event_type = 2;
string params = 3;
} }
message AIEvent { message AIEvent {
uint32 event_type = 1; string service_id = 1;
string params = 2; uint32 event_type = 2;
string params = 3;
} }