feat(delayed): add i18n support for delayed
This commit is contained in:
parent
f69b21d020
commit
d02ac812e6
|
@ -0,0 +1,164 @@
|
||||||
|
emqx_delayed_api {
|
||||||
|
|
||||||
|
view_status_api {
|
||||||
|
desc {
|
||||||
|
en: "Get delayed status"
|
||||||
|
zh: "查看慢订阅状态"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update_api {
|
||||||
|
desc {
|
||||||
|
en: "Enable or disable delayed, set max delayed messages"
|
||||||
|
zh: "开启或者关闭功能,或者设置延迟消息数量上限"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update_success {
|
||||||
|
desc {
|
||||||
|
en: "Enable or disable delayed successfully"
|
||||||
|
zh: "开启或者关闭功能操作成功"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
illegality_limit {
|
||||||
|
desc {
|
||||||
|
en: "Max limit illegality"
|
||||||
|
zh: "数量上限不合法"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get_message_api {
|
||||||
|
desc {
|
||||||
|
en: "View delayed message"
|
||||||
|
zh: "查看延迟消息"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node {
|
||||||
|
desc {
|
||||||
|
en: "The node where message from"
|
||||||
|
zh: "消息的来源节点"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
msgid {
|
||||||
|
desc {
|
||||||
|
en: "Delayed Message ID"
|
||||||
|
zh: "延迟消息 ID"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bad_msgid_format {
|
||||||
|
desc {
|
||||||
|
en: "Bad Message ID format"
|
||||||
|
zh: "消息 ID 格式错误"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
msgid_not_found {
|
||||||
|
desc {
|
||||||
|
en: "Message ID not found"
|
||||||
|
zh: "未找到对应消息"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_api {
|
||||||
|
desc {
|
||||||
|
en: "Delete delayed message"
|
||||||
|
zh: "删除延迟消息"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list_api {
|
||||||
|
desc {
|
||||||
|
en: "List delayed messages"
|
||||||
|
zh: "查看延迟消息列表"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
view_page {
|
||||||
|
desc {
|
||||||
|
en: "View page"
|
||||||
|
zh: "查看的页数"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
view_limit {
|
||||||
|
desc {
|
||||||
|
en: "Page limit"
|
||||||
|
zh: "每页数量"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
count {
|
||||||
|
desc {
|
||||||
|
en: "Count of delayed messages"
|
||||||
|
zh: "延迟消息总数"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
publish_at {
|
||||||
|
desc {
|
||||||
|
en: "Clinet publish message time, in RFC 3339 format"
|
||||||
|
zh: "客户端发送时间, RFC 3339 格式"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delayed_interval {
|
||||||
|
desc {
|
||||||
|
en: "Delayed interval(second)"
|
||||||
|
zh: "延迟时间(秒)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delayed_remaining {
|
||||||
|
desc {
|
||||||
|
en: "Delayed remaining(second)"
|
||||||
|
zh: "剩余时间(秒)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expected_at {
|
||||||
|
desc {
|
||||||
|
en: "Expect publish time, in RFC 3339 format"
|
||||||
|
zh: "期望的发送时间, RFC 3339 格式"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
topic {
|
||||||
|
desc {
|
||||||
|
en: "Topic"
|
||||||
|
zh: "主题"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qos {
|
||||||
|
desc {
|
||||||
|
en: "QoS"
|
||||||
|
zh: "QoS"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
from_clientid {
|
||||||
|
desc {
|
||||||
|
en: "From ClientID"
|
||||||
|
zh: "消息的 ClientID"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
from_username {
|
||||||
|
desc {
|
||||||
|
en: "From Username"
|
||||||
|
zh: "消息的 Username"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
payload {
|
||||||
|
desc {
|
||||||
|
en: "Payload, base64 encoded. Payload will be set to 'PAYLOAD_TO_LARGE' if its length is larger than 2048 bytes"
|
||||||
|
zh: "消息内容, base64 格式。如果消息的大小超过 2048 字节,则消息内容会被设置为 'PAYLOAD_TO_LARGE'"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -71,4 +71,17 @@ all:全部重写主题"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enable {
|
||||||
|
desc {
|
||||||
|
en: "Enable this feature"
|
||||||
|
zh: "是否开启该功能"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
max_delayed_messages {
|
||||||
|
desc {
|
||||||
|
en: "Maximum number of delayed messages (0 is no limit)."
|
||||||
|
zh: "延迟消息的数量上限(0 代表无限)"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,13 +19,11 @@
|
||||||
-behaviour(minirest_api).
|
-behaviour(minirest_api).
|
||||||
|
|
||||||
-include_lib("typerefl/include/types.hrl").
|
-include_lib("typerefl/include/types.hrl").
|
||||||
|
-include_lib("hocon/include/hoconsc.hrl").
|
||||||
-include("emqx_modules.hrl").
|
-include("emqx_modules.hrl").
|
||||||
|
|
||||||
-import(hoconsc, [mk/2, ref/1, ref/2]).
|
-import(hoconsc, [mk/2, ref/1, ref/2]).
|
||||||
|
|
||||||
-define(MAX_PAYLOAD_LENGTH, 2048).
|
|
||||||
-define(PAYLOAD_TOO_LARGE, <<"PAYLOAD_TOO_LARGE">>).
|
|
||||||
|
|
||||||
-export([
|
-export([
|
||||||
status/2,
|
status/2,
|
||||||
delayed_messages/2,
|
delayed_messages/2,
|
||||||
|
@ -43,6 +41,9 @@
|
||||||
|
|
||||||
-export([api_spec/0]).
|
-export([api_spec/0]).
|
||||||
|
|
||||||
|
-define(MAX_PAYLOAD_LENGTH, 2048).
|
||||||
|
-define(PAYLOAD_TOO_LARGE, <<"PAYLOAD_TOO_LARGE">>).
|
||||||
|
|
||||||
-define(INTERNAL_ERROR, 'INTERNAL_ERROR').
|
-define(INTERNAL_ERROR, 'INTERNAL_ERROR').
|
||||||
-define(BAD_REQUEST, 'BAD_REQUEST').
|
-define(BAD_REQUEST, 'BAD_REQUEST').
|
||||||
|
|
||||||
|
@ -65,24 +66,23 @@ schema("/mqtt/delayed") ->
|
||||||
'operationId' => status,
|
'operationId' => status,
|
||||||
get => #{
|
get => #{
|
||||||
tags => ?API_TAG_MQTT,
|
tags => ?API_TAG_MQTT,
|
||||||
description => <<"Get delayed status">>,
|
description => ?DESC(view_status_api),
|
||||||
summary => <<"Get delayed status">>,
|
|
||||||
responses => #{
|
responses => #{
|
||||||
200 => ref(emqx_modules_schema, "delayed")
|
200 => ref(emqx_modules_schema, "delayed")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
put => #{
|
put => #{
|
||||||
tags => ?API_TAG_MQTT,
|
tags => ?API_TAG_MQTT,
|
||||||
description => <<"Enable or disable delayed, set max delayed messages">>,
|
description => ?DESC(update_api),
|
||||||
'requestBody' => ref(emqx_modules_schema, "delayed"),
|
'requestBody' => ref(emqx_modules_schema, "delayed"),
|
||||||
responses => #{
|
responses => #{
|
||||||
200 => mk(
|
200 => mk(
|
||||||
ref(emqx_modules_schema, "delayed"),
|
ref(emqx_modules_schema, "delayed"),
|
||||||
#{desc => <<"Enable or disable delayed successfully">>}
|
#{desc => ?DESC(update_success)}
|
||||||
),
|
),
|
||||||
400 => emqx_dashboard_swagger:error_codes(
|
400 => emqx_dashboard_swagger:error_codes(
|
||||||
[?BAD_REQUEST],
|
[?BAD_REQUEST],
|
||||||
<<"Max limit illegality">>
|
?DESC(illegality_limit)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,47 +92,47 @@ schema("/mqtt/delayed/messages/:node/:msgid") ->
|
||||||
'operationId' => delayed_message,
|
'operationId' => delayed_message,
|
||||||
get => #{
|
get => #{
|
||||||
tags => ?API_TAG_MQTT,
|
tags => ?API_TAG_MQTT,
|
||||||
description => <<"Get delayed message">>,
|
description => ?DESC(get_message_api),
|
||||||
parameters => [
|
parameters => [
|
||||||
{node,
|
{node,
|
||||||
mk(
|
mk(
|
||||||
binary(),
|
binary(),
|
||||||
#{in => path, desc => <<"The node where message from">>}
|
#{in => path, desc => ?DESC(node)}
|
||||||
)},
|
)},
|
||||||
{msgid, mk(binary(), #{in => path, desc => <<"Delay message ID">>})}
|
{msgid, mk(binary(), #{in => path, desc => ?DESC(msgid)})}
|
||||||
],
|
],
|
||||||
responses => #{
|
responses => #{
|
||||||
200 => ref("message_without_payload"),
|
200 => ref("message_without_payload"),
|
||||||
400 => emqx_dashboard_swagger:error_codes(
|
400 => emqx_dashboard_swagger:error_codes(
|
||||||
[?MESSAGE_ID_SCHEMA_ERROR, ?INVALID_NODE],
|
[?MESSAGE_ID_SCHEMA_ERROR, ?INVALID_NODE],
|
||||||
<<"Bad MsgId format">>
|
?DESC(bad_msgid_format)
|
||||||
),
|
),
|
||||||
404 => emqx_dashboard_swagger:error_codes(
|
404 => emqx_dashboard_swagger:error_codes(
|
||||||
[?MESSAGE_ID_NOT_FOUND],
|
[?MESSAGE_ID_NOT_FOUND],
|
||||||
<<"MsgId not found">>
|
?DESC(msgid_not_found)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
delete => #{
|
delete => #{
|
||||||
tags => ?API_TAG_MQTT,
|
tags => ?API_TAG_MQTT,
|
||||||
description => <<"Delete delayed message">>,
|
description => ?DESC(delete_api),
|
||||||
parameters => [
|
parameters => [
|
||||||
{node,
|
{node,
|
||||||
mk(
|
mk(
|
||||||
binary(),
|
binary(),
|
||||||
#{in => path, desc => <<"The node where message from">>}
|
#{in => path, desc => ?DESC(node)}
|
||||||
)},
|
)},
|
||||||
{msgid, mk(binary(), #{in => path, desc => <<"Delay message ID">>})}
|
{msgid, mk(binary(), #{in => path, desc => ?DESC(msgid)})}
|
||||||
],
|
],
|
||||||
responses => #{
|
responses => #{
|
||||||
204 => <<"Delete delayed message success">>,
|
204 => <<"Delete delayed message success">>,
|
||||||
400 => emqx_dashboard_swagger:error_codes(
|
400 => emqx_dashboard_swagger:error_codes(
|
||||||
[?MESSAGE_ID_SCHEMA_ERROR, ?INVALID_NODE],
|
[?MESSAGE_ID_SCHEMA_ERROR, ?INVALID_NODE],
|
||||||
<<"Bad MsgId format">>
|
?DESC(bad_msgid_format)
|
||||||
),
|
),
|
||||||
404 => emqx_dashboard_swagger:error_codes(
|
404 => emqx_dashboard_swagger:error_codes(
|
||||||
[?MESSAGE_ID_NOT_FOUND],
|
[?MESSAGE_ID_NOT_FOUND],
|
||||||
<<"MsgId not found">>
|
?DESC(msgid_not_found)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,16 +142,16 @@ schema("/mqtt/delayed/messages") ->
|
||||||
'operationId' => delayed_messages,
|
'operationId' => delayed_messages,
|
||||||
get => #{
|
get => #{
|
||||||
tags => ?API_TAG_MQTT,
|
tags => ?API_TAG_MQTT,
|
||||||
description => <<"List delayed messages">>,
|
description => ?DESC(list_api),
|
||||||
parameters => [ref(emqx_dashboard_swagger, page), ref(emqx_dashboard_swagger, limit)],
|
parameters => [ref(emqx_dashboard_swagger, page), ref(emqx_dashboard_swagger, limit)],
|
||||||
responses => #{
|
responses => #{
|
||||||
200 =>
|
200 =>
|
||||||
[
|
[
|
||||||
{data, mk(hoconsc:array(ref("message")), #{})},
|
{data, mk(hoconsc:array(ref("message")), #{})},
|
||||||
{meta, [
|
{meta, [
|
||||||
{page, mk(pos_integer(), #{})},
|
{page, mk(pos_integer(), #{desc => ?DESC(view_page)})},
|
||||||
{limit, mk(pos_integer(), #{})},
|
{limit, mk(pos_integer(), #{desc => ?DESC(view_limit)})},
|
||||||
{count, mk(non_neg_integer(), #{})}
|
{count, mk(non_neg_integer(), #{desc => ?DESC(count)})}
|
||||||
]}
|
]}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -160,24 +160,20 @@ schema("/mqtt/delayed/messages") ->
|
||||||
|
|
||||||
fields("message_without_payload") ->
|
fields("message_without_payload") ->
|
||||||
[
|
[
|
||||||
{msgid, mk(integer(), #{desc => <<"Message Id (MQTT message id hash)">>})},
|
{msgid, mk(integer(), #{desc => ?DESC(msgid)})},
|
||||||
{node, mk(binary(), #{desc => <<"The node where message from">>})},
|
{node, mk(binary(), #{desc => ?DESC(node)})},
|
||||||
{publish_at, mk(binary(), #{desc => <<"Client publish message time, rfc 3339">>})},
|
{publish_at, mk(binary(), #{desc => ?DESC(publish_at)})},
|
||||||
{delayed_interval, mk(pos_integer(), #{desc => <<"Delayed interval, second">>})},
|
{delayed_interval, mk(pos_integer(), #{desc => ?DESC(delayed_interval)})},
|
||||||
{delayed_remaining, mk(non_neg_integer(), #{desc => <<"Delayed remaining, second">>})},
|
{delayed_remaining, mk(non_neg_integer(), #{desc => ?DESC(delayed_remaining)})},
|
||||||
{expected_at, mk(binary(), #{desc => <<"Expect publish time, rfc 3339">>})},
|
{expected_at, mk(binary(), #{desc => ?DESC(expected_at)})},
|
||||||
{topic, mk(binary(), #{desc => <<"Topic">>, example => <<"/sys/#">>})},
|
{topic, mk(binary(), #{desc => ?DESC(topic), example => <<"/sys/#">>})},
|
||||||
{qos, mk(emqx_schema:qos(), #{desc => <<"QoS">>})},
|
{qos, mk(emqx_schema:qos(), #{desc => ?DESC(qos)})},
|
||||||
{from_clientid, mk(binary(), #{desc => <<"From ClientId">>})},
|
{from_clientid, mk(binary(), #{desc => ?DESC(from_clientid)})},
|
||||||
{from_username, mk(binary(), #{desc => <<"From Username">>})}
|
{from_username, mk(binary(), #{desc => ?DESC(from_username)})}
|
||||||
];
|
];
|
||||||
fields("message") ->
|
fields("message") ->
|
||||||
PayloadDesc = io_lib:format(
|
|
||||||
"Payload, base64 encoded. Payload will be set to ~p if its length is larger than ~p",
|
|
||||||
[?PAYLOAD_TOO_LARGE, ?MAX_PAYLOAD_LENGTH]
|
|
||||||
),
|
|
||||||
fields("message_without_payload") ++
|
fields("message_without_payload") ++
|
||||||
[{payload, mk(binary(), #{desc => iolist_to_binary(PayloadDesc)})}].
|
[{payload, mk(binary(), #{desc => ?DESC(payload)})}].
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% HTTP API
|
%% HTTP API
|
||||||
|
|
|
@ -42,9 +42,8 @@ fields("telemetry") ->
|
||||||
[{enable, hoconsc:mk(boolean(), #{default => false, desc => "Enable telemetry."})}];
|
[{enable, hoconsc:mk(boolean(), #{default => false, desc => "Enable telemetry."})}];
|
||||||
fields("delayed") ->
|
fields("delayed") ->
|
||||||
[
|
[
|
||||||
{enable, hoconsc:mk(boolean(), #{default => false, desc => "Enable `delayed` module."})},
|
{enable, hoconsc:mk(boolean(), #{default => false, desc => ?DESC(enable)})},
|
||||||
{max_delayed_messages,
|
{max_delayed_messages, sc(integer(), #{desc => ?DESC(max_delayed_messages)})}
|
||||||
sc(integer(), #{desc => "Maximum number of delayed messages (0 is no limit)."})}
|
|
||||||
];
|
];
|
||||||
fields("rewrite") ->
|
fields("rewrite") ->
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in New Issue