chore(gw): improve examples for _gateway_api
This commit is contained in:
parent
e48f10d2d6
commit
7c261b5356
|
@ -153,10 +153,14 @@ schema("/gateway") ->
|
||||||
#{ description => <<"Get gateway list">>
|
#{ description => <<"Get gateway list">>
|
||||||
, parameters => params_gateway_status_in_qs()
|
, parameters => params_gateway_status_in_qs()
|
||||||
, responses =>
|
, responses =>
|
||||||
?STANDARD_RESP(#{200 => ref(gateway_overview)})
|
?STANDARD_RESP(
|
||||||
|
#{200 => emqx_dashboard_swagger:schema_with_example(
|
||||||
|
hoconsc:array(ref(gateway_overview)),
|
||||||
|
examples_gateway_overview())})
|
||||||
},
|
},
|
||||||
post =>
|
post =>
|
||||||
#{ description => <<"Load a gateway">>
|
#{ description => <<"Load a gateway">>
|
||||||
|
%% TODO: distinguish create & response swagger schema
|
||||||
, 'requestBody' => schema_gateways_conf()
|
, 'requestBody' => schema_gateways_conf()
|
||||||
, responses =>
|
, responses =>
|
||||||
?STANDARD_RESP(#{201 => schema_gateways_conf()})
|
?STANDARD_RESP(#{201 => schema_gateways_conf()})
|
||||||
|
@ -179,7 +183,7 @@ schema("/gateway/:name") ->
|
||||||
put =>
|
put =>
|
||||||
#{ description => <<"Update the gateway configurations/status">>
|
#{ description => <<"Update the gateway configurations/status">>
|
||||||
, parameters => params_gateway_name_in_path()
|
, parameters => params_gateway_name_in_path()
|
||||||
, 'requestBody' => schema_gateways_conf()
|
, 'requestBody' => schema_update_gateways_conf()
|
||||||
, responses =>
|
, responses =>
|
||||||
?STANDARD_RESP(#{200 => schema_gateways_conf()})
|
?STANDARD_RESP(#{200 => schema_gateways_conf()})
|
||||||
}
|
}
|
||||||
|
@ -210,6 +214,7 @@ params_gateway_name_in_path() ->
|
||||||
].
|
].
|
||||||
|
|
||||||
params_gateway_status_in_qs() ->
|
params_gateway_status_in_qs() ->
|
||||||
|
%% FIXME: enum in swagger ??
|
||||||
[{status,
|
[{status,
|
||||||
mk(binary(),
|
mk(binary(),
|
||||||
#{ in => query
|
#{ in => query
|
||||||
|
@ -274,6 +279,14 @@ fields(Gw) when Gw == stomp; Gw == mqttsn;
|
||||||
[{name,
|
[{name,
|
||||||
mk(hoconsc:union([Gw]), #{ desc => <<"Gateway Name">>})}
|
mk(hoconsc:union([Gw]), #{ desc => <<"Gateway Name">>})}
|
||||||
] ++ convert_listener_struct(emqx_gateway_schema:fields(Gw));
|
] ++ convert_listener_struct(emqx_gateway_schema:fields(Gw));
|
||||||
|
|
||||||
|
fields(Gw) when Gw == update_stomp; Gw == update_mqttsn;
|
||||||
|
Gw == update_coap; Gw == update_lwm2m;
|
||||||
|
Gw == update_exproto ->
|
||||||
|
"update_" ++ GwStr = atom_to_list(Gw),
|
||||||
|
Gw1 = list_to_existing_atom(GwStr),
|
||||||
|
remove_listener_and_authn(emqx_gateway_schema:fields(Gw1));
|
||||||
|
|
||||||
fields(Listener) when Listener == tcp_listener;
|
fields(Listener) when Listener == tcp_listener;
|
||||||
Listener == ssl_listener;
|
Listener == ssl_listener;
|
||||||
Listener == udp_listener;
|
Listener == udp_listener;
|
||||||
|
@ -297,9 +310,17 @@ fields(Listener) when Listener == tcp_listener;
|
||||||
fields(gateway_stats) ->
|
fields(gateway_stats) ->
|
||||||
[{key, mk(binary(), #{})}].
|
[{key, mk(binary(), #{})}].
|
||||||
|
|
||||||
|
schema_update_gateways_conf() ->
|
||||||
|
emqx_dashboard_swagger:schema_with_examples(
|
||||||
|
hoconsc:union([ref(?MODULE, update_stomp),
|
||||||
|
ref(?MODULE, update_mqttsn),
|
||||||
|
ref(?MODULE, update_coap),
|
||||||
|
ref(?MODULE, update_lwm2m),
|
||||||
|
ref(?MODULE, update_exproto)]),
|
||||||
|
examples_update_gateway_confs()
|
||||||
|
).
|
||||||
|
|
||||||
schema_gateways_conf() ->
|
schema_gateways_conf() ->
|
||||||
%% XXX: We need convert the emqx_gateway_schema's listener map
|
|
||||||
%% structure to array
|
|
||||||
emqx_dashboard_swagger:schema_with_examples(
|
emqx_dashboard_swagger:schema_with_examples(
|
||||||
hoconsc:union([ref(?MODULE, stomp), ref(?MODULE, mqttsn),
|
hoconsc:union([ref(?MODULE, stomp), ref(?MODULE, mqttsn),
|
||||||
ref(?MODULE, coap), ref(?MODULE, lwm2m),
|
ref(?MODULE, coap), ref(?MODULE, lwm2m),
|
||||||
|
@ -316,6 +337,11 @@ convert_listener_struct(Schema) ->
|
||||||
}),
|
}),
|
||||||
lists:keystore(listeners, 1, Schema1, {listeners, ListenerSchema}).
|
lists:keystore(listeners, 1, Schema1, {listeners, ListenerSchema}).
|
||||||
|
|
||||||
|
remove_listener_and_authn(Schmea) ->
|
||||||
|
lists:keydelete(
|
||||||
|
authentication, 1,
|
||||||
|
lists:keydelete(listeners, 1, Schmea)).
|
||||||
|
|
||||||
listeners_schema(?R_REF(_Mod, tcp_listeners)) ->
|
listeners_schema(?R_REF(_Mod, tcp_listeners)) ->
|
||||||
hoconsc:array(hoconsc:union([ref(tcp_listener), ref(ssl_listener)]));
|
hoconsc:array(hoconsc:union([ref(tcp_listener), ref(ssl_listener)]));
|
||||||
listeners_schema(?R_REF(_Mod, udp_listeners)) ->
|
listeners_schema(?R_REF(_Mod, udp_listeners)) ->
|
||||||
|
@ -327,6 +353,57 @@ listeners_schema(?R_REF(_Mod, udp_tcp_listeners)) ->
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% examples
|
%% examples
|
||||||
|
|
||||||
|
examples_gateway_overview() ->
|
||||||
|
[ #{ name => <<"coap">>
|
||||||
|
, status => <<"unloaded">>
|
||||||
|
}
|
||||||
|
, #{ name => <<"exproto">>
|
||||||
|
, status => <<"unloaded">>
|
||||||
|
}
|
||||||
|
, #{ name => <<"lwm2m">>
|
||||||
|
, status => <<"running">>
|
||||||
|
, current_connections => 0
|
||||||
|
, max_connections => 1024000
|
||||||
|
, listeners =>
|
||||||
|
[ #{ id => <<"lwm2m:udp:default">>
|
||||||
|
, type => <<"udp">>
|
||||||
|
, name => <<"default">>
|
||||||
|
, running => true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
, created_at => <<"2021-12-08T14:41:26.171+08:00">>
|
||||||
|
, started_at => <<"2021-12-08T14:41:26.202+08:00">>
|
||||||
|
}
|
||||||
|
, #{ name => <<"mqttsn">>
|
||||||
|
, status => <<"stopped">>
|
||||||
|
, current_connections => 0
|
||||||
|
, max_connections => 1024000
|
||||||
|
, listeners =>
|
||||||
|
[ #{ id => <<"mqttsn:udp:default">>
|
||||||
|
, name => <<"default">>
|
||||||
|
, running => false
|
||||||
|
, type => <<"udp">>
|
||||||
|
}
|
||||||
|
]
|
||||||
|
, created_at => <<"2021-12-08T14:41:45.071+08:00">>
|
||||||
|
, stopped_at => <<"2021-12-08T14:56:35.576+08:00">>
|
||||||
|
}
|
||||||
|
, #{ name => <<"stomp">>
|
||||||
|
, status => <<"running">>
|
||||||
|
, current_connections => 0
|
||||||
|
, max_connections => 1024000
|
||||||
|
, listeners =>
|
||||||
|
[ #{ id => <<"stomp:tcp:default">>
|
||||||
|
, name => <<"default">>
|
||||||
|
, running => true
|
||||||
|
, type => <<"tcp">>
|
||||||
|
}
|
||||||
|
]
|
||||||
|
, created_at => <<"2021-12-08T14:42:15.272+08:00">>
|
||||||
|
, started_at => <<"2021-12-08T14:42:15.274+08:00">>
|
||||||
|
}
|
||||||
|
].
|
||||||
|
|
||||||
examples_gateway_confs() ->
|
examples_gateway_confs() ->
|
||||||
#{ stomp_gateway =>
|
#{ stomp_gateway =>
|
||||||
#{ summary => <<"A simple STOMP gateway configs">>
|
#{ summary => <<"A simple STOMP gateway configs">>
|
||||||
|
@ -395,7 +472,7 @@ examples_gateway_confs() ->
|
||||||
, publish_qos => <<"coap">>
|
, publish_qos => <<"coap">>
|
||||||
, listeners =>
|
, listeners =>
|
||||||
[ #{ type => <<"udp">>
|
[ #{ type => <<"udp">>
|
||||||
, name => <<"coap">>
|
, name => <<"default">>
|
||||||
, bind => <<"5683">>
|
, bind => <<"5683">>
|
||||||
, max_connections => 1024000
|
, max_connections => 1024000
|
||||||
, max_conn_rate => 1000
|
, max_conn_rate => 1000
|
||||||
|
@ -426,7 +503,7 @@ examples_gateway_confs() ->
|
||||||
}
|
}
|
||||||
, listeners =>
|
, listeners =>
|
||||||
[ #{ type => <<"udp">>
|
[ #{ type => <<"udp">>
|
||||||
, name => <<"lwm2m">>
|
, name => <<"default">>
|
||||||
, bind => <<"5783">>
|
, bind => <<"5783">>
|
||||||
, max_connections => 1024000
|
, max_connections => 1024000
|
||||||
, max_conn_rate => 1000
|
, max_conn_rate => 1000
|
||||||
|
@ -460,5 +537,90 @@ examples_gateway_confs() ->
|
||||||
}
|
}
|
||||||
}.
|
}.
|
||||||
|
|
||||||
|
examples_update_gateway_confs() ->
|
||||||
|
#{ stomp_gateway =>
|
||||||
|
#{ summary => <<"A simple STOMP gateway configs">>
|
||||||
|
, value =>
|
||||||
|
#{ enable => true
|
||||||
|
, enable_stats => true
|
||||||
|
, idle_timeout => <<"30s">>
|
||||||
|
, mountpoint => <<"stomp2/">>
|
||||||
|
, frame =>
|
||||||
|
#{ max_headers => 100
|
||||||
|
, max_headers_length => 10240
|
||||||
|
, max_body_length => 655350
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
, mqttsn_gateway =>
|
||||||
|
#{ summary => <<"A simple MQTT-SN gateway configs">>
|
||||||
|
, value =>
|
||||||
|
#{ enable => true
|
||||||
|
, enable_stats => true
|
||||||
|
, idle_timeout => <<"30s">>
|
||||||
|
, mountpoint => <<"mqttsn2/">>
|
||||||
|
, gateway_id => 1
|
||||||
|
, broadcast => true
|
||||||
|
, enable_qos3 => false
|
||||||
|
, predefined =>
|
||||||
|
[ #{ id => <<"1003">>
|
||||||
|
, topic => <<"pred/1003">>
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
, coap_gateway =>
|
||||||
|
#{ summary => <<"A simple CoAP gateway configs">>
|
||||||
|
, value =>
|
||||||
|
#{ enable => true
|
||||||
|
, enable_stats => true
|
||||||
|
, idle_timeout => <<"30s">>
|
||||||
|
, mountpoint => <<"coap2/">>
|
||||||
|
, heartbeat => <<"30s">>
|
||||||
|
, connection_required => false
|
||||||
|
, notify_type => <<"qos">>
|
||||||
|
, subscribe_qos => <<"coap">>
|
||||||
|
, publish_qos => <<"coap">>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
, lwm2m_gateway =>
|
||||||
|
#{ summary => <<"A simple LwM2M gateway configs">>
|
||||||
|
, value =>
|
||||||
|
#{ enable => true
|
||||||
|
, enable_stats => true
|
||||||
|
, idle_timeout => <<"30s">>
|
||||||
|
, mountpoint => <<"lwm2m2/">>
|
||||||
|
, xml_dir => <<"etc/lwm2m_xml">>
|
||||||
|
, lifetime_min => <<"1s">>
|
||||||
|
, lifetime_max => <<"86400s">>
|
||||||
|
, qmode_time_window => <<"22s">>
|
||||||
|
, auto_observe => false
|
||||||
|
, update_msg_publish_condition => <<"always">>
|
||||||
|
, translators =>
|
||||||
|
#{ command => #{topic => <<"/dn/#">>}
|
||||||
|
, response => #{topic => <<"/up/resp">>}
|
||||||
|
, notify => #{topic => <<"/up/notify">>}
|
||||||
|
, register => #{topic => <<"/up/resp">>}
|
||||||
|
, update => #{topic => <<"/up/resp">>}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
, exproto_gateway =>
|
||||||
|
#{ summary => <<"A simple ExProto gateway configs">>
|
||||||
|
, value =>
|
||||||
|
#{ enable => true
|
||||||
|
, enable_stats => true
|
||||||
|
, idle_timeout => <<"30s">>
|
||||||
|
, mountpoint => <<"exproto2/">>
|
||||||
|
, server =>
|
||||||
|
#{ bind => <<"9100">>
|
||||||
|
}
|
||||||
|
, handler =>
|
||||||
|
#{ address => <<"http://127.0.0.1:9001">>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.
|
||||||
|
|
||||||
examples_gateway_stats() ->
|
examples_gateway_stats() ->
|
||||||
#{}.
|
#{}.
|
||||||
|
|
|
@ -61,7 +61,7 @@ start_grpc_server(GwName, Options = #{bind := ListenOn}) ->
|
||||||
end,
|
end,
|
||||||
case grpc:start_server(GwName, ListenOn, Services, SvrOptions) of
|
case grpc:start_server(GwName, ListenOn, Services, SvrOptions) of
|
||||||
{ok, _SvrPid} ->
|
{ok, _SvrPid} ->
|
||||||
console_print("Start ~ts gRPC server on ~p successfully.",
|
console_print("Start ~ts gRPC server on ~p successfully.~n",
|
||||||
[GwName, ListenOn]);
|
[GwName, ListenOn]);
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
?ELOG("Falied to start ~ts gRPC server on ~p, reason: ~p",
|
?ELOG("Falied to start ~ts gRPC server on ~p, reason: ~p",
|
||||||
|
|
Loading…
Reference in New Issue