From 7f1dbbade54ebdd45a9fcee9eb6e5763e56afa51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E7=A4=BC=E6=88=90?= Date: Thu, 23 Feb 2023 17:16:10 +0800 Subject: [PATCH] fix service --- apps/iot/src/iot_mnesia.erl | 8 +- apps/iot/src/model/microservice_model.erl | 127 ---------------------- apps/iot/src/model/service_model.erl | 100 +++++++++++++++++ 3 files changed, 104 insertions(+), 131 deletions(-) delete mode 100644 apps/iot/src/model/microservice_model.erl create mode 100644 apps/iot/src/model/service_model.erl diff --git a/apps/iot/src/iot_mnesia.erl b/apps/iot/src/iot_mnesia.erl index 8db867d..d3b5542 100644 --- a/apps/iot/src/iot_mnesia.erl +++ b/apps/iot/src/iot_mnesia.erl @@ -41,9 +41,9 @@ init_database() -> ]), %% 主机微服务管理 - mnesia:create_table(microservice, [ - {attributes, record_info(fields, microservice)}, - {record_name, microservice}, + mnesia:create_table(service, [ + {attributes, record_info(fields, service)}, + {record_name, service}, {disc_copies, [node()]}, {type, set} ]), @@ -68,5 +68,5 @@ copy_database(MasterNode) when is_atom(MasterNode) -> %% 增加表的分区复制 mnesia:add_table_copy(host, node(), ram_copies), mnesia:add_table_copy(terminal, node(), ram_copies), - mnesia:add_table_copy(microservice, node(), ram_copies), + mnesia:add_table_copy(service, node(), ram_copies), ok. \ No newline at end of file diff --git a/apps/iot/src/model/microservice_model.erl b/apps/iot/src/model/microservice_model.erl deleted file mode 100644 index 35bcaf7..0000000 --- a/apps/iot/src/model/microservice_model.erl +++ /dev/null @@ -1,127 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author licheng5 -%%% @copyright (C) 2021, -%%% @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#service.host_id =:= HostId, E#service.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#service.host_id =:= HostId]), - qlc:e(Q) - end, - case mnesia:transaction(Fun) of - Services when is_list(Services) -> - Services; - _ -> - [] - end. - -add_service(Service = #service{}) -> - 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#service{status = Status}, - mnesia:write(microservice, NService, write) - end - end, - case mnesia:transaction(Fun) of - {atomic, ok} -> - ok; - {aborted, Reason} -> - {error, Reason} - end. - -update_metric(ServiceId, Metrics) when is_binary(ServiceId), is_list(Metrics) -> - Fun = fun() -> - case mnesia:read(terminal, TerminalId) of - [] -> - mnesia:abort(<<"terminal not found">>); - [Terminal = #terminal{metrics = Metrics}] -> - Ts = iot_util:current_time(), - NMetrics = case lists:any(fun(#service_metric{symbol = Symbol}) -> Symbol =:= MetricSymbol end, Metrics) of - true -> - 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#service_metric{ - name = MetricName, - last_value = MetricValue, - update_ts = Ts, - queue = Q1 - }; - false -> - Metric - end - end, Metrics); - false -> - Q0 = queue:new(), - Metric = #service_metric{ - name = MetricName, - symbol = MetricSymbol, - last_value = MetricValue, - update_ts = Ts, - queue = queue:in({Ts, MetricValue}, Q0) - }, - Metrics ++ [Metric] - end, - mnesia:write(terminal, Terminal#terminal{metrics = NMetrics}, 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 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file diff --git a/apps/iot/src/model/service_model.erl b/apps/iot/src/model/service_model.erl new file mode 100644 index 0000000..849b62e --- /dev/null +++ b/apps/iot/src/model/service_model.erl @@ -0,0 +1,100 @@ +%%%------------------------------------------------------------------- +%%% @author licheng5 +%%% @copyright (C) 2021, +%%% @doc +%%% +%%% @end +%%% Created : 27. 4月 2021 下午4:38 +%%%------------------------------------------------------------------- +-module(service_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]). +-export([update_metric/2]). + +get_service(HostId, ServiceName) when is_binary(HostId), is_binary(ServiceName) -> + Fun = fun() -> + Q = qlc:q([E || E <- mnesia:table(service), E#service.host_id =:= HostId, E#service.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(service), E#service.host_id =:= HostId]), + qlc:e(Q) + end, + case mnesia:transaction(Fun) of + Services when is_list(Services) -> + Services; + _ -> + [] + end. + +add_service(Service = #service{}) -> + case mnesia:transaction(fun() -> mnesia:write(service, 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(service, ServiceId) of + [] -> + mnesia:abort(<<"host not found">>); + [Service] -> + NService = Service#service{status = Status}, + mnesia:write(service, NService, write) + end + end, + case mnesia:transaction(Fun) of + {atomic, ok} -> + ok; + {aborted, Reason} -> + {error, Reason} + end. + +update_metric(ServiceId, Metrics) when is_binary(ServiceId), is_list(Metrics) -> + Fun = fun() -> + case mnesia:read(service, ServiceId) of + [] -> + mnesia:abort(<<"service not found">>); + [Service = #service{metrics = Metrics}] -> + NService = Service#service{metrics = Metrics}, + mnesia:write(service, 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(service, ServiceId, write) end) of + {atomic, ok} -> + ok; + {aborted, Reason} -> + {error, Reason} + end. + +%% 获取app表的数据大小 +table_size() -> + mnesia:table_info(service, size). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% helper methods +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file