This commit is contained in:
安礼成 2023-02-23 17:37:45 +08:00
parent 7f1dbbade5
commit 905ddbcecd
3 changed files with 37 additions and 43 deletions

View File

@ -79,46 +79,39 @@ handle(<<"server.register">>, Msg = #{<<"c_id">> := ClientId, <<"r">> := PubKey,
end; end;
handle(<<"server.data">>, #{<<"c_id">> := HostId, <<"d">> := Data}) -> handle(<<"server.data">>, #{<<"c_id">> := HostId, <<"d">> := Data}) ->
{ok, Host = #host{aes = Aes}} = host_model:get_host(HostId), case host_model:get_host(HostId) of
{ok, #host{aes = Aes}} ->
Services = microservice_model:get_services(HostId), Services = microservice_model:get_services(HostId),
PlainData = iot_cipher_aes:decrypt(Aes, Aes, Data), PlainData = iot_cipher_aes:decrypt(Aes, Aes, Data),
case jiffy:decode(PlainData, [return_maps]) of case jiffy:decode(PlainData, [return_maps]) of
Infos when is_list(Infos) -> Infos when is_list(Infos) ->
lager:debug("the data is: ~p", [Infos]), lager:debug("[iot_message_handler] the data is: ~p", [Infos]),
%% %%
lists:foreach(fun(#{<<"service_name">> := ServiceName, <<"data">> := Items}) -> lists:foreach(fun(#{<<"service_name">> := ServiceName, <<"data">> := Items}) ->
case lists:search(fun(#service{name = Name}) -> Name =:= ServiceName end, Services) of case lists:search(fun(#service{name = Name}) -> Name =:= ServiceName end, Services) of
{value, Service=#service{metrics = Metrics}} -> {value, #service{service_id = ServiceId, metrics = Metrics}} ->
%% %%
NMetrics = lists:foldl(fun(MetricData, MetricsAcc) -> append_metric(MetricsAcc, MetricData) end, Metrics, Items), NMetrics = lists:foldl(fun(MetricData, MetricsAcc) -> append_metric(MetricsAcc, MetricData) end, Metrics, Items),
case service_model:update_metric(ServiceId, NMetrics) of
ok ->
lager:debug("[iot_message_handler] update metrics success");
{ok, Reason} ->
ok; lager:debug("[iot_message_handler] update metrics error: ~p", [Reason])
end;
false -> false ->
lager:warning("[iot_message_handler] host_id: ~p, not found service_name: ~p", [HostId, ServiceName]) lager:warning("[iot_message_handler] host_id: ~p, not found service_name: ~p", [HostId, ServiceName])
end end
end, Infos);
end, Infos),
ok;
_ -> _ ->
lager:debug("the metric is invalid json") lager:debug("[iot_message_handler] the metric is invalid json")
end, end;
undefined ->
lager:warning("[iot_message_handler] host_id: ~p, not exists", [HostId])
ok. end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% helper methods
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
append_metric(Metrics, MetricData) when is_map(MetricData) -> append_metric(Metrics, MetricData) when is_map(MetricData) ->
Name = maps:get(<<"name">>, MetricData, <<"">>), Name = maps:get(<<"name">>, MetricData, <<"">>),

View File

@ -67,10 +67,11 @@ json_error(ErrCode, ErrMessage) when is_integer(ErrCode), is_binary(ErrMessage)
uuid() -> uuid() ->
rand_bytes(16). rand_bytes(16).
rand_bytes(Size) when is_integer(Size) -> rand_bytes(Size) when is_integer(Size), Size > 0 ->
Bytes = crypto:strong_rand_bytes(Size), Size1 = erlang:ceil(Size / 2),
Bytes = crypto:strong_rand_bytes(Size1),
S = lists:flatten([integer_to_list(E, 16) || <<E:4>> <= Bytes]), S = lists:flatten([integer_to_list(E, 16) || <<E:4>> <= Bytes]),
string:to_lower(S). lists:sublist(string:to_lower(S), 1, Size).
queue_limited_in(Item, Q, Num) when is_integer(Num) -> queue_limited_in(Item, Q, Num) when is_integer(Num) ->
case queue:len(Q) >= Num of case queue:len(Q) >= Num of

View File

@ -24,7 +24,7 @@ get_host(HostId) when is_binary(HostId) ->
%% app信息 %% app信息
-spec get_hosts(Start :: integer(), Limit :: integer()) -> -spec get_hosts(Start :: integer(), Limit :: integer()) ->
{ok, Items :: list(), Stat :: maps()} | {ok, Items :: list(), Stat :: maps:map()} |
{error, Reason :: any()}. {error, Reason :: any()}.
get_hosts(Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 -> get_hosts(Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
Fun = fun() -> Fun = fun() ->