Skip to content

Commit 880df18

Browse files
Refactor SecurityMetricType from enum to record for extensibility (#144119)
This PR converts `SecurityMetricType` from an enum to a record, allowing metric types to be defined outside of security plugin. It also removes the serverless-only `CLOUD_AUTHC_API_KEY` type, which will be defined in serverless repo.
1 parent 170367a commit 880df18

File tree

1 file changed

+16
-65
lines changed

1 file changed

+16
-65
lines changed

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/metric/SecurityMetricType.java

Lines changed: 16 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,24 @@
88
package org.elasticsearch.xpack.security.metric;
99

1010
/**
11-
* Defines all security metric types that can be collected.
11+
* Defines a security metric type that can be collected.
12+
* Each metric type has a group, and metric info for tracking success, failure and total time.
1213
*/
13-
public enum SecurityMetricType {
14+
public record SecurityMetricType(
15+
SecurityMetricGroup group,
16+
SecurityMetricInfo successMetricInfo,
17+
SecurityMetricInfo failuresMetricInfo,
18+
SecurityMetricInfo timeMetricInfo
19+
) {
1420

15-
AUTHC_API_KEY(
21+
public static final SecurityMetricType AUTHC_API_KEY = new SecurityMetricType(
1622
SecurityMetricGroup.AUTHC,
1723
new SecurityMetricInfo("es.security.authc.api_key.success.total", "Number of successful API key authentications.", "count"),
1824
new SecurityMetricInfo("es.security.authc.api_key.failures.total", "Number of failed API key authentications.", "count"),
1925
new SecurityMetricInfo("es.security.authc.api_key.time", "Time it took (in nanoseconds) to execute API key authentication.", "ns")
20-
),
26+
);
2127

22-
CLOUD_AUTHC_API_KEY(
23-
SecurityMetricGroup.AUTHC,
24-
new SecurityMetricInfo(
25-
"es.security.authc.cloud_api_key.success.total",
26-
"Number of successful cloud API key authentications.",
27-
"count"
28-
),
29-
new SecurityMetricInfo(
30-
"es.security.authc.cloud_api_key.failures.total",
31-
"Number of failed cloud API key authentications.",
32-
"count"
33-
),
34-
new SecurityMetricInfo(
35-
"es.security.authc.cloud_api_key.time",
36-
"Time it took (in nanoseconds) to execute cloud API key authentication.",
37-
"ns"
38-
)
39-
),
40-
41-
AUTHC_SERVICE_ACCOUNT(
28+
public static final SecurityMetricType AUTHC_SERVICE_ACCOUNT = new SecurityMetricType(
4229
SecurityMetricGroup.AUTHC,
4330
new SecurityMetricInfo(
4431
"es.security.authc.service_account.success.total",
@@ -55,9 +42,9 @@ public enum SecurityMetricType {
5542
"Time it took (in nanoseconds) to execute service account authentication.",
5643
"ns"
5744
)
58-
),
45+
);
5946

60-
AUTHC_OAUTH2_TOKEN(
47+
public static final SecurityMetricType AUTHC_OAUTH2_TOKEN = new SecurityMetricType(
6148
SecurityMetricGroup.AUTHC,
6249
new SecurityMetricInfo("es.security.authc.token.success.total", "Number of successful OAuth2 token authentications.", "count"),
6350
new SecurityMetricInfo("es.security.authc.token.failures.total", "Number of failed OAuth2 token authentications.", "count"),
@@ -66,48 +53,12 @@ public enum SecurityMetricType {
6653
"Time it took (in nanoseconds) to execute OAuth2 token authentication.",
6754
"ns"
6855
)
69-
),
56+
);
7057

71-
AUTHC_REALMS(
58+
public static final SecurityMetricType AUTHC_REALMS = new SecurityMetricType(
7259
SecurityMetricGroup.AUTHC,
7360
new SecurityMetricInfo("es.security.authc.realms.success.total", "Number of successful realm authentications.", "count"),
7461
new SecurityMetricInfo("es.security.authc.realms.failures.total", "Number of failed realm authentications.", "count"),
7562
new SecurityMetricInfo("es.security.authc.realms.time", "Time it took (in nanoseconds) to execute realm authentication.", "ns")
76-
),
77-
78-
;
79-
80-
private final SecurityMetricGroup group;
81-
private final SecurityMetricInfo successMetricInfo;
82-
private final SecurityMetricInfo failuresMetricInfo;
83-
private final SecurityMetricInfo timeMetricInfo;
84-
85-
SecurityMetricType(
86-
SecurityMetricGroup group,
87-
SecurityMetricInfo successMetricInfo,
88-
SecurityMetricInfo failuresMetricInfo,
89-
SecurityMetricInfo timeMetricInfo
90-
) {
91-
this.group = group;
92-
this.successMetricInfo = successMetricInfo;
93-
this.failuresMetricInfo = failuresMetricInfo;
94-
this.timeMetricInfo = timeMetricInfo;
95-
}
96-
97-
public SecurityMetricGroup group() {
98-
return this.group;
99-
}
100-
101-
public SecurityMetricInfo successMetricInfo() {
102-
return successMetricInfo;
103-
}
104-
105-
public SecurityMetricInfo failuresMetricInfo() {
106-
return failuresMetricInfo;
107-
}
108-
109-
public SecurityMetricInfo timeMetricInfo() {
110-
return timeMetricInfo;
111-
}
112-
63+
);
11364
}

0 commit comments

Comments
 (0)