fix model
This commit is contained in:
parent
77f938e9df
commit
e25469d1c5
@ -122,9 +122,11 @@
|
|||||||
%% 终端设备表
|
%% 终端设备表
|
||||||
-record(terminal, {
|
-record(terminal, {
|
||||||
%% 设备ID
|
%% 设备ID
|
||||||
terminal_id :: binary(),
|
terminal_id :: integer(),
|
||||||
%% 关联主机
|
%% 关联主机
|
||||||
host_id :: binary(),
|
host_id :: binary(),
|
||||||
|
%% 序列号
|
||||||
|
serial_number = <<>> :: binary(),
|
||||||
%% 名称
|
%% 名称
|
||||||
name :: binary(),
|
name :: binary(),
|
||||||
%% 设备编码
|
%% 设备编码
|
||||||
|
|||||||
@ -1,23 +0,0 @@
|
|||||||
%%%-------------------------------------------------------------------
|
|
||||||
%%% @author licheng5
|
|
||||||
%%% @copyright (C) 2020, <COMPANY>
|
|
||||||
%%% @doc
|
|
||||||
%%%
|
|
||||||
%%% @end
|
|
||||||
%%% Created : 26. 4月 2020 3:36 下午
|
|
||||||
%%%-------------------------------------------------------------------
|
|
||||||
-module(http_api_handler).
|
|
||||||
-author("licheng5").
|
|
||||||
|
|
||||||
%% API
|
|
||||||
-export([handle_request/4]).
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
%% helper methods
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
|
|
||||||
handle_request("GET", "/api/booking", _, _Params) ->
|
|
||||||
{ok, 200, iot_util:json_data(<<"success">>)};
|
|
||||||
handle_request("POST", _, _, Params) ->
|
|
||||||
lager:debug("body is: ~p", [Params]),
|
|
||||||
{ok, 200, iot_util:json_data(<<"success">>)}.
|
|
||||||
@ -30,7 +30,7 @@ get_all_hosts() ->
|
|||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Items} when is_list(Items) ->
|
{atomic, Items} when is_list(Items) ->
|
||||||
{ok, Items};
|
{ok, sort(Items)};
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
end.
|
end.
|
||||||
@ -40,10 +40,16 @@ get_all_hosts() ->
|
|||||||
{ok, Items :: list(), TotalNum :: integer()} |
|
{ok, Items :: list(), TotalNum :: integer()} |
|
||||||
{error, Reason :: any()}.
|
{error, Reason :: any()}.
|
||||||
get_hosts(Spec, Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
|
get_hosts(Spec, Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
|
||||||
Items0 = mnesia:dirty_select(host, [Spec]),
|
Hosts0 = mnesia:dirty_select(host, [Spec]),
|
||||||
Items = lists:reverse(Items0),
|
%% TODO 处理host的排序方式
|
||||||
NItems = lists:sublist(Items, Start + 1, Limit),
|
SortedHosts = sort(Hosts0),
|
||||||
{ok, NItems, length(Items)}.
|
Len = length(SortedHosts),
|
||||||
|
case Len >= Start + 1 of
|
||||||
|
true ->
|
||||||
|
{ok, lists:sublist(SortedHosts, Start + 1, Limit), Len};
|
||||||
|
false ->
|
||||||
|
{ok, [], Len}
|
||||||
|
end.
|
||||||
|
|
||||||
%% 按照状态分组统计
|
%% 按照状态分组统计
|
||||||
get_stat() ->
|
get_stat() ->
|
||||||
@ -75,19 +81,25 @@ find_hosts(Pred, Start, Limit) when is_function(Pred, 1), is_integer(Limit), is_
|
|||||||
|
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Items} when is_list(Items) ->
|
{atomic, Hosts0} when is_list(Hosts0) ->
|
||||||
Items1 = lists:reverse(Items),
|
Hosts = sort(Hosts0),
|
||||||
{ok, lists:sublist(Items1, Start + 1, Limit), length(Items1)};
|
Len = length(Hosts),
|
||||||
|
case Len >= Start + 1 of
|
||||||
|
true ->
|
||||||
|
{ok, lists:sublist(Hosts, Start + 1, Limit), Len};
|
||||||
|
false ->
|
||||||
|
{ok, [], Len}
|
||||||
|
end;
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec add_host(Host :: #host{}) -> ok | {error, Reason :: any()}.
|
-spec add_host(Host :: #host{}) -> ok | {error, Reason :: binary()}.
|
||||||
add_host(Host = #host{serial_number = SerialNumber}) ->
|
add_host(Host = #host{serial_number = SerialNumber}) ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
Q = qlc:q([E || E <- mnesia:table(host), E#host.serial_number =:= SerialNumber]),
|
Q = qlc:q([E || E <- mnesia:table(host), E#host.serial_number =:= SerialNumber]),
|
||||||
case qlc:e(Q) of
|
case qlc:e(Q) of
|
||||||
[_|_] ->
|
[_SomeHost|_] ->
|
||||||
mnesia:abort(<<"serial_number exists">>);
|
mnesia:abort(<<"serial_number exists">>);
|
||||||
[] ->
|
[] ->
|
||||||
mnesia:write(host, Host, write)
|
mnesia:write(host, Host, write)
|
||||||
@ -95,7 +107,7 @@ add_host(Host = #host{serial_number = SerialNumber}) ->
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, _} ->
|
{atomic, ok} ->
|
||||||
ok;
|
ok;
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
@ -108,8 +120,7 @@ change_status(HostId, Status) when is_binary(HostId), is_integer(Status) ->
|
|||||||
[] ->
|
[] ->
|
||||||
mnesia:abort(<<"host not found">>);
|
mnesia:abort(<<"host not found">>);
|
||||||
[Host] ->
|
[Host] ->
|
||||||
NHost = Host#host{status = Status},
|
mnesia:write(host, Host#host{status = Status}, write)
|
||||||
mnesia:write(host, NHost, write)
|
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
@ -184,13 +195,12 @@ table_size() ->
|
|||||||
%% helper methods
|
%% helper methods
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
to_map(#host{host_id = HostId, name = Name, model = Model, cell_id = CellId, activated_ts = ActivatedTs, update_ts = UpdateTs, status = Status,
|
%% 主机信息的排序
|
||||||
metric = #host_metric{
|
sort(Hosts) when is_list(Hosts) ->
|
||||||
cpus = Cpus,
|
lists:sort(fun(#host{name = N1}, #host{name = N2}) -> N1 < N2 end, Hosts).
|
||||||
cpu_temperature = CpuTemperature,
|
|
||||||
memory = #memory_metric{used = MemoryUsed, total = MemoryTotal},
|
%% 将数据转换成hash
|
||||||
disk = #disk_metric{used = DiskUsed, total = DiskTotal},
|
to_map(#host{host_id = HostId, name = Name, model = Model, cell_id = CellId, activated_ts = ActivatedTs, update_ts = UpdateTs, status = Status, metric = Metric}) ->
|
||||||
interfaces = Interfaces}}) ->
|
|
||||||
#{
|
#{
|
||||||
<<"host_id">> => HostId,
|
<<"host_id">> => HostId,
|
||||||
<<"name">> => Name,
|
<<"name">> => Name,
|
||||||
@ -199,27 +209,44 @@ to_map(#host{host_id = HostId, name = Name, model = Model, cell_id = CellId, act
|
|||||||
<<"activated_ts">> => ActivatedTs,
|
<<"activated_ts">> => ActivatedTs,
|
||||||
<<"update_ts">> => UpdateTs,
|
<<"update_ts">> => UpdateTs,
|
||||||
<<"status">> => Status,
|
<<"status">> => Status,
|
||||||
<<"metric">> => #{
|
<<"metric">> => host_metric(Metric)
|
||||||
<<"cpus">> => lists:map(fun(#cpu_metric{num = Num, load = Load}) ->
|
|
||||||
#{<<"num">> => Num, <<"load">> => Load }
|
|
||||||
end,
|
|
||||||
Cpus),
|
|
||||||
<<"cpu_temperature">> => CpuTemperature,
|
|
||||||
<<"memory">> => #{
|
|
||||||
<<"used">> => MemoryUsed,
|
|
||||||
<<"total">> => MemoryTotal
|
|
||||||
},
|
|
||||||
<<"disk">> => #{
|
|
||||||
<<"used">> => DiskUsed,
|
|
||||||
<<"total">> => DiskTotal
|
|
||||||
},
|
|
||||||
<<"interfaces">> => lists:map(fun(#interface_metric{name = IName, desc = IDesc, status = IStatus, detail = IDetail}) ->
|
|
||||||
#{
|
|
||||||
<<"name">> => IName,
|
|
||||||
<<"desc">> => IDesc,
|
|
||||||
<<"status">> => IStatus,
|
|
||||||
<<"detatil">> => IDetail
|
|
||||||
}
|
|
||||||
end, Interfaces)
|
|
||||||
}
|
|
||||||
}.
|
}.
|
||||||
|
|
||||||
|
host_metric(undefined) ->
|
||||||
|
#{};
|
||||||
|
host_metric(#host_metric{cpus = Cpus, cpu_temperature = CpuTemperature, memory = Memory, disk = Disk, interfaces = Interfaces}) ->
|
||||||
|
#{
|
||||||
|
<<"cpus">> => host_cpus(Cpus),
|
||||||
|
<<"cpu_temperature">> => CpuTemperature,
|
||||||
|
<<"memory">> => host_memory(Memory),
|
||||||
|
<<"disk">> => host_disk(Disk),
|
||||||
|
<<"interfaces">> => host_interfaces(Interfaces)
|
||||||
|
}.
|
||||||
|
|
||||||
|
host_cpus(Cpus) when is_list(Cpus) ->
|
||||||
|
lists:map(fun(#cpu_metric{num = Num, load = Load}) -> #{<<"num">> => Num, <<"load">> => Load } end, Cpus);
|
||||||
|
host_cpus(_) ->
|
||||||
|
[].
|
||||||
|
|
||||||
|
host_memory(#memory_metric{used = MemoryUsed, total = MemoryTotal}) ->
|
||||||
|
#{<<"used">> => MemoryUsed, <<"total">> => MemoryTotal};
|
||||||
|
host_memory(_) ->
|
||||||
|
#{}.
|
||||||
|
|
||||||
|
host_disk(#disk_metric{used = DiskUsed, total = DiskTotal}) ->
|
||||||
|
#{<<"used">> => DiskUsed, <<"total">> => DiskTotal};
|
||||||
|
host_disk(_) ->
|
||||||
|
#{}.
|
||||||
|
|
||||||
|
%% 转换接口信息
|
||||||
|
host_interfaces(Interfaces) when is_list(Interfaces) ->
|
||||||
|
lists:map(fun(#interface_metric{name = IName, desc = IDesc, status = IStatus, detail = IDetail}) ->
|
||||||
|
#{
|
||||||
|
<<"name">> => IName,
|
||||||
|
<<"desc">> => IDesc,
|
||||||
|
<<"status">> => IStatus,
|
||||||
|
<<"detatil">> => IDetail
|
||||||
|
}
|
||||||
|
end, Interfaces);
|
||||||
|
host_interfaces(_) ->
|
||||||
|
[].
|
||||||
@ -13,6 +13,8 @@
|
|||||||
%% API
|
%% API
|
||||||
-export([generate/1]).
|
-export([generate/1]).
|
||||||
|
|
||||||
|
%% 生成对应的自增id
|
||||||
|
-spec generate(Name :: string()) -> {ok, Id :: integer()} | {error, Reason :: any()}.
|
||||||
generate(Name) when is_list(Name) ->
|
generate(Name) when is_list(Name) ->
|
||||||
case mnesia:transaction(fun() -> mnesia:dirty_update_counter(id_generator, Name, 1) end) of
|
case mnesia:transaction(fun() -> mnesia:dirty_update_counter(id_generator, Name, 1) end) of
|
||||||
{atomic, Id} ->
|
{atomic, Id} ->
|
||||||
|
|||||||
@ -30,9 +30,15 @@ get_issue(IssueId) when is_integer(IssueId) ->
|
|||||||
{ok, Items :: list(), TotalNum :: integer()} |
|
{ok, Items :: list(), TotalNum :: integer()} |
|
||||||
{error, Reason :: any()}.
|
{error, Reason :: any()}.
|
||||||
get_issues(Spec, Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
|
get_issues(Spec, Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
|
||||||
Items = mnesia:dirty_select(?TAB_NAME, [Spec]),
|
Issues0 = mnesia:dirty_select(?TAB_NAME, [Spec]),
|
||||||
NItems = lists:sublist(Items, Start + 1, Limit),
|
Issues = sort(Issues0),
|
||||||
{ok, NItems, length(Items)}.
|
Len = length(Issues),
|
||||||
|
case Len >= Start + 1 of
|
||||||
|
true ->
|
||||||
|
{ok, lists:sublist(Issues, Start + 1, Limit), Len};
|
||||||
|
false ->
|
||||||
|
{ok, [], Len}
|
||||||
|
end.
|
||||||
|
|
||||||
-spec get_user_issues(UserId :: integer(), Start :: integer(), Limit :: integer()) ->
|
-spec get_user_issues(UserId :: integer(), Start :: integer(), Limit :: integer()) ->
|
||||||
{ok, Items :: [#host{}], Num :: integer()} |
|
{ok, Items :: [#host{}], Num :: integer()} |
|
||||||
@ -43,8 +49,15 @@ get_user_issues(UserId, Start, Limit) when is_integer(UserId), is_integer(Limit)
|
|||||||
qlc:e(Q)
|
qlc:e(Q)
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Items} when is_list(Items) ->
|
{atomic, Issues0} when is_list(Issues0) ->
|
||||||
{ok, lists:sublist(Items, Start + 1, Limit), length(Items)};
|
Issues = sort(Issues0),
|
||||||
|
Len = length(Issues),
|
||||||
|
case Len >= Start + 1 of
|
||||||
|
true ->
|
||||||
|
{ok, lists:sublist(Issues, Start + 1, Limit), Len};
|
||||||
|
false ->
|
||||||
|
{ok, [], Len}
|
||||||
|
end;
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
end.
|
end.
|
||||||
@ -52,7 +65,7 @@ get_user_issues(UserId, Start, Limit) when is_integer(UserId), is_integer(Limit)
|
|||||||
-spec add_issue(Issue :: #issue{}) -> ok | {error, Reason :: any()}.
|
-spec add_issue(Issue :: #issue{}) -> ok | {error, Reason :: any()}.
|
||||||
add_issue(Issue = #issue{}) ->
|
add_issue(Issue = #issue{}) ->
|
||||||
case mnesia:transaction(fun() -> mnesia:write(?TAB_NAME, Issue, write) end) of
|
case mnesia:transaction(fun() -> mnesia:write(?TAB_NAME, Issue, write) end) of
|
||||||
{atomic, _} ->
|
{atomic, ok} ->
|
||||||
ok;
|
ok;
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
@ -92,6 +105,10 @@ table_size() ->
|
|||||||
%% helper methods
|
%% helper methods
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
%% 默认按照id倒序进行排序
|
||||||
|
sort(Issues) when is_list(Issues) ->
|
||||||
|
lists:sort(fun(#issue{issue_id = Id0}, #issue{issue_id = Id1}) -> Id0 < Id1 end, Issues).
|
||||||
|
|
||||||
to_map(#issue{issue_id = IssueId, name = Name, uid = Uid, deploy_type = DeployType, assoc_id = AssocId, hosts = Hosts, timeout = Timeout,
|
to_map(#issue{issue_id = IssueId, name = Name, uid = Uid, deploy_type = DeployType, assoc_id = AssocId, hosts = Hosts, timeout = Timeout,
|
||||||
create_ts = CreateTs, results = Results, status = Status}) ->
|
create_ts = CreateTs, results = Results, status = Status}) ->
|
||||||
|
|
||||||
|
|||||||
@ -17,14 +17,14 @@
|
|||||||
|
|
||||||
get_router(RouterId) when is_integer(RouterId) ->
|
get_router(RouterId) when is_integer(RouterId) ->
|
||||||
case mnesia:dirty_read(router, RouterId) of
|
case mnesia:dirty_read(router, RouterId) of
|
||||||
[Router = #router{}] ->
|
[Router] ->
|
||||||
{ok, Router};
|
{ok, Router};
|
||||||
_ ->
|
_ ->
|
||||||
undefined
|
undefined
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% 获取app信息
|
%% 获取app信息
|
||||||
-spec get_all_routers() -> {ok, Items :: list()} | {error, Reason :: any()}.
|
-spec get_all_routers() -> {ok, Routers :: list()} | {error, Reason :: any()}.
|
||||||
get_all_routers() ->
|
get_all_routers() ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
Q = qlc:q([E || E <- mnesia:table(router)]),
|
Q = qlc:q([E || E <- mnesia:table(router)]),
|
||||||
@ -32,13 +32,13 @@ get_all_routers() ->
|
|||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Routers} ->
|
{atomic, Routers} ->
|
||||||
{ok, Routers};
|
{ok, sort(Routers)};
|
||||||
{aborted, _} ->
|
{aborted, Reason} ->
|
||||||
error
|
{error, Reason}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% 获取app信息
|
%% 获取app信息
|
||||||
-spec get_all_valid_routers() -> {ok, Items :: list()} | {error, Reason :: any()}.
|
-spec get_all_valid_routers() -> {ok, Routers :: list()} | {error, Reason :: any()}.
|
||||||
get_all_valid_routers() ->
|
get_all_valid_routers() ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
Q = qlc:q([E || E <- mnesia:table(router), E#router.status =:= 1]),
|
Q = qlc:q([E || E <- mnesia:table(router), E#router.status =:= 1]),
|
||||||
@ -46,9 +46,9 @@ get_all_valid_routers() ->
|
|||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Routers} ->
|
{atomic, Routers} ->
|
||||||
{ok, Routers};
|
{ok, sort(Routers)};
|
||||||
{aborted, _} ->
|
{aborted, Reason} ->
|
||||||
error
|
{error, Reason}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% 获取app信息
|
%% 获取app信息
|
||||||
@ -56,10 +56,15 @@ get_all_valid_routers() ->
|
|||||||
{ok, Items :: list(), TotalNum :: integer()} |
|
{ok, Items :: list(), TotalNum :: integer()} |
|
||||||
{error, Reason :: any()}.
|
{error, Reason :: any()}.
|
||||||
get_routers(Spec, Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
|
get_routers(Spec, Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
|
||||||
Items0 = mnesia:dirty_select(router, [Spec]),
|
Routers0 = mnesia:dirty_select(router, [Spec]),
|
||||||
Items = lists:reverse(Items0),
|
Routers = sort(Routers0),
|
||||||
NItems = lists:sublist(Items, Start + 1, Limit),
|
Len = length(Routers),
|
||||||
{ok, NItems, length(Items)}.
|
case Len >= Start + 1 of
|
||||||
|
true ->
|
||||||
|
{ok, lists:sublist(Routers, Start + 1, Limit), Len};
|
||||||
|
false ->
|
||||||
|
{ok, [], Len}
|
||||||
|
end.
|
||||||
|
|
||||||
-spec add_router(Router :: #router{}) -> ok | {error, Reason :: any()}.
|
-spec add_router(Router :: #router{}) -> ok | {error, Reason :: any()}.
|
||||||
add_router(Router = #router{}) ->
|
add_router(Router = #router{}) ->
|
||||||
@ -121,6 +126,9 @@ table_size() ->
|
|||||||
%% helper methods
|
%% helper methods
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
sort(Routers) when is_list(Routers) ->
|
||||||
|
lists:sort(fun(#router{router_id = Id0}, #router{router_id = Id1}) -> Id0 < Id1 end, Routers).
|
||||||
|
|
||||||
to_map(#router{router_id = RouterId, name = Name, status = Status, endpoint = Endpoint}) ->
|
to_map(#router{router_id = RouterId, name = Name, status = Status, endpoint = Endpoint}) ->
|
||||||
EndpointInfo = case Endpoint of
|
EndpointInfo = case Endpoint of
|
||||||
undefined ->
|
undefined ->
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
%%% @author licheng5
|
%%% @author licheng5
|
||||||
%%% @copyright (C) 2021, <COMPANY>
|
%%% @copyright (C) 2021, <COMPANY>
|
||||||
%%% @doc
|
%%% @doc
|
||||||
%%%
|
%%% 场景部署关系表
|
||||||
%%% @end
|
%%% @end
|
||||||
%%% Created : 27. 4月 2021 下午4:38
|
%%% Created : 27. 4月 2021 下午4:38
|
||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
@ -17,7 +17,7 @@
|
|||||||
-export([get_host_deploy_list/1, get_scenario_deploy_list/1, add_deploy/1, change_status/2, delete/1, table_size/0]).
|
-export([get_host_deploy_list/1, get_scenario_deploy_list/1, add_deploy/1, change_status/2, delete/1, table_size/0]).
|
||||||
-export([to_map/1]).
|
-export([to_map/1]).
|
||||||
|
|
||||||
-spec get_host_deploy_list(HostId :: binary()) -> {ok, List :: [#scenario_deploy{}]} | error.
|
-spec get_host_deploy_list(HostId :: binary()) -> {ok, List :: [#scenario_deploy{}]} | {error, Reason :: any()}.
|
||||||
get_host_deploy_list(HostId) when is_binary(HostId) ->
|
get_host_deploy_list(HostId) when is_binary(HostId) ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
Q = qlc:q([E || E <- mnesia:table(?TAB_NAME), E#scenario_deploy.host_id =:= HostId]),
|
Q = qlc:q([E || E <- mnesia:table(?TAB_NAME), E#scenario_deploy.host_id =:= HostId]),
|
||||||
@ -25,12 +25,12 @@ get_host_deploy_list(HostId) when is_binary(HostId) ->
|
|||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Items} ->
|
{atomic, Items} ->
|
||||||
{ok, Items};
|
{ok, sort(Items)};
|
||||||
{aborted, _} ->
|
{aborted, Reason} ->
|
||||||
error
|
{error, Reason}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec get_scenario_deploy_list(ScenarioId :: integer()) -> {ok, List :: [#scenario_deploy{}]} | error.
|
-spec get_scenario_deploy_list(ScenarioId :: integer()) -> {ok, List :: [#scenario_deploy{}]} | {error, Reason :: any()}.
|
||||||
get_scenario_deploy_list(ScenarioId) when is_integer(ScenarioId) ->
|
get_scenario_deploy_list(ScenarioId) when is_integer(ScenarioId) ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
Q = qlc:q([E || E <- mnesia:table(?TAB_NAME), E#scenario_deploy.scenario_id =:= ScenarioId]),
|
Q = qlc:q([E || E <- mnesia:table(?TAB_NAME), E#scenario_deploy.scenario_id =:= ScenarioId]),
|
||||||
@ -38,9 +38,9 @@ get_scenario_deploy_list(ScenarioId) when is_integer(ScenarioId) ->
|
|||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Items} ->
|
{atomic, Items} ->
|
||||||
{ok, Items};
|
{ok, sort(Items)};
|
||||||
{aborted, _} ->
|
{aborted, Reason} ->
|
||||||
error
|
{error, Reason}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec add_deploy(Deploy :: #scenario_deploy{}) -> ok | {error, Reason :: any()}.
|
-spec add_deploy(Deploy :: #scenario_deploy{}) -> ok | {error, Reason :: any()}.
|
||||||
@ -86,6 +86,9 @@ table_size() ->
|
|||||||
%% helper methods
|
%% helper methods
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
sort(DeployList) when is_list(DeployList) ->
|
||||||
|
lists:sort(fun(#scenario_deploy{deploy_id = Id0}, #scenario_deploy{deploy_id = Id1}) -> Id0 < Id1 end, DeployList).
|
||||||
|
|
||||||
to_map(#scenario_deploy{deploy_id = DeployId, scenario_id = ScenarioId, host_id = HostId, create_ts = CreateTs, update_ts = UpdateTs, status = Status}) ->
|
to_map(#scenario_deploy{deploy_id = DeployId, scenario_id = ScenarioId, host_id = HostId, create_ts = CreateTs, update_ts = UpdateTs, status = Status}) ->
|
||||||
#{
|
#{
|
||||||
<<"deploy_id">> => DeployId,
|
<<"deploy_id">> => DeployId,
|
||||||
|
|||||||
@ -11,12 +11,15 @@
|
|||||||
-include("iot.hrl").
|
-include("iot.hrl").
|
||||||
-include_lib("stdlib/include/qlc.hrl").
|
-include_lib("stdlib/include/qlc.hrl").
|
||||||
|
|
||||||
|
-define(TAB_NAME, scenario).
|
||||||
|
|
||||||
%% API
|
%% API
|
||||||
-export([get_scenario/1, get_scenario_list/3, add_scenario/1, change_status/2, delete/1, table_size/0]).
|
-export([get_scenario/1, get_scenario_list/3, add_scenario/1, change_status/2, delete/1, table_size/0]).
|
||||||
-export([to_map/1, match_spec/1]).
|
-export([to_map/1, match_spec/1]).
|
||||||
|
|
||||||
|
-spec get_scenario(ScenarioId :: integer()) -> {ok, #scenario{}} | undefined.
|
||||||
get_scenario(ScenarioId) when is_integer(ScenarioId) ->
|
get_scenario(ScenarioId) when is_integer(ScenarioId) ->
|
||||||
case mnesia:dirty_read(scenario, ScenarioId) of
|
case mnesia:dirty_read(?TAB_NAME, ScenarioId) of
|
||||||
[Scenario = #scenario{}] ->
|
[Scenario = #scenario{}] ->
|
||||||
{ok, Scenario};
|
{ok, Scenario};
|
||||||
_ ->
|
_ ->
|
||||||
@ -28,15 +31,20 @@ get_scenario(ScenarioId) when is_integer(ScenarioId) ->
|
|||||||
{ok, Items :: list(), TotalNum :: integer()} |
|
{ok, Items :: list(), TotalNum :: integer()} |
|
||||||
{error, Reason :: any()}.
|
{error, Reason :: any()}.
|
||||||
get_scenario_list(Spec, Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
|
get_scenario_list(Spec, Start, Limit) when is_integer(Limit), is_integer(Start), Start >= 0, Limit > 0 ->
|
||||||
Items0 = mnesia:dirty_select(scenario, [Spec]),
|
Scenarios0 = mnesia:dirty_select(?TAB_NAME, [Spec]),
|
||||||
Items = lists:reverse(Items0),
|
Scenarios = sort(Scenarios0),
|
||||||
NItems = lists:sublist(Items, Start + 1, Limit),
|
Len = length(Scenarios),
|
||||||
{ok, NItems, length(Items)}.
|
case Len >= Start + 1 of
|
||||||
|
true ->
|
||||||
|
{ok, lists:sublist(Scenarios, Start + 1, Limit), Len};
|
||||||
|
false ->
|
||||||
|
{ok, [], Len}
|
||||||
|
end.
|
||||||
|
|
||||||
-spec add_scenario(Scenario :: #scenario{}) -> ok | {error, Reason :: any()}.
|
-spec add_scenario(Scenario :: #scenario{}) -> ok | {error, Reason :: any()}.
|
||||||
add_scenario(Scenario = #scenario{}) ->
|
add_scenario(Scenario = #scenario{}) ->
|
||||||
case mnesia:transaction(fun() -> mnesia:write(scenario, Scenario, write) end) of
|
case mnesia:transaction(fun() -> mnesia:write(?TAB_NAME, Scenario, write) end) of
|
||||||
{atomic, _} ->
|
{atomic, ok} ->
|
||||||
ok;
|
ok;
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
@ -49,7 +57,7 @@ change_status(ScenarioId, Status) when is_integer(ScenarioId), is_integer(Status
|
|||||||
[] ->
|
[] ->
|
||||||
mnesia:abort(<<"scenario not found">>);
|
mnesia:abort(<<"scenario not found">>);
|
||||||
[Scenario] ->
|
[Scenario] ->
|
||||||
mnesia:write(scenario, Scenario#scenario{status = Status}, write)
|
mnesia:write(?TAB_NAME, Scenario#scenario{status = Status}, write)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
@ -61,7 +69,7 @@ change_status(ScenarioId, Status) when is_integer(ScenarioId), is_integer(Status
|
|||||||
|
|
||||||
-spec delete(ScenarioId :: binary()) -> ok | {error, Reason :: any()}.
|
-spec delete(ScenarioId :: binary()) -> ok | {error, Reason :: any()}.
|
||||||
delete(ScenarioId) when is_integer(ScenarioId) ->
|
delete(ScenarioId) when is_integer(ScenarioId) ->
|
||||||
case mnesia:transaction(fun() -> mnesia:delete(scenario, ScenarioId, write) end) of
|
case mnesia:transaction(fun() -> mnesia:delete(?TAB_NAME, ScenarioId, write) end) of
|
||||||
{atomic, ok} ->
|
{atomic, ok} ->
|
||||||
ok;
|
ok;
|
||||||
{aborted, Reason} ->
|
{aborted, Reason} ->
|
||||||
@ -93,6 +101,9 @@ table_size() ->
|
|||||||
%% helper methods
|
%% helper methods
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
sort(Scenarios) when is_list(Scenarios) ->
|
||||||
|
lists:sort(fun(#scenario{scenario_id = Id0}, #scenario{scenario_id = Id1}) -> Id0 < Id1 end, Scenarios).
|
||||||
|
|
||||||
to_map(#scenario{scenario_id = ScenarioId, name = Name, desc = Desc, rule = Rule, update_ts = UpdateTs, status = Status}) ->
|
to_map(#scenario{scenario_id = ScenarioId, name = Name, desc = Desc, rule = Rule, update_ts = UpdateTs, status = Status}) ->
|
||||||
#{
|
#{
|
||||||
<<"scenario_id">> => ScenarioId,
|
<<"scenario_id">> => ScenarioId,
|
||||||
|
|||||||
@ -11,43 +11,47 @@
|
|||||||
-include("iot.hrl").
|
-include("iot.hrl").
|
||||||
-include_lib("stdlib/include/qlc.hrl").
|
-include_lib("stdlib/include/qlc.hrl").
|
||||||
|
|
||||||
|
-define(TAB_NAME, terminal).
|
||||||
|
|
||||||
%% API
|
%% API
|
||||||
-export([get_all_terminals/0, get_host_terminals/1, get_status_stat/0, table_size/0]).
|
-export([get_all_terminals/0, get_host_terminals/1, get_status_stat/0, table_size/0]).
|
||||||
-export([change_status/2, delete/1, to_map/1, add_terminal/1]).
|
-export([change_status/2, delete/1, to_map/1, add_terminal/1]).
|
||||||
|
|
||||||
%% 获取app信息
|
%% 获取app信息
|
||||||
|
-spec get_all_terminals() -> {ok, Terminals :: [#terminal{}]} | {error, Reason :: any()}.
|
||||||
get_all_terminals() ->
|
get_all_terminals() ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
Q = qlc:q([E || E <- mnesia:table(terminal)]),
|
Q = qlc:q([E || E <- mnesia:table(?TAB_NAME)]),
|
||||||
qlc:e(Q)
|
qlc:e(Q)
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Items} when is_list(Items) ->
|
{atomic, Terminals} when is_list(Terminals) ->
|
||||||
{ok, Items};
|
{ok, sort(Terminals)};
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
-spec get_host_terminals(HostId :: binary()) -> {ok, Terminals :: [#terminal{}]} | {error, Reason :: any()}.
|
||||||
get_host_terminals(HostId) when is_binary(HostId) ->
|
get_host_terminals(HostId) when is_binary(HostId) ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
Q = qlc:q([E || E <- mnesia:table(terminal), E#terminal.host_id =:= HostId]),
|
Q = qlc:q([E || E <- mnesia:table(?TAB_NAME), E#terminal.host_id =:= HostId]),
|
||||||
qlc:e(Q)
|
qlc:e(Q)
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
{atomic, Items} when is_list(Items) ->
|
{atomic, Terminals} when is_list(Terminals) ->
|
||||||
{ok, Items};
|
{ok, sort(Terminals)};
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% 获取状态分组统计信息
|
%% 获取状态分组统计信息
|
||||||
-spec get_status_stat() -> {ok, #{}} | {error, Reason :: any()}.
|
-spec get_status_stat() -> {ok, Stat :: #{}} | {error, Reason :: any()}.
|
||||||
get_status_stat() ->
|
get_status_stat() ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
mnesia:foldl(fun(#terminal{status = Status}, Acc) ->
|
mnesia:foldl(fun(#terminal{status = Status}, Acc) ->
|
||||||
Num = maps:get(Status, Acc, 0),
|
Num = maps:get(Status, Acc, 0),
|
||||||
Acc#{Status => Num + 1}
|
Acc#{Status => Num + 1}
|
||||||
end, #{}, terminal)
|
end, #{}, ?TAB_NAME)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
@ -57,22 +61,23 @@ get_status_stat() ->
|
|||||||
{error, Reason}
|
{error, Reason}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
-spec add_terminal(Terminal :: #terminal{}) -> ok | {error, Reason :: any()}.
|
||||||
add_terminal(Terminal = #terminal{}) ->
|
add_terminal(Terminal = #terminal{}) ->
|
||||||
case mnesia:transaction(fun() -> mnesia:write(terminal, Terminal, write) end) of
|
case mnesia:transaction(fun() -> mnesia:write(?TAB_NAME, Terminal, write) end) of
|
||||||
{atomic, _} ->
|
{atomic, _} ->
|
||||||
ok;
|
ok;
|
||||||
{aborted, Error} ->
|
{aborted, Error} ->
|
||||||
{error, Error}
|
{error, Error}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
change_status(TerminalId, Status) when is_binary(TerminalId), is_integer(Status) ->
|
-spec change_status(TerminalId :: integer(), Status :: integer()) -> ok | {error, Reason :: any()}.
|
||||||
|
change_status(TerminalId, Status) when is_integer(TerminalId), is_integer(Status) ->
|
||||||
Fun = fun() ->
|
Fun = fun() ->
|
||||||
case mnesia:read(terminal, TerminalId) of
|
case mnesia:read(?TAB_NAME, TerminalId) of
|
||||||
[] ->
|
[] ->
|
||||||
mnesia:abort(<<"terminal not found">>);
|
mnesia:abort(<<"terminal not found">>);
|
||||||
[Terminal] ->
|
[Terminal] ->
|
||||||
NTerminal = Terminal#host{status = Status},
|
mnesia:write(?TAB_NAME, Terminal#host{status = Status}, write)
|
||||||
mnesia:write(terminal, NTerminal, write)
|
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(Fun) of
|
case mnesia:transaction(Fun) of
|
||||||
@ -82,8 +87,9 @@ change_status(TerminalId, Status) when is_binary(TerminalId), is_integer(Status)
|
|||||||
{error, Reason}
|
{error, Reason}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
delete(TerminalId) when is_binary(TerminalId) ->
|
-spec delete(TerminalId :: integer()) -> ok | {error, Reason :: any()}.
|
||||||
case mnesia:transaction(fun() -> mnesia:delete(terminal, TerminalId, write) end) of
|
delete(TerminalId) when is_integer(TerminalId) ->
|
||||||
|
case mnesia:transaction(fun() -> mnesia:delete(?TAB_NAME, TerminalId, write) end) of
|
||||||
{atomic, ok} ->
|
{atomic, ok} ->
|
||||||
ok;
|
ok;
|
||||||
{aborted, Reason} ->
|
{aborted, Reason} ->
|
||||||
@ -94,11 +100,19 @@ delete(TerminalId) when is_binary(TerminalId) ->
|
|||||||
table_size() ->
|
table_size() ->
|
||||||
mnesia:table_info(host, size).
|
mnesia:table_info(host, size).
|
||||||
|
|
||||||
to_map(#terminal{terminal_id = TerminalId, host_id = HostId, name = Name, code = Code, access_protocol = AccessProtocol,
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%% helper methods
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
sort(Terminals) when is_list(Terminals) ->
|
||||||
|
lists:sort(fun(#terminal{terminal_id = Id0}, #terminal{terminal_id = Id1}) -> Id0 < Id1 end, Terminals).
|
||||||
|
|
||||||
|
to_map(#terminal{terminal_id = TerminalId, host_id = HostId, serial_number = SerialNumber, name = Name, code = Code, access_protocol = AccessProtocol,
|
||||||
product_id = ProductId, vendor_id = VendorId, model = Model, cell_id = CellId, status = Status, update_ts = UpdateTs}) ->
|
product_id = ProductId, vendor_id = VendorId, model = Model, cell_id = CellId, status = Status, update_ts = UpdateTs}) ->
|
||||||
#{
|
#{
|
||||||
<<"terminal_id">> => TerminalId,
|
<<"terminal_id">> => TerminalId,
|
||||||
<<"host_id">> => HostId,
|
<<"host_id">> => HostId,
|
||||||
|
<<"serial_number">> => SerialNumber,
|
||||||
<<"name">> => Name,
|
<<"name">> => Name,
|
||||||
<<"code">> => Code,
|
<<"code">> => Code,
|
||||||
<<"access_protocol">> => AccessProtocol,
|
<<"access_protocol">> => AccessProtocol,
|
||||||
@ -109,9 +123,3 @@ to_map(#terminal{terminal_id = TerminalId, host_id = HostId, name = Name, code =
|
|||||||
<<"status">> => Status,
|
<<"status">> => Status,
|
||||||
<<"update_ts">> => UpdateTs
|
<<"update_ts">> => UpdateTs
|
||||||
}.
|
}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
%% helper methods
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
||||||
Loading…
x
Reference in New Issue
Block a user