fix: authz add metrics_and_status schema
This commit is contained in:
parent
a6920ac11b
commit
f91a6b9f00
|
@ -163,37 +163,4 @@ emqx_authn_schema {
|
||||||
zh: """节点名称。"""
|
zh: """节点名称。"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ignore {
|
|
||||||
desc {
|
|
||||||
en: """Not match any rules."""
|
|
||||||
zh: """没有匹配到任何规则。"""
|
|
||||||
}
|
|
||||||
label: {
|
|
||||||
en: """Not Match Any Rules"""
|
|
||||||
zh: """没有匹配到任何规则。"""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allow {
|
|
||||||
desc {
|
|
||||||
en: """Authorize allow."""
|
|
||||||
zh: """鉴权成功。"""
|
|
||||||
}
|
|
||||||
label: {
|
|
||||||
en: """Authorize Allow"""
|
|
||||||
zh: """鉴权成功"""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
deny {
|
|
||||||
desc {
|
|
||||||
en: """Authorize Deny."""
|
|
||||||
zh: """鉴权失败"""
|
|
||||||
}
|
|
||||||
label: {
|
|
||||||
en: """Authorize Deny"""
|
|
||||||
zh: """鉴权失败"""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,45 +89,41 @@ backend(Name) ->
|
||||||
|
|
||||||
fields("metrics_status_fields") ->
|
fields("metrics_status_fields") ->
|
||||||
[
|
[
|
||||||
|
{"resource_metrics", mk(ref(?MODULE, "resource_metrics"), #{desc => ?DESC("metrics")})},
|
||||||
|
{"node_resource_metrics",
|
||||||
|
mk(
|
||||||
|
hoconsc:array(ref(?MODULE, "node_resource_metrics")),
|
||||||
|
#{desc => ?DESC("node_metrics")}
|
||||||
|
)},
|
||||||
{"metrics", mk(ref(?MODULE, "metrics"), #{desc => ?DESC("metrics")})},
|
{"metrics", mk(ref(?MODULE, "metrics"), #{desc => ?DESC("metrics")})},
|
||||||
{"node_metrics",
|
{"node_metrics",
|
||||||
mk(
|
mk(
|
||||||
hoconsc:array(ref(?MODULE, "node_metrics")),
|
hoconsc:array(ref(?MODULE, "node_metrics")),
|
||||||
#{desc => ?DESC("node_metrics")}
|
#{desc => ?DESC("node_metrics")}
|
||||||
)}
|
)},
|
||||||
] ++ common_metrics_field();
|
{"status", mk(cluster_status(), #{desc => ?DESC("status")})},
|
||||||
fields("metrics_status_fields_authz") ->
|
{"node_status",
|
||||||
[
|
|
||||||
{"metrics", mk(ref(?MODULE, "metrics_authz"), #{desc => ?DESC("metrics")})},
|
|
||||||
{"node_metrics",
|
|
||||||
mk(
|
mk(
|
||||||
hoconsc:array(ref(?MODULE, "node_metrics_authz")),
|
hoconsc:array(ref(?MODULE, "node_status")),
|
||||||
#{desc => ?DESC("node_metrics")}
|
#{desc => ?DESC("node_status")}
|
||||||
|
)},
|
||||||
|
{"node_error",
|
||||||
|
mk(
|
||||||
|
hoconsc:array(ref(?MODULE, "node_error")),
|
||||||
|
#{desc => ?DESC("node_error")}
|
||||||
)}
|
)}
|
||||||
] ++ common_metrics_field();
|
];
|
||||||
fields("metrics") ->
|
fields("metrics") ->
|
||||||
[
|
[
|
||||||
{"ignore", mk(integer(), #{desc => ?DESC("failed")})}
|
{"ignore", mk(integer(), #{desc => ?DESC("failed")})}
|
||||||
] ++ common_field();
|
] ++ common_field();
|
||||||
fields("metrics_authz") ->
|
fields("resource_metrics") ->
|
||||||
[
|
common_field();
|
||||||
{"matched", mk(integer(), #{desc => ?DESC("matched")})},
|
|
||||||
{"allow", mk(integer(), #{desc => ?DESC("allow")})},
|
|
||||||
{"deny", mk(integer(), #{desc => ?DESC("deny")})},
|
|
||||||
{"ignore", mk(float(), #{desc => ?DESC("ignore")})}
|
|
||||||
];
|
|
||||||
fields("node_metrics") ->
|
fields("node_metrics") ->
|
||||||
[
|
[
|
||||||
node_name(),
|
node_name(),
|
||||||
{"metrics", mk(ref(?MODULE, "metrics"), #{desc => ?DESC("metrics")})}
|
{"metrics", mk(ref(?MODULE, "metrics"), #{desc => ?DESC("metrics")})}
|
||||||
];
|
];
|
||||||
fields("node_metrics_authz") ->
|
|
||||||
[
|
|
||||||
node_name(),
|
|
||||||
{"metrics", mk(ref(?MODULE, "metrics_authz"), #{desc => ?DESC("metrics")})}
|
|
||||||
];
|
|
||||||
fields("resource_metrics") ->
|
|
||||||
common_field();
|
|
||||||
fields("node_resource_metrics") ->
|
fields("node_resource_metrics") ->
|
||||||
[
|
[
|
||||||
node_name(),
|
node_name(),
|
||||||
|
@ -154,27 +150,6 @@ common_field() ->
|
||||||
{"rate_last5m", mk(float(), #{desc => ?DESC("rate_last5m")})}
|
{"rate_last5m", mk(float(), #{desc => ?DESC("rate_last5m")})}
|
||||||
].
|
].
|
||||||
|
|
||||||
common_metrics_field() ->
|
|
||||||
[
|
|
||||||
{"resource_metrics", mk(ref(?MODULE, "resource_metrics"), #{desc => ?DESC("metrics")})},
|
|
||||||
{"node_resource_metrics",
|
|
||||||
mk(
|
|
||||||
hoconsc:array(ref(?MODULE, "node_resource_metrics")),
|
|
||||||
#{desc => ?DESC("node_metrics")}
|
|
||||||
)},
|
|
||||||
{"status", mk(cluster_status(), #{desc => ?DESC("status")})},
|
|
||||||
{"node_status",
|
|
||||||
mk(
|
|
||||||
hoconsc:array(ref(?MODULE, "node_status")),
|
|
||||||
#{desc => ?DESC("node_status")}
|
|
||||||
)},
|
|
||||||
{"node_error",
|
|
||||||
mk(
|
|
||||||
hoconsc:array(ref(?MODULE, "node_error")),
|
|
||||||
#{desc => ?DESC("node_error")}
|
|
||||||
)}
|
|
||||||
].
|
|
||||||
|
|
||||||
status() ->
|
status() ->
|
||||||
hoconsc:enum([connected, disconnected, connecting]).
|
hoconsc:enum([connected, disconnected, connecting]).
|
||||||
|
|
||||||
|
|
|
@ -392,4 +392,171 @@ Commands can support following wildcards:\n
|
||||||
zh: """查询语句"""
|
zh: """查询语句"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#==== metrics field
|
||||||
|
|
||||||
|
metrics {
|
||||||
|
desc {
|
||||||
|
en: """The metrics of the resource."""
|
||||||
|
zh: """资源统计指标。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Metrics"""
|
||||||
|
zh: """指标"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node_metrics {
|
||||||
|
desc {
|
||||||
|
en: """The metrics of the resource for each node."""
|
||||||
|
zh: """每个节点上资源的统计指标。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Resource Metrics in Node"""
|
||||||
|
zh: """节点资源指标"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
status {
|
||||||
|
desc {
|
||||||
|
en: """The status of the resource."""
|
||||||
|
zh: """资源状态。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Status"""
|
||||||
|
zh: """状态"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node_status {
|
||||||
|
desc {
|
||||||
|
en: """The status of the resource for each node."""
|
||||||
|
zh: """每个节点上资源的状态。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Resource Status in Node"""
|
||||||
|
zh: """节点资源状态"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node_error {
|
||||||
|
desc {
|
||||||
|
en: """The error of node."""
|
||||||
|
zh: """节点上产生的错误。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Error in Node"""
|
||||||
|
zh: """节点产生的错误"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
matched {
|
||||||
|
desc {
|
||||||
|
en: """Count of this resource is queried."""
|
||||||
|
zh: """请求命中次数。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Matched"""
|
||||||
|
zh: """已命中"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
success {
|
||||||
|
desc {
|
||||||
|
en: """Count of query success."""
|
||||||
|
zh: """请求成功次数。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Success"""
|
||||||
|
zh: """成功"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
failed {
|
||||||
|
desc {
|
||||||
|
en: """Count of query failed."""
|
||||||
|
zh: """请求失败次数。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Failed"""
|
||||||
|
zh: """失败"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rate {
|
||||||
|
desc {
|
||||||
|
en: """The rate of matched, times/second."""
|
||||||
|
zh: """命中速率,单位:次/秒。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Rate"""
|
||||||
|
zh: """速率"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rate_max {
|
||||||
|
desc {
|
||||||
|
en: """The max rate of matched, times/second."""
|
||||||
|
zh: """最大命中速率,单位:次/秒。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Max Rate"""
|
||||||
|
zh: """最大速率"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rate_last5m {
|
||||||
|
desc {
|
||||||
|
en: """The average rate of matched in the last 5 minutes, times/second."""
|
||||||
|
zh: """5分钟内平均命中速率,单位:次/秒。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Rate in Last 5min"""
|
||||||
|
zh: """5分钟内速率"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node {
|
||||||
|
desc {
|
||||||
|
en: """Node name."""
|
||||||
|
zh: """节点名称。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Node Name."""
|
||||||
|
zh: """节点名称。"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ignore {
|
||||||
|
desc {
|
||||||
|
en: """Not match any rules."""
|
||||||
|
zh: """没有匹配到任何规则。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Not Match Any Rules"""
|
||||||
|
zh: """没有匹配到任何规则。"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allow {
|
||||||
|
desc {
|
||||||
|
en: """Authorize allow."""
|
||||||
|
zh: """鉴权成功。"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Authorize Allow"""
|
||||||
|
zh: """鉴权成功"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deny {
|
||||||
|
desc {
|
||||||
|
en: """Authorize Deny."""
|
||||||
|
zh: """鉴权失败"""
|
||||||
|
}
|
||||||
|
label: {
|
||||||
|
en: """Authorize Deny"""
|
||||||
|
zh: """鉴权失败"""
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,7 +143,7 @@ schema("/authorization/sources/:type/status") ->
|
||||||
responses =>
|
responses =>
|
||||||
#{
|
#{
|
||||||
200 => emqx_dashboard_swagger:schema_with_examples(
|
200 => emqx_dashboard_swagger:schema_with_examples(
|
||||||
hoconsc:ref(emqx_authn_schema, "metrics_status_fields_authz"),
|
hoconsc:ref(emqx_authz_schema, "metrics_status_fields"),
|
||||||
status_metrics_example()
|
status_metrics_example()
|
||||||
),
|
),
|
||||||
400 => emqx_dashboard_swagger:error_codes(
|
400 => emqx_dashboard_swagger:error_codes(
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
-include("emqx_authz.hrl").
|
-include("emqx_authz.hrl").
|
||||||
-include_lib("hocon/include/hoconsc.hrl").
|
-include_lib("hocon/include/hoconsc.hrl").
|
||||||
-include_lib("emqx_connector/include/emqx_connector.hrl").
|
-include_lib("emqx_connector/include/emqx_connector.hrl").
|
||||||
|
-import(hoconsc, [mk/2, ref/2]).
|
||||||
|
|
||||||
-reflect_type([
|
-reflect_type([
|
||||||
permission/0,
|
permission/0,
|
||||||
|
@ -134,7 +135,81 @@ fields(jwt) ->
|
||||||
default => <<"acl">>,
|
default => <<"acl">>,
|
||||||
desc => ?DESC(acl_claim_name)
|
desc => ?DESC(acl_claim_name)
|
||||||
}}
|
}}
|
||||||
].
|
];
|
||||||
|
fields("metrics_status_fields") ->
|
||||||
|
[
|
||||||
|
{"resource_metrics", mk(ref(?MODULE, "resource_metrics"), #{desc => ?DESC("metrics")})},
|
||||||
|
{"node_resource_metrics",
|
||||||
|
mk(
|
||||||
|
hoconsc:array(ref(?MODULE, "node_resource_metrics")),
|
||||||
|
#{desc => ?DESC("node_metrics")}
|
||||||
|
)},
|
||||||
|
{"metrics", mk(ref(?MODULE, "metrics"), #{desc => ?DESC("metrics")})},
|
||||||
|
{"node_metrics",
|
||||||
|
mk(
|
||||||
|
hoconsc:array(ref(?MODULE, "node_metrics")),
|
||||||
|
#{desc => ?DESC("node_metrics")}
|
||||||
|
)},
|
||||||
|
{"status", mk(cluster_status(), #{desc => ?DESC("status")})},
|
||||||
|
{"node_status",
|
||||||
|
mk(
|
||||||
|
hoconsc:array(ref(?MODULE, "node_status")),
|
||||||
|
#{desc => ?DESC("node_status")}
|
||||||
|
)},
|
||||||
|
{"node_error",
|
||||||
|
mk(
|
||||||
|
hoconsc:array(ref(?MODULE, "node_error")),
|
||||||
|
#{desc => ?DESC("node_error")}
|
||||||
|
)}
|
||||||
|
];
|
||||||
|
fields("metrics") ->
|
||||||
|
[
|
||||||
|
{"matched", mk(integer(), #{desc => ?DESC("matched")})},
|
||||||
|
{"allow", mk(integer(), #{desc => ?DESC("allow")})},
|
||||||
|
{"deny", mk(integer(), #{desc => ?DESC("deny")})},
|
||||||
|
{"ignore", mk(float(), #{desc => ?DESC("ignore")})}
|
||||||
|
];
|
||||||
|
fields("node_metrics") ->
|
||||||
|
[
|
||||||
|
node_name(),
|
||||||
|
{"metrics", mk(ref(?MODULE, "metrics"), #{desc => ?DESC("metrics")})}
|
||||||
|
];
|
||||||
|
fields("resource_metrics") ->
|
||||||
|
common_field();
|
||||||
|
fields("node_resource_metrics") ->
|
||||||
|
[
|
||||||
|
node_name(),
|
||||||
|
{"metrics", mk(ref(?MODULE, "resource_metrics"), #{desc => ?DESC("metrics")})}
|
||||||
|
];
|
||||||
|
fields("node_status") ->
|
||||||
|
[
|
||||||
|
node_name(),
|
||||||
|
{"status", mk(status(), #{desc => ?DESC("node_status")})}
|
||||||
|
];
|
||||||
|
fields("node_error") ->
|
||||||
|
[
|
||||||
|
node_name(),
|
||||||
|
{"error", mk(string(), #{desc => ?DESC("node_error")})}
|
||||||
|
].
|
||||||
|
|
||||||
|
common_field() ->
|
||||||
|
[
|
||||||
|
{"matched", mk(integer(), #{desc => ?DESC("matched")})},
|
||||||
|
{"success", mk(integer(), #{desc => ?DESC("success")})},
|
||||||
|
{"failed", mk(integer(), #{desc => ?DESC("failed")})},
|
||||||
|
{"rate", mk(float(), #{desc => ?DESC("rate")})},
|
||||||
|
{"rate_max", mk(float(), #{desc => ?DESC("rate_max")})},
|
||||||
|
{"rate_last5m", mk(float(), #{desc => ?DESC("rate_last5m")})}
|
||||||
|
].
|
||||||
|
|
||||||
|
status() ->
|
||||||
|
hoconsc:enum([connected, disconnected, connecting]).
|
||||||
|
|
||||||
|
cluster_status() ->
|
||||||
|
hoconsc:enum([connected, disconnected, connecting, inconsistent]).
|
||||||
|
|
||||||
|
node_name() ->
|
||||||
|
{"node", mk(binary(), #{desc => ?DESC("node"), example => "emqx@127.0.0.1"})}.
|
||||||
|
|
||||||
desc(?CONF_NS) ->
|
desc(?CONF_NS) ->
|
||||||
?DESC(?CONF_NS);
|
?DESC(?CONF_NS);
|
||||||
|
|
Loading…
Reference in New Issue