fix: authz add metrics_and_status schema

This commit is contained in:
EMQ-YangM 2022-04-29 00:37:21 +08:00
parent a6920ac11b
commit f91a6b9f00
5 changed files with 263 additions and 79 deletions

View File

@ -163,37 +163,4 @@ emqx_authn_schema {
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: """鉴权失败"""
}
}
}

View File

@ -89,45 +89,41 @@ backend(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")}
)}
] ++ common_metrics_field();
fields("metrics_status_fields_authz") ->
[
{"metrics", mk(ref(?MODULE, "metrics_authz"), #{desc => ?DESC("metrics")})},
{"node_metrics",
)},
{"status", mk(cluster_status(), #{desc => ?DESC("status")})},
{"node_status",
mk(
hoconsc:array(ref(?MODULE, "node_metrics_authz")),
#{desc => ?DESC("node_metrics")}
hoconsc:array(ref(?MODULE, "node_status")),
#{desc => ?DESC("node_status")}
)},
{"node_error",
mk(
hoconsc:array(ref(?MODULE, "node_error")),
#{desc => ?DESC("node_error")}
)}
] ++ common_metrics_field();
];
fields("metrics") ->
[
{"ignore", mk(integer(), #{desc => ?DESC("failed")})}
] ++ common_field();
fields("metrics_authz") ->
[
{"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("resource_metrics") ->
common_field();
fields("node_metrics") ->
[
node_name(),
{"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") ->
[
node_name(),
@ -154,27 +150,6 @@ common_field() ->
{"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() ->
hoconsc:enum([connected, disconnected, connecting]).

View File

@ -392,4 +392,171 @@ Commands can support following wildcards:\n
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: """鉴权失败"""
}
}
}

View File

@ -143,7 +143,7 @@ schema("/authorization/sources/:type/status") ->
responses =>
#{
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()
),
400 => emqx_dashboard_swagger:error_codes(

View File

@ -19,6 +19,7 @@
-include("emqx_authz.hrl").
-include_lib("hocon/include/hoconsc.hrl").
-include_lib("emqx_connector/include/emqx_connector.hrl").
-import(hoconsc, [mk/2, ref/2]).
-reflect_type([
permission/0,
@ -134,7 +135,81 @@ fields(jwt) ->
default => <<"acl">>,
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);