diff --git a/apps/efka/include/message_pb.hrl b/apps/efka/include/message_pb.hrl index a42fdbe..e624321 100644 --- a/apps/efka/include/message_pb.hrl +++ b/apps/efka/include/message_pb.hrl @@ -76,7 +76,7 @@ cpu_temperature = 0.0 :: float() | integer() | infinity | '-infinity' | nan | undefined, % = 10, optional disk = [] :: [integer()] | undefined, % = 11, repeated, 32 bits memory = [] :: [integer()] | undefined, % = 12, repeated, 32 bits - interfaces = [] :: [iodata()] | undefined % = 13, repeated + interfaces = <<>> :: unicode:chardata() | undefined % = 13, optional }). -endif. diff --git a/apps/efka/src/efka_agent.erl b/apps/efka/src/efka_agent.erl index 4d6ce26..d290af2 100644 --- a/apps/efka/src/efka_agent.erl +++ b/apps/efka/src/efka_agent.erl @@ -45,6 +45,10 @@ data(ServiceName, DeviceUUID, At, Tags, Fields) when is_binary(ServiceName), is_binary(DeviceUUID), is_integer(At), is_map(Tags), is_binary(Fields) -> gen_server:cast(?SERVER, {data, ServiceName, DeviceUUID, At, Tags, Fields}). +ping() -> + + ok. + %% @doc Spawns the server and registers the local name (unique) -spec(start_link() -> {ok, Pid :: pid()} | ignore | {error, Reason :: term()}). diff --git a/apps/efka/src/proto/message_pb.erl b/apps/efka/src/proto/message_pb.erl index 1c6135e..d053790 100644 --- a/apps/efka/src/proto/message_pb.erl +++ b/apps/efka/src/proto/message_pb.erl @@ -423,11 +423,15 @@ encode_msg_ping(#ping{adcode = F1, boot_time = F2, province = F3, city = F4, efk true -> e_field_ping_memory(TrF12, B11, TrUserData) end end, - begin - TrF13 = id(F13, TrUserData), - if TrF13 == [] -> B12; - true -> e_field_ping_interfaces(TrF13, B12, TrUserData) - end + if F13 == undefined -> B12; + true -> + begin + TrF13 = id(F13, TrUserData), + case is_empty_string(TrF13) of + true -> B12; + false -> e_type_string(TrF13, <>, TrUserData) + end + end end. encode_msg_service_inform(Msg, TrUserData) -> encode_msg_service_inform(Msg, <<>>, TrUserData). @@ -669,12 +673,6 @@ e_pfield_ping_memory([Value | Rest], Bin, TrUserData) -> e_pfield_ping_memory(Rest, Bin2, TrUserData); e_pfield_ping_memory([], Bin, _TrUserData) -> Bin. -e_field_ping_interfaces([Elem | Rest], Bin, TrUserData) -> - Bin2 = <>, - Bin3 = e_type_bytes(id(Elem, TrUserData), Bin2, TrUserData), - e_field_ping_interfaces(Rest, Bin3, TrUserData); -e_field_ping_interfaces([], Bin, _TrUserData) -> Bin. - 'encode_msg_map'(#'map'{key = F1, value = F2}, Bin, TrUserData) -> B1 = begin TrF1 = id(F1, TrUserData), e_type_string(TrF1, <>, TrUserData) end, begin TrF2 = id(F2, TrUserData), e_type_string(TrF2, <>, TrUserData) end. @@ -1190,7 +1188,7 @@ decode_msg_ping(Bin, TrUserData) -> id(0.0, TrUserData), id([], TrUserData), id([], TrUserData), - id([], TrUserData), + id(<<>>, TrUserData), TrUserData). dfp_read_field_def_ping(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> @@ -1223,9 +1221,9 @@ dfp_read_field_def_ping(<<96, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, d_field_ping_memory(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); dfp_read_field_def_ping(<<106, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> d_field_ping_interfaces(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); -dfp_read_field_def_ping(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, R1, F@_8, F@_9, F@_10, R2, R3, R4, TrUserData) -> +dfp_read_field_def_ping(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, R1, F@_8, F@_9, F@_10, R2, R3, F@_13, TrUserData) -> #ping{adcode = F@_1, boot_time = F@_2, province = F@_3, city = F@_4, efka_version = F@_5, kernel_arch = F@_6, ips = lists_reverse(R1, TrUserData), cpu_core = F@_8, cpu_load = F@_9, cpu_temperature = F@_10, disk = lists_reverse(R2, TrUserData), - memory = lists_reverse(R3, TrUserData), interfaces = lists_reverse(R4, TrUserData)}; + memory = lists_reverse(R3, TrUserData), interfaces = F@_13}; dfp_read_field_def_ping(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> dg_read_field_def_ping(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). @@ -1258,9 +1256,9 @@ dg_read_field_def_ping(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F 5 -> skip_32_ping(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) end end; -dg_read_field_def_ping(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, R1, F@_8, F@_9, F@_10, R2, R3, R4, TrUserData) -> +dg_read_field_def_ping(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, R1, F@_8, F@_9, F@_10, R2, R3, F@_13, TrUserData) -> #ping{adcode = F@_1, boot_time = F@_2, province = F@_3, city = F@_4, efka_version = F@_5, kernel_arch = F@_6, ips = lists_reverse(R1, TrUserData), cpu_core = F@_8, cpu_load = F@_9, cpu_temperature = F@_10, disk = lists_reverse(R2, TrUserData), - memory = lists_reverse(R3, TrUserData), interfaces = lists_reverse(R4, TrUserData)}. + memory = lists_reverse(R3, TrUserData), interfaces = F@_13}. d_field_ping_adcode(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> d_field_ping_adcode(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); @@ -1367,9 +1365,9 @@ d_packed_field_ping_memory(<<>>, 0, 0, _, AccSeq, _) -> AccSeq. d_field_ping_interfaces(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> d_field_ping_interfaces(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); -d_field_ping_interfaces(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, Prev, TrUserData) -> +d_field_ping_interfaces(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, _, TrUserData) -> {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, - dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, cons(NewFValue, Prev, TrUserData), TrUserData). + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, NewFValue, TrUserData). skip_varint_ping(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> skip_varint_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); @@ -1985,9 +1983,8 @@ merge_msg_ping(#ping{adcode = PFadcode, boot_time = PFboot_time, province = PFpr NFmemory == undefined -> PFmemory end, interfaces = - if PFinterfaces /= undefined, NFinterfaces /= undefined -> 'erlang_++'(PFinterfaces, NFinterfaces, TrUserData); - PFinterfaces == undefined -> NFinterfaces; - NFinterfaces == undefined -> PFinterfaces + if NFinterfaces =:= undefined -> PFinterfaces; + true -> NFinterfaces end}. -compile({nowarn_unused_function,merge_msg_service_inform/3}). @@ -2236,10 +2233,8 @@ v_msg_ping(#ping{adcode = F1, boot_time = F2, province = F3, city = F4, efka_ver ok; true -> mk_type_error({invalid_list_of, int32}, F12, [memory | Path]) end, - if is_list(F13) -> - _ = [v_type_bytes(Elem, [interfaces | Path], TrUserData) || Elem <- F13], - ok; - true -> mk_type_error({invalid_list_of, bytes}, F13, [interfaces | Path]) + if F13 == undefined -> ok; + true -> v_type_string(F13, [interfaces | Path], TrUserData) end, ok; v_msg_ping(X, Path, _TrUserData) -> mk_type_error({expected_msg, ping}, X, Path). @@ -2494,7 +2489,7 @@ get_msg_defs() -> #field{name = cpu_temperature, fnum = 10, rnum = 11, type = float, occurrence = optional, opts = []}, #field{name = disk, fnum = 11, rnum = 12, type = int32, occurrence = repeated, opts = [packed]}, #field{name = memory, fnum = 12, rnum = 13, type = int32, occurrence = repeated, opts = [packed]}, - #field{name = interfaces, fnum = 13, rnum = 14, type = bytes, occurrence = repeated, opts = []}]}, + #field{name = interfaces, fnum = 13, rnum = 14, type = string, occurrence = optional, opts = []}]}, {{msg, service_inform}, [#field{name = name, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = props, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, @@ -2569,7 +2564,7 @@ find_msg_def(ping) -> #field{name = cpu_temperature, fnum = 10, rnum = 11, type = float, occurrence = optional, opts = []}, #field{name = disk, fnum = 11, rnum = 12, type = int32, occurrence = repeated, opts = [packed]}, #field{name = memory, fnum = 12, rnum = 13, type = int32, occurrence = repeated, opts = [packed]}, - #field{name = interfaces, fnum = 13, rnum = 14, type = bytes, occurrence = repeated, opts = []}]; + #field{name = interfaces, fnum = 13, rnum = 14, type = string, occurrence = optional, opts = []}]; find_msg_def(service_inform) -> [#field{name = name, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = props, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, diff --git a/message_pb.proto b/message_pb.proto index d5d985b..c1232ec 100644 --- a/message_pb.proto +++ b/message_pb.proto @@ -70,7 +70,7 @@ message Ping { repeated int32 disk = 11; repeated int32 memory = 12; // 接口信息的定义: 每个接口的信息, 采用json格式传输,没有办法提前定义 - repeated bytes interfaces = 13; + string interfaces = 13; } // Inform消息