From 247877a98573388e9dda5b563c19ea1d2ddea2a0 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 6 May 2025 16:18:32 +0800 Subject: [PATCH] fix --- apps/efka/include/efka.hrl | 3 +- apps/efka/include/message_pb.hrl | 16 ++ apps/efka/src/efka_agent.erl | 63 +++++++- apps/efka/src/efka_micro_service.erl | 7 + apps/efka/src/proto/message_pb.erl | 232 ++++++++++++++++++++++++++- message_pb.proto | 10 ++ 6 files changed, 320 insertions(+), 11 deletions(-) diff --git a/apps/efka/include/efka.hrl b/apps/efka/include/efka.hrl index 91f1d76..59f73f5 100644 --- a/apps/efka/include/efka.hrl +++ b/apps/efka/include/efka.hrl @@ -25,7 +25,6 @@ -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识别的事件上报 @@ -33,6 +32,8 @@ %% 部署微服务 -define(METHOD_DEPLOY, 16#10). +-define(METHOD_ARGUMENTS, 16#11). +-define(METHOD_METRICS, 16#12). %% 事件类型 -define(EVENT_DEVICE, 16#01). diff --git a/apps/efka/include/message_pb.hrl b/apps/efka/include/message_pb.hrl index 406c027..4d3bbac 100644 --- a/apps/efka/include/message_pb.hrl +++ b/apps/efka/include/message_pb.hrl @@ -68,6 +68,14 @@ }). -endif. +-ifndef('SERVICE_ARGUMENTS_REPLY_PB_H'). +-define('SERVICE_ARGUMENTS_REPLY_PB_H', true). +-record(service_arguments_reply, + {is_ok = false :: boolean() | 0 | 1 | undefined, % = 1, optional + message = <<>> :: unicode:chardata() | undefined % = 2, optional + }). +-endif. + -ifndef('SERVICE_METRICS_PB_H'). -define('SERVICE_METRICS_PB_H', true). -record(service_metrics, @@ -76,6 +84,14 @@ }). -endif. +-ifndef('SERVICE_METRICS_REPLY_PB_H'). +-define('SERVICE_METRICS_REPLY_PB_H', true). +-record(service_metrics_reply, + {is_ok = false :: boolean() | 0 | 1 | undefined, % = 1, optional + message = <<>> :: unicode:chardata() | undefined % = 2, optional + }). +-endif. + -ifndef('DATA_PB_H'). -define('DATA_PB_H', true). -record(data, diff --git a/apps/efka/src/efka_agent.erl b/apps/efka/src/efka_agent.erl index 2f80ca6..287a775 100644 --- a/apps/efka/src/efka_agent.erl +++ b/apps/efka/src/efka_agent.erl @@ -66,9 +66,6 @@ ping(AdCode, BootTime, Province, City, EfkaVersion, KernelArch, Ips, CpuCore, Cp feedback_phase(Phase) -> ok. -feedback_result() -> - ok. - event(EventType, Params) when is_integer(EventType), is_binary(Params) -> Event = #event{ event_type = EventType, @@ -207,7 +204,65 @@ handle_info({server_push_message, PacketId, <>}, State = #state{transport_pid = TransportPid}) -> + #service_arguments{service_id = ServiceId, args = Args} = message_pb:decode_msg(ArgumentsBin, service_arguments), + + case efka_micro_service:get_pid(ServiceId) of + undefined -> + Reply = #service_arguments_reply{ + is_ok = false, + message = <<"服务未启动"/utf8>> + }, + efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply)); + {ok, ServicePid} -> + case efka_micro_service:push_arguments(ServicePid, Args) of + ok -> + Reply = #service_arguments_reply{ + is_ok = true, + message = <<"">> + }, + efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply)); + {error, Reason} -> + Reply = #service_arguments_reply{ + is_ok = false, + message = Reason + }, + efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply)) + end + end, + {noreply, State}; + +%% 采集项目 +handle_info({server_push_message, PacketId, <>}, State = #state{transport_pid = TransportPid}) -> + #service_metrics{service_id = ServiceId, metrics = Metrics} = message_pb:decode_msg(MetricsBin, service_metrics), + + case efka_micro_service:get_pid(ServiceId) of + undefined -> + Reply = #service_metrics_reply{ + is_ok = false, + message = <<"服务未启动"/utf8>> + }, + efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply)); + {ok, ServicePid} -> + case efka_micro_service:push_metrics(ServicePid, Metrics) of + ok -> + Reply = #service_metrics_reply { + is_ok = true, + message = <<"">> + }, + efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply)); + {error, Reason} -> + Reply = #service_metrics_reply{ + is_ok = false, + message = Reason + }, + efka_transport:response(TransportPid, PacketId, message_pb:encode_msg(Reply)) + end + end, + {noreply, State}; %% TODO handle_info({server_push_message, <<8:8, ActivatePush/binary>>}, State = #state{transport_pid = TransportPid, status = Status}) -> diff --git a/apps/efka/src/efka_micro_service.erl b/apps/efka/src/efka_micro_service.erl index 64ae4d5..a2c2b42 100644 --- a/apps/efka/src/efka_micro_service.erl +++ b/apps/efka/src/efka_micro_service.erl @@ -20,6 +20,7 @@ %% API -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]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). @@ -63,6 +64,12 @@ get_name(ServiceId) when is_binary(ServiceId) -> get_pid(ServiceId) when is_binary(ServiceId) -> whereis(get_name(ServiceId)). +push_arguments(Pid, Args) -> + ok. + +push_metrics(Pid, Metrics) -> + ok. + -spec attach_channel(pid(), pid()) -> ok | {error, Reason :: binary()}. attach_channel(Pid, ChannelPid) when is_pid(Pid), is_pid(ChannelPid) -> gen_server:call(Pid, {attach_channel, ChannelPid}). diff --git a/apps/efka/src/proto/message_pb.erl b/apps/efka/src/proto/message_pb.erl index 3d55d83..5c64c49 100644 --- a/apps/efka/src/proto/message_pb.erl +++ b/apps/efka/src/proto/message_pb.erl @@ -69,8 +69,12 @@ -type service_arguments() :: #service_arguments{}. +-type service_arguments_reply() :: #service_arguments_reply{}. + -type service_metrics() :: #service_metrics{}. +-type service_metrics_reply() :: #service_metrics_reply{}. + -type data() :: #data{}. -type ping() :: #ping{}. @@ -83,9 +87,9 @@ -type ai_event() :: #ai_event{}. --export_type(['auth_request'/0, 'auth_reply'/0, 'activate_push'/0, 'deploy'/0, 'deploy_reply'/0, 'topic_message'/0, 'service_arguments'/0, 'service_metrics'/0, 'data'/0, 'ping'/0, 'service_inform'/0, 'feedback_phase'/0, 'event'/0, 'ai_event'/0]). --type '$msg_name'() :: auth_request | auth_reply | activate_push | deploy | deploy_reply | topic_message | service_arguments | service_metrics | data | ping | service_inform | feedback_phase | event | ai_event. --type '$msg'() :: auth_request() | auth_reply() | activate_push() | deploy() | deploy_reply() | topic_message() | service_arguments() | service_metrics() | data() | ping() | service_inform() | feedback_phase() | event() | ai_event(). +-export_type(['auth_request'/0, 'auth_reply'/0, 'activate_push'/0, 'deploy'/0, 'deploy_reply'/0, 'topic_message'/0, 'service_arguments'/0, 'service_arguments_reply'/0, 'service_metrics'/0, 'service_metrics_reply'/0, 'data'/0, 'ping'/0, 'service_inform'/0, 'feedback_phase'/0, 'event'/0, 'ai_event'/0]). +-type '$msg_name'() :: auth_request | auth_reply | activate_push | deploy | deploy_reply | topic_message | service_arguments | service_arguments_reply | service_metrics | service_metrics_reply | data | ping | service_inform | feedback_phase | event | ai_event. +-type '$msg'() :: auth_request() | auth_reply() | activate_push() | deploy() | deploy_reply() | topic_message() | service_arguments() | service_arguments_reply() | service_metrics() | service_metrics_reply() | data() | ping() | service_inform() | feedback_phase() | event() | ai_event(). -export_type(['$msg_name'/0, '$msg'/0]). -record('map',{key, value}). @@ -120,7 +124,9 @@ encode_msg(Msg, MsgName, Opts) -> deploy_reply -> encode_msg_deploy_reply(id(Msg, TrUserData), TrUserData); topic_message -> encode_msg_topic_message(id(Msg, TrUserData), TrUserData); service_arguments -> encode_msg_service_arguments(id(Msg, TrUserData), TrUserData); + service_arguments_reply -> encode_msg_service_arguments_reply(id(Msg, TrUserData), TrUserData); service_metrics -> encode_msg_service_metrics(id(Msg, TrUserData), TrUserData); + service_metrics_reply -> encode_msg_service_metrics_reply(id(Msg, TrUserData), TrUserData); data -> encode_msg_data(id(Msg, TrUserData), TrUserData); ping -> encode_msg_ping(id(Msg, TrUserData), TrUserData); service_inform -> encode_msg_service_inform(id(Msg, TrUserData), TrUserData); @@ -340,6 +346,30 @@ encode_msg_service_arguments(#service_arguments{service_id = F1, args = F2}, Bin end end. +encode_msg_service_arguments_reply(Msg, TrUserData) -> encode_msg_service_arguments_reply(Msg, <<>>, TrUserData). + + +encode_msg_service_arguments_reply(#service_arguments_reply{is_ok = F1, message = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= false -> Bin; + true -> e_type_bool(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end. + encode_msg_service_metrics(Msg, TrUserData) -> encode_msg_service_metrics(Msg, <<>>, TrUserData). @@ -365,6 +395,30 @@ encode_msg_service_metrics(#service_metrics{service_id = F1, metrics = F2}, Bin, end end. +encode_msg_service_metrics_reply(Msg, TrUserData) -> encode_msg_service_metrics_reply(Msg, <<>>, TrUserData). + + +encode_msg_service_metrics_reply(#service_metrics_reply{is_ok = F1, message = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= false -> Bin; + true -> e_type_bool(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end. + encode_msg_data(Msg, TrUserData) -> encode_msg_data(Msg, <<>>, TrUserData). @@ -868,7 +922,9 @@ decode_msg_2_doit(deploy, Bin, TrUserData) -> id(decode_msg_deploy(Bin, TrUserDa decode_msg_2_doit(deploy_reply, Bin, TrUserData) -> id(decode_msg_deploy_reply(Bin, TrUserData), TrUserData); decode_msg_2_doit(topic_message, Bin, TrUserData) -> id(decode_msg_topic_message(Bin, TrUserData), TrUserData); decode_msg_2_doit(service_arguments, Bin, TrUserData) -> id(decode_msg_service_arguments(Bin, TrUserData), TrUserData); +decode_msg_2_doit(service_arguments_reply, Bin, TrUserData) -> id(decode_msg_service_arguments_reply(Bin, TrUserData), TrUserData); decode_msg_2_doit(service_metrics, Bin, TrUserData) -> id(decode_msg_service_metrics(Bin, TrUserData), TrUserData); +decode_msg_2_doit(service_metrics_reply, Bin, TrUserData) -> id(decode_msg_service_metrics_reply(Bin, TrUserData), TrUserData); decode_msg_2_doit(data, Bin, TrUserData) -> id(decode_msg_data(Bin, TrUserData), TrUserData); decode_msg_2_doit(ping, Bin, TrUserData) -> id(decode_msg_ping(Bin, TrUserData), TrUserData); decode_msg_2_doit(service_inform, Bin, TrUserData) -> id(decode_msg_service_inform(Bin, TrUserData), TrUserData); @@ -1263,6 +1319,57 @@ skip_32_service_arguments(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserDa skip_64_service_arguments(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_service_arguments(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +decode_msg_service_arguments_reply(Bin, TrUserData) -> dfp_read_field_def_service_arguments_reply(Bin, 0, 0, 0, id(false, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_service_arguments_reply(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_service_arguments_reply_is_ok(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_service_arguments_reply(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_service_arguments_reply_message(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_service_arguments_reply(<<>>, 0, 0, _, F@_1, F@_2, _) -> #service_arguments_reply{is_ok = F@_1, message = F@_2}; +dfp_read_field_def_service_arguments_reply(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_service_arguments_reply(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_service_arguments_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_service_arguments_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_service_arguments_reply(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_service_arguments_reply_is_ok(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> d_field_service_arguments_reply_message(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_service_arguments_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_service_arguments_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_service_arguments_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_service_arguments_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_service_arguments_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_service_arguments_reply(<<>>, 0, 0, _, F@_1, F@_2, _) -> #service_arguments_reply{is_ok = F@_1, message = F@_2}. + +d_field_service_arguments_reply_is_ok(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_service_arguments_reply_is_ok(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_service_arguments_reply_is_ok(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, TrUserData), Rest}, + dfp_read_field_def_service_arguments_reply(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_service_arguments_reply_message(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_service_arguments_reply_message(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_service_arguments_reply_message(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_service_arguments_reply(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +skip_varint_service_arguments_reply(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_service_arguments_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_service_arguments_reply(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_service_arguments_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_service_arguments_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_service_arguments_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_service_arguments_reply(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_service_arguments_reply(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_service_arguments_reply(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_service_arguments_reply(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_service_arguments_reply(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_service_arguments_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_service_arguments_reply(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_service_arguments_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + decode_msg_service_metrics(Bin, TrUserData) -> dfp_read_field_def_service_metrics(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). dfp_read_field_def_service_metrics(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_service_metrics_service_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); @@ -1314,6 +1421,57 @@ skip_32_service_metrics(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData skip_64_service_metrics(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_service_metrics(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +decode_msg_service_metrics_reply(Bin, TrUserData) -> dfp_read_field_def_service_metrics_reply(Bin, 0, 0, 0, id(false, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_service_metrics_reply(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_service_metrics_reply_is_ok(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_service_metrics_reply(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_service_metrics_reply_message(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_service_metrics_reply(<<>>, 0, 0, _, F@_1, F@_2, _) -> #service_metrics_reply{is_ok = F@_1, message = F@_2}; +dfp_read_field_def_service_metrics_reply(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_service_metrics_reply(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_service_metrics_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_service_metrics_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_service_metrics_reply(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_service_metrics_reply_is_ok(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> d_field_service_metrics_reply_message(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_service_metrics_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_service_metrics_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_service_metrics_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_service_metrics_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_service_metrics_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_service_metrics_reply(<<>>, 0, 0, _, F@_1, F@_2, _) -> #service_metrics_reply{is_ok = F@_1, message = F@_2}. + +d_field_service_metrics_reply_is_ok(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_service_metrics_reply_is_ok(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_service_metrics_reply_is_ok(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, TrUserData), Rest}, + dfp_read_field_def_service_metrics_reply(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_service_metrics_reply_message(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_service_metrics_reply_message(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_service_metrics_reply_message(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_service_metrics_reply(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +skip_varint_service_metrics_reply(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_service_metrics_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_service_metrics_reply(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_service_metrics_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_service_metrics_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_service_metrics_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_service_metrics_reply(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_service_metrics_reply(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_service_metrics_reply(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_service_metrics_reply(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_service_metrics_reply(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_service_metrics_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_service_metrics_reply(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_service_metrics_reply(Rest, 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); @@ -1969,7 +2127,9 @@ merge_msgs(Prev, New, MsgName, Opts) -> deploy_reply -> merge_msg_deploy_reply(Prev, New, TrUserData); topic_message -> merge_msg_topic_message(Prev, New, TrUserData); service_arguments -> merge_msg_service_arguments(Prev, New, TrUserData); + service_arguments_reply -> merge_msg_service_arguments_reply(Prev, New, TrUserData); service_metrics -> merge_msg_service_metrics(Prev, New, TrUserData); + service_metrics_reply -> merge_msg_service_metrics_reply(Prev, New, TrUserData); data -> merge_msg_data(Prev, New, TrUserData); ping -> merge_msg_ping(Prev, New, TrUserData); service_inform -> merge_msg_service_inform(Prev, New, TrUserData); @@ -2071,6 +2231,17 @@ merge_msg_service_arguments(#service_arguments{service_id = PFservice_id, args = true -> NFargs end}. +-compile({nowarn_unused_function,merge_msg_service_arguments_reply/3}). +merge_msg_service_arguments_reply(#service_arguments_reply{is_ok = PFis_ok, message = PFmessage}, #service_arguments_reply{is_ok = NFis_ok, message = NFmessage}, _) -> + #service_arguments_reply{is_ok = + if NFis_ok =:= undefined -> PFis_ok; + true -> NFis_ok + end, + message = + if NFmessage =:= undefined -> PFmessage; + true -> NFmessage + end}. + -compile({nowarn_unused_function,merge_msg_service_metrics/3}). merge_msg_service_metrics(#service_metrics{service_id = PFservice_id, metrics = PFmetrics}, #service_metrics{service_id = NFservice_id, metrics = NFmetrics}, _) -> #service_metrics{service_id = @@ -2082,6 +2253,17 @@ merge_msg_service_metrics(#service_metrics{service_id = PFservice_id, metrics = true -> NFmetrics end}. +-compile({nowarn_unused_function,merge_msg_service_metrics_reply/3}). +merge_msg_service_metrics_reply(#service_metrics_reply{is_ok = PFis_ok, message = PFmessage}, #service_metrics_reply{is_ok = NFis_ok, message = NFmessage}, _) -> + #service_metrics_reply{is_ok = + if NFis_ok =:= undefined -> PFis_ok; + true -> NFis_ok + end, + message = + if NFmessage =:= undefined -> PFmessage; + true -> NFmessage + 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) -> @@ -2252,7 +2434,9 @@ verify_msg(Msg, MsgName, Opts) -> deploy_reply -> v_msg_deploy_reply(Msg, [MsgName], TrUserData); topic_message -> v_msg_topic_message(Msg, [MsgName], TrUserData); service_arguments -> v_msg_service_arguments(Msg, [MsgName], TrUserData); + service_arguments_reply -> v_msg_service_arguments_reply(Msg, [MsgName], TrUserData); service_metrics -> v_msg_service_metrics(Msg, [MsgName], TrUserData); + service_metrics_reply -> v_msg_service_metrics_reply(Msg, [MsgName], TrUserData); data -> v_msg_data(Msg, [MsgName], TrUserData); ping -> v_msg_ping(Msg, [MsgName], TrUserData); service_inform -> v_msg_service_inform(Msg, [MsgName], TrUserData); @@ -2359,6 +2543,18 @@ v_msg_service_arguments(#service_arguments{service_id = F1, args = F2}, Path, Tr ok; v_msg_service_arguments(X, Path, _TrUserData) -> mk_type_error({expected_msg, service_arguments}, X, Path). +-compile({nowarn_unused_function,v_msg_service_arguments_reply/3}). +-dialyzer({nowarn_function,v_msg_service_arguments_reply/3}). +v_msg_service_arguments_reply(#service_arguments_reply{is_ok = F1, message = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bool(F1, [is_ok | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [message | Path], TrUserData) + end, + ok; +v_msg_service_arguments_reply(X, Path, _TrUserData) -> mk_type_error({expected_msg, service_arguments_reply}, X, Path). + -compile({nowarn_unused_function,v_msg_service_metrics/3}). -dialyzer({nowarn_function,v_msg_service_metrics/3}). v_msg_service_metrics(#service_metrics{service_id = F1, metrics = F2}, Path, TrUserData) -> @@ -2371,6 +2567,18 @@ v_msg_service_metrics(#service_metrics{service_id = F1, metrics = F2}, Path, TrU ok; v_msg_service_metrics(X, Path, _TrUserData) -> mk_type_error({expected_msg, service_metrics}, X, Path). +-compile({nowarn_unused_function,v_msg_service_metrics_reply/3}). +-dialyzer({nowarn_function,v_msg_service_metrics_reply/3}). +v_msg_service_metrics_reply(#service_metrics_reply{is_ok = F1, message = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bool(F1, [is_ok | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [message | Path], TrUserData) + end, + ok; +v_msg_service_metrics_reply(X, Path, _TrUserData) -> mk_type_error({expected_msg, service_metrics_reply}, X, Path). + -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) -> @@ -2656,7 +2864,9 @@ get_msg_defs() -> {{msg, deploy_reply}, [#field{name = is_ok, fnum = 1, rnum = 2, type = bool, occurrence = optional, opts = []}, #field{name = message, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]}, {{msg, topic_message}, [#field{name = topic, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = content, 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_arguments_reply}, [#field{name = is_ok, fnum = 1, rnum = 2, type = bool, occurrence = optional, opts = []}, #field{name = message, 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_reply}, [#field{name = is_ok, fnum = 1, rnum = 2, type = bool, occurrence = optional, opts = []}, #field{name = message, 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 = []}, @@ -2692,13 +2902,14 @@ get_msg_defs() -> {{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 = []}]}]. -get_msg_names() -> [auth_request, auth_reply, activate_push, deploy, deploy_reply, 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, deploy_reply, topic_message, service_arguments, service_arguments_reply, service_metrics, service_metrics_reply, data, ping, service_inform, feedback_phase, event, ai_event]. get_group_names() -> []. -get_msg_or_group_names() -> [auth_request, auth_reply, activate_push, deploy, deploy_reply, topic_message, service_arguments, service_metrics, data, ping, service_inform, feedback_phase, event, ai_event]. +get_msg_or_group_names() -> + [auth_request, auth_reply, activate_push, deploy, deploy_reply, topic_message, service_arguments, service_arguments_reply, service_metrics, service_metrics_reply, data, ping, service_inform, feedback_phase, event, ai_event]. get_enum_names() -> []. @@ -2733,7 +2944,9 @@ find_msg_def(deploy) -> find_msg_def(deploy_reply) -> [#field{name = is_ok, fnum = 1, rnum = 2, type = bool, occurrence = optional, opts = []}, #field{name = message, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]; find_msg_def(topic_message) -> [#field{name = topic, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = content, 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_arguments_reply) -> [#field{name = is_ok, fnum = 1, rnum = 2, type = bool, occurrence = optional, opts = []}, #field{name = message, 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_reply) -> [#field{name = is_ok, fnum = 1, rnum = 2, type = bool, occurrence = optional, opts = []}, #field{name = message, 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 = []}, @@ -2832,7 +3045,9 @@ fqbin_to_msg_name(<<"Deploy">>) -> deploy; fqbin_to_msg_name(<<"DeployReply">>) -> deploy_reply; fqbin_to_msg_name(<<"TopicMessage">>) -> topic_message; fqbin_to_msg_name(<<"ServiceArguments">>) -> service_arguments; +fqbin_to_msg_name(<<"ServiceArgumentsReply">>) -> service_arguments_reply; fqbin_to_msg_name(<<"ServiceMetrics">>) -> service_metrics; +fqbin_to_msg_name(<<"ServiceMetricsReply">>) -> service_metrics_reply; fqbin_to_msg_name(<<"Data">>) -> data; fqbin_to_msg_name(<<"Ping">>) -> ping; fqbin_to_msg_name(<<"ServiceInform">>) -> service_inform; @@ -2849,7 +3064,9 @@ msg_name_to_fqbin(deploy) -> <<"Deploy">>; msg_name_to_fqbin(deploy_reply) -> <<"DeployReply">>; msg_name_to_fqbin(topic_message) -> <<"TopicMessage">>; msg_name_to_fqbin(service_arguments) -> <<"ServiceArguments">>; +msg_name_to_fqbin(service_arguments_reply) -> <<"ServiceArgumentsReply">>; msg_name_to_fqbin(service_metrics) -> <<"ServiceMetrics">>; +msg_name_to_fqbin(service_metrics_reply) -> <<"ServiceMetricsReply">>; msg_name_to_fqbin(data) -> <<"Data">>; msg_name_to_fqbin(ping) -> <<"Ping">>; msg_name_to_fqbin(service_inform) -> <<"ServiceInform">>; @@ -2894,7 +3111,8 @@ get_all_source_basenames() -> ["message_pb.proto"]. get_all_proto_names() -> ["message_pb"]. -get_msg_containment("message_pb") -> [ai_event, activate_push, auth_reply, auth_request, data, deploy, deploy_reply, event, feedback_phase, ping, service_arguments, service_inform, service_metrics, topic_message]; +get_msg_containment("message_pb") -> + [ai_event, activate_push, auth_reply, auth_request, data, deploy, deploy_reply, event, feedback_phase, ping, service_arguments, service_arguments_reply, service_inform, service_metrics, service_metrics_reply, topic_message]; get_msg_containment(P) -> error({gpb_error, {badproto, P}}). @@ -2924,6 +3142,8 @@ get_proto_by_msg_name_as_fqbin(<<"TopicMessage">>) -> "message_pb"; get_proto_by_msg_name_as_fqbin(<<"FeedbackPhase">>) -> "message_pb"; get_proto_by_msg_name_as_fqbin(<<"Ping">>) -> "message_pb"; get_proto_by_msg_name_as_fqbin(<<"ActivatePush">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"ServiceMetricsReply">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"ServiceArgumentsReply">>) -> "message_pb"; get_proto_by_msg_name_as_fqbin(<<"DeployReply">>) -> "message_pb"; get_proto_by_msg_name_as_fqbin(<<"Deploy">>) -> "message_pb"; get_proto_by_msg_name_as_fqbin(<<"AuthReply">>) -> "message_pb"; diff --git a/message_pb.proto b/message_pb.proto index d876acb..2a3f9d4 100644 --- a/message_pb.proto +++ b/message_pb.proto @@ -46,12 +46,22 @@ message ServiceArguments { string args = 2; } +message ServiceArgumentsReply { + bool is_ok = 1; + string message = 2; +} + // 服务采集项 message ServiceMetrics { string service_id = 1; string metrics = 2; } +message ServiceMetricsReply { + bool is_ok = 1; + string message = 2; +} + // 数据传输 message Data { string device_uuid = 1;