This commit is contained in:
安礼成 2023-02-22 16:52:45 +08:00
parent e7ef3350f0
commit 9baa0e7d4d
3 changed files with 92 additions and 9 deletions

View File

@ -52,8 +52,8 @@
status
}).
%%
-record(terminal_metric, {
%%
-record(service_metric, {
%%
symbol :: binary(),
%%
@ -121,8 +121,7 @@
model :: binary(),
%% ID
cell_id :: integer(),
%% ,
metrics = [] :: [#terminal_metric{}],
%%
status = 0 :: integer(),
%% 线
@ -146,5 +145,8 @@
%%
execute_count = 0,
%%
deploy_ts = 0 :: integer()
deploy_ts = 0 :: integer(),
%% ,
metrics = [] :: [#service_metric{}],
status = 0
}).

View File

@ -0,0 +1,81 @@
%%%-------------------------------------------------------------------
%%% @author licheng5
%%% @copyright (C) 2021, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 27. 4 2021 4:38
%%%-------------------------------------------------------------------
-module(microservice_model).
-author("licheng5").
-include("iot.hrl").
-include_lib("stdlib/include/qlc.hrl").
%% API
-export([get_services/1, get_service/2, add_service/1, change_status/2, delete/1, table_size/0]).
get_service(HostId, ServiceName) when is_binary(HostId), is_binary(ServiceName) ->
Fun = fun() ->
Q = qlc:q([E || E <- mnesia:table(microservice), E#microservice.host_id =:= HostId, E#microservice.name =:= ServiceName]),
qlc:e(Q)
end,
case mnesia:transaction(Fun) of
[Service] ->
{ok, Service};
_ ->
undefined
end.
get_services(HostId) when is_binary(HostId) ->
Fun = fun() ->
Q = qlc:q([E || E <- mnesia:table(microservice), E#microservice.host_id =:= HostId]),
qlc:e(Q)
end,
case mnesia:transaction(Fun) of
Services when is_list(Services) ->
Services;
_ ->
[]
end.
add_service(Service = #microservice{}) ->
case mnesia:transaction(fun() -> mnesia:write(microservice, Service, write) end) of
{atomic, _} ->
ok;
{aborted, Error} ->
{error, Error}
end.
change_status(ServiceId, Status) when is_binary(ServiceId), is_integer(Status) ->
Fun = fun() ->
case mnesia:read(microservice, ServiceId) of
[] ->
mnesia:abort(<<"host not found">>);
[Service] ->
NService = Service#microservice{status = Status},
mnesia:write(microservice, NService, write)
end
end,
case mnesia:transaction(Fun) of
{atomic, ok} ->
ok;
{aborted, Reason} ->
{error, Reason}
end.
-spec delete(HostId :: binary()) -> ok | {error, Reason :: any()}.
delete(ServiceId) when is_binary(ServiceId) ->
case mnesia:transaction(fun() -> mnesia:delete(microservice, ServiceId, write) end) of
{atomic, ok} ->
ok;
{aborted, Reason} ->
{error, Reason}
end.
%% app表的数据大小
table_size() ->
mnesia:table_info(microservice, size).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% helper methods
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -89,13 +89,13 @@ update_metric(TerminalId, MetricName, MetricSymbol, MetricValue) when is_binary(
mnesia:abort(<<"terminal not found">>);
[Terminal = #terminal{metrics = Metrics}] ->
Ts = iot_util:current_time(),
NMetrics = case lists:any(fun(#terminal_metric{symbol = Symbol}) -> Symbol =:= MetricSymbol end, Metrics) of
NMetrics = case lists:any(fun(#service_metric{symbol = Symbol}) -> Symbol =:= MetricSymbol end, Metrics) of
true ->
lists:map(fun(Metric=#terminal_metric{symbol = Symbol, queue = Q}) ->
lists:map(fun(Metric=#service_metric{symbol = Symbol, queue = Q}) ->
case Symbol =:= MetricSymbol of
true ->
Q1 = iot_util:queue_limited_in({Ts, MetricValue}, Q, 100),
Metric#terminal_metric{
Metric#service_metric{
name = MetricName,
last_value = MetricValue,
update_ts = Ts,
@ -107,7 +107,7 @@ update_metric(TerminalId, MetricName, MetricSymbol, MetricValue) when is_binary(
end, Metrics);
false ->
Q0 = queue:new(),
Metric = #terminal_metric{
Metric = #service_metric{
name = MetricName,
symbol = MetricSymbol,
last_value = MetricValue,