102 lines
4.3 KiB
Erlang
102 lines
4.3 KiB
Erlang
%%%-------------------------------------------------------------------
|
|
%%% @author licheng5
|
|
%%% @copyright (C) 2020, <COMPANY>
|
|
%%% @doc
|
|
%%%
|
|
%%% @end
|
|
%%% Created : 26. 4月 2020 3:36 下午
|
|
%%%-------------------------------------------------------------------
|
|
-module(host_handler).
|
|
-author("licheng5").
|
|
-include("iot.hrl").
|
|
|
|
%% API
|
|
-export([handle_request/4]).
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%% helper methods
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
handle_request("GET", "/host/metric", #{<<"uuid">> := UUID}, _) ->
|
|
lager:debug("[host_handler] get host metric uuid is: ~p", [UUID]),
|
|
case iot_host:get_pid(UUID) of
|
|
undefined ->
|
|
{ok, 200, iot_util:json_error(404, <<"host not found">>)};
|
|
Pid when is_pid(Pid) ->
|
|
{ok, MetricInfo} = iot_host:get_metric(Pid),
|
|
case map_size(MetricInfo) > 0 of
|
|
true ->
|
|
{ok, 200, iot_util:json_data(MetricInfo)};
|
|
false ->
|
|
{ok, 200, iot_util:json_error(404, <<"no metric info">>)}
|
|
end
|
|
end;
|
|
|
|
%% 处理主机的授权的 取消激活
|
|
handle_request("GET", "/host/status", #{<<"uuid">> := UUID}, _) when is_binary(UUID) ->
|
|
case iot_host:get_pid(UUID) of
|
|
undefined ->
|
|
{ok, 200, iot_util:json_error(404, <<"host not found">>)};
|
|
Pid when is_pid(Pid) ->
|
|
{ok, StatusInfo} = iot_host:get_status(Pid),
|
|
{ok, 200, iot_util:json_data(StatusInfo)}
|
|
end;
|
|
|
|
%% 重新加载对应的主机信息
|
|
handle_request("POST", "/host/reload", _, #{<<"uuid">> := UUID}) when is_binary(UUID) ->
|
|
lager:debug("[host_handler] will reload host uuid: ~p", [UUID]),
|
|
case iot_host_sup:ensured_host_started(UUID) of
|
|
{ok, Pid} when is_pid(Pid) ->
|
|
{ok, #{<<"authorize_status">> := AuthorizeStatus}} = host_bo:get_host_by_uuid(UUID),
|
|
ok = iot_host:activate(Pid, AuthorizeStatus =:= 1),
|
|
lager:debug("[host_handler] already_started reload host uuid: ~p, success", [UUID]),
|
|
{ok, 200, iot_util:json_data(<<"success">>)};
|
|
Error ->
|
|
lager:debug("[host_handler] reload host uuid: ~p, error: ~p", [UUID, Error]),
|
|
{ok, 200, iot_util:json_error(404, <<"reload error">>)}
|
|
end;
|
|
|
|
%% 删除对应的主机信息
|
|
handle_request("POST", "/host/delete", _, #{<<"uuid">> := UUID}) when is_binary(UUID) ->
|
|
case iot_host_sup:delete_host(UUID) of
|
|
ok ->
|
|
lager:debug("[host_handler] will delete host uuid: ~p", [UUID]),
|
|
{ok, 200, iot_util:json_data(<<"success">>)};
|
|
{error, Reason} ->
|
|
lager:debug("[host_handler] delete host uuid: ~p, get error is: ~p", [UUID, Reason]),
|
|
{ok, 200, iot_util:json_error(404, <<"error">>)}
|
|
end;
|
|
|
|
%% 处理主机的授权的激活
|
|
handle_request("POST", "/host/activate", _, #{<<"uuid">> := UUID, <<"auth">> := true}) when is_binary(UUID) ->
|
|
case iot_host_sup:ensured_host_started(UUID) of
|
|
{error, Reason} ->
|
|
lager:debug("[host_handler] activate host_id: ~p, failed with reason: ~p", [UUID, Reason]),
|
|
{ok, 200, iot_util:json_error(400, <<"host not found">>)};
|
|
{ok, Pid} when is_pid(Pid) ->
|
|
lager:debug("[host_handler] activate host_id: ~p, start", [UUID]),
|
|
ok = iot_host:activate(Pid, true),
|
|
|
|
{ok, 200, iot_util:json_data(<<"success">>)}
|
|
end;
|
|
|
|
%% 处理主机的授权的 取消激活
|
|
handle_request("POST", "/host/activate", _, #{<<"uuid">> := UUID, <<"auth">> := false}) when is_binary(UUID) ->
|
|
case iot_host_sup:ensured_host_started(UUID) of
|
|
{error, Reason} ->
|
|
lager:debug("[host_handler] activate host_id: ~p, failed with reason: ~p", [UUID, Reason]),
|
|
{ok, 200, iot_util:json_error(400, <<"host not found">>)};
|
|
{ok, Pid} when is_pid(Pid) ->
|
|
lager:debug("[host_handler] activate host_id: ~p, start", [UUID]),
|
|
ok = iot_host:activate(Pid, false),
|
|
|
|
{ok, 200, iot_util:json_data(<<"success">>)}
|
|
end;
|
|
|
|
handle_request(_, Path, _, _) ->
|
|
Path1 = list_to_binary(Path),
|
|
{ok, 200, iot_util:json_error(-1, <<"url: ", Path1/binary, " not found">>)}.
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%% helper methods
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |