@oneuptime/common 10.7.0 → 10.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +193 -0
- package/Tests/UI/Components/DuplicateModel.test.tsx +2 -2
- package/Types/Monitor/KubernetesAlertTemplates.ts +239 -14
- package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js +121 -0
- package/build/dist/Tests/Types/Monitor/KubernetesAlertTemplates.test.js.map +1 -0
- package/build/dist/Tests/UI/Components/DuplicateModel.test.js +2 -2
- package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +210 -14
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import {
|
|
2
|
+
KubernetesAlertTemplate,
|
|
3
|
+
KubernetesAlertTemplateArgs,
|
|
4
|
+
getAllKubernetesAlertTemplates,
|
|
5
|
+
getKubernetesAlertTemplateById,
|
|
6
|
+
} from "../../../Types/Monitor/KubernetesAlertTemplates";
|
|
7
|
+
import MonitorStep from "../../../Types/Monitor/MonitorStep";
|
|
8
|
+
import MonitorStepKubernetesMonitor from "../../../Types/Monitor/MonitorStepKubernetesMonitor";
|
|
9
|
+
import MetricsAggregationType from "../../../Types/Metrics/MetricsAggregationType";
|
|
10
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* These tests lock in the subtle, easy-to-regress decisions in the per-node
|
|
14
|
+
* ratio alert templates (request utilization + usage utilization):
|
|
15
|
+
*
|
|
16
|
+
* 1. Group-by uses the ClickHouse-stored `resource.`-prefixed attribute
|
|
17
|
+
* name (`resource.k8s.node.name`), not the bare `k8s.node.name`.
|
|
18
|
+
* OneUptime stamps OTel resource attributes with a `resource.` prefix
|
|
19
|
+
* at ingest, so the bare key would match nothing and collapse every
|
|
20
|
+
* node into one mislabeled series.
|
|
21
|
+
*
|
|
22
|
+
* 2. The aggregation differs by numerator shape:
|
|
23
|
+
* - Request utilization sums MANY container series per node, and both
|
|
24
|
+
* metrics come from the same `k8s_cluster` scrape, so `Sum` on both
|
|
25
|
+
* sides totals the containers and the scrape multiple cancels.
|
|
26
|
+
* - Usage utilization has ONE series per node, and numerator
|
|
27
|
+
* (kubeletstats) and denominator (k8s_cluster) come from different
|
|
28
|
+
* receivers, so `Avg` on both sides gives the correct per-minute
|
|
29
|
+
* ratio regardless of each receiver's scrape count.
|
|
30
|
+
*
|
|
31
|
+
* 3. The criteria reference the FORMULA alias (the computed percentage),
|
|
32
|
+
* not a raw query alias.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
interface RatioTemplateCase {
|
|
36
|
+
id: string;
|
|
37
|
+
numerator: string;
|
|
38
|
+
denominator: string;
|
|
39
|
+
numAlias: string;
|
|
40
|
+
denAlias: string;
|
|
41
|
+
resultAlias: string;
|
|
42
|
+
aggregation: MetricsAggregationType;
|
|
43
|
+
threshold: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const RATIO_TEMPLATES: Array<RatioTemplateCase> = [
|
|
47
|
+
// Request utilization — Sum/Sum (numerator totals many containers per node).
|
|
48
|
+
{
|
|
49
|
+
id: "k8s-node-cpu-request-utilization",
|
|
50
|
+
numerator: "k8s.container.cpu_request",
|
|
51
|
+
denominator: "k8s.node.allocatable_cpu",
|
|
52
|
+
numAlias: "req_cpu",
|
|
53
|
+
denAlias: "alloc_cpu",
|
|
54
|
+
resultAlias: "node_cpu_request_utilization",
|
|
55
|
+
aggregation: MetricsAggregationType.Sum,
|
|
56
|
+
threshold: 90,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: "k8s-node-memory-request-utilization",
|
|
60
|
+
numerator: "k8s.container.memory_request",
|
|
61
|
+
denominator: "k8s.node.allocatable_memory",
|
|
62
|
+
numAlias: "req_mem",
|
|
63
|
+
denAlias: "alloc_mem",
|
|
64
|
+
resultAlias: "node_memory_request_utilization",
|
|
65
|
+
aggregation: MetricsAggregationType.Sum,
|
|
66
|
+
threshold: 90,
|
|
67
|
+
},
|
|
68
|
+
// Usage utilization — Avg/Avg (one series per node, cross-receiver).
|
|
69
|
+
{
|
|
70
|
+
id: "k8s-high-cpu",
|
|
71
|
+
numerator: "k8s.node.cpu.usage",
|
|
72
|
+
denominator: "k8s.node.allocatable_cpu",
|
|
73
|
+
numAlias: "used_cpu",
|
|
74
|
+
denAlias: "alloc_cpu",
|
|
75
|
+
resultAlias: "node_cpu_utilization",
|
|
76
|
+
aggregation: MetricsAggregationType.Avg,
|
|
77
|
+
threshold: 90,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "k8s-high-memory",
|
|
81
|
+
numerator: "k8s.node.memory.usage",
|
|
82
|
+
denominator: "k8s.node.allocatable_memory",
|
|
83
|
+
numAlias: "used_mem",
|
|
84
|
+
denAlias: "alloc_mem",
|
|
85
|
+
resultAlias: "node_memory_utilization",
|
|
86
|
+
aggregation: MetricsAggregationType.Avg,
|
|
87
|
+
threshold: 85,
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
function buildArgs(): KubernetesAlertTemplateArgs {
|
|
92
|
+
return {
|
|
93
|
+
clusterIdentifier: "prod-cluster",
|
|
94
|
+
onlineMonitorStatusId: ObjectID.generate(),
|
|
95
|
+
offlineMonitorStatusId: ObjectID.generate(),
|
|
96
|
+
defaultIncidentSeverityId: ObjectID.generate(),
|
|
97
|
+
defaultAlertSeverityId: ObjectID.generate(),
|
|
98
|
+
monitorName: "Test Monitor",
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function getKubernetesMonitor(step: MonitorStep): MonitorStepKubernetesMonitor {
|
|
103
|
+
const kubernetesMonitor: MonitorStepKubernetesMonitor | undefined =
|
|
104
|
+
step.data?.kubernetesMonitor;
|
|
105
|
+
if (!kubernetesMonitor) {
|
|
106
|
+
throw new Error("kubernetesMonitor missing from monitor step");
|
|
107
|
+
}
|
|
108
|
+
return kubernetesMonitor;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
describe("KubernetesAlertTemplates - per-node ratio templates", () => {
|
|
112
|
+
test("all four ratio templates are registered", () => {
|
|
113
|
+
const ids: Array<string> = getAllKubernetesAlertTemplates().map(
|
|
114
|
+
(t: KubernetesAlertTemplate) => {
|
|
115
|
+
return t.id;
|
|
116
|
+
},
|
|
117
|
+
);
|
|
118
|
+
for (const tc of RATIO_TEMPLATES) {
|
|
119
|
+
expect(ids).toContain(tc.id);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test.each(RATIO_TEMPLATES)(
|
|
124
|
+
"$id is a per-node ($aggregation/$aggregation) ratio keyed on resource.k8s.node.name",
|
|
125
|
+
(tc: RatioTemplateCase) => {
|
|
126
|
+
const template: KubernetesAlertTemplate | undefined =
|
|
127
|
+
getKubernetesAlertTemplateById(tc.id);
|
|
128
|
+
expect(template).toBeDefined();
|
|
129
|
+
|
|
130
|
+
const step: MonitorStep = template!.getMonitorStep(buildArgs());
|
|
131
|
+
const monitor: MonitorStepKubernetesMonitor = getKubernetesMonitor(step);
|
|
132
|
+
|
|
133
|
+
const queryConfigs: Array<any> = monitor.metricViewConfig
|
|
134
|
+
.queryConfigs as Array<any>;
|
|
135
|
+
const formulaConfigs: Array<any> = monitor.metricViewConfig
|
|
136
|
+
.formulaConfigs as Array<any>;
|
|
137
|
+
|
|
138
|
+
// Two queries (numerator + denominator) and one formula.
|
|
139
|
+
expect(queryConfigs).toHaveLength(2);
|
|
140
|
+
expect(formulaConfigs).toHaveLength(1);
|
|
141
|
+
|
|
142
|
+
const [numerator, denominator] = queryConfigs;
|
|
143
|
+
|
|
144
|
+
// Metric names.
|
|
145
|
+
expect(numerator.metricQueryData.filterData.metricName).toBe(
|
|
146
|
+
tc.numerator,
|
|
147
|
+
);
|
|
148
|
+
expect(denominator.metricQueryData.filterData.metricName).toBe(
|
|
149
|
+
tc.denominator,
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* Decision (2): both sides use the same aggregation — Sum for request
|
|
154
|
+
* utilization (totals containers, cancels scrape factor) or Avg for
|
|
155
|
+
* usage utilization (one series per node, cross-receiver).
|
|
156
|
+
*/
|
|
157
|
+
expect(numerator.metricQueryData.filterData.aggegationType).toBe(
|
|
158
|
+
tc.aggregation,
|
|
159
|
+
);
|
|
160
|
+
expect(denominator.metricQueryData.filterData.aggegationType).toBe(
|
|
161
|
+
tc.aggregation,
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
/*
|
|
165
|
+
* Decision (1): group by the resource-prefixed node attribute on BOTH
|
|
166
|
+
* queries so the per-series fingerprints line up for the formula join.
|
|
167
|
+
*/
|
|
168
|
+
expect(numerator.metricQueryData.groupByAttributeKeys).toEqual([
|
|
169
|
+
"resource.k8s.node.name",
|
|
170
|
+
]);
|
|
171
|
+
expect(denominator.metricQueryData.groupByAttributeKeys).toEqual([
|
|
172
|
+
"resource.k8s.node.name",
|
|
173
|
+
]);
|
|
174
|
+
|
|
175
|
+
// Formula divides numerator by denominator and scales to a percentage.
|
|
176
|
+
expect(formulaConfigs[0].metricFormulaData.metricFormula).toBe(
|
|
177
|
+
`(${tc.numAlias} / ${tc.denAlias}) * 100`,
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
/*
|
|
181
|
+
* Decision (3): the criteria must reference the FORMULA alias (not a
|
|
182
|
+
* raw query), so the threshold is evaluated against the computed
|
|
183
|
+
* percentage.
|
|
184
|
+
*/
|
|
185
|
+
const offlineFilters: Array<any> = step.data?.monitorCriteria.data
|
|
186
|
+
?.monitorCriteriaInstanceArray?.[0]?.data?.filters as Array<any>;
|
|
187
|
+
expect(offlineFilters[0].metricMonitorOptions.metricAlias).toBe(
|
|
188
|
+
tc.resultAlias,
|
|
189
|
+
);
|
|
190
|
+
expect(offlineFilters[0].value).toBe(tc.threshold);
|
|
191
|
+
},
|
|
192
|
+
);
|
|
193
|
+
});
|
|
@@ -236,7 +236,7 @@ describe("DuplicateModel", () => {
|
|
|
236
236
|
);
|
|
237
237
|
expect(
|
|
238
238
|
within(errorDialog).getByTestId("confirm-modal-description")?.textContent,
|
|
239
|
-
).toBe("
|
|
239
|
+
).toBe("Could not create Foo");
|
|
240
240
|
expect(
|
|
241
241
|
within(errorDialog).getByTestId("modal-footer-submit-button")
|
|
242
242
|
?.textContent,
|
|
@@ -274,7 +274,7 @@ describe("DuplicateModel", () => {
|
|
|
274
274
|
);
|
|
275
275
|
expect(
|
|
276
276
|
within(errorDialog).getByTestId("confirm-modal-description")?.textContent,
|
|
277
|
-
).toBe("
|
|
277
|
+
).toBe("Could not find Foo with id foo");
|
|
278
278
|
expect(
|
|
279
279
|
within(errorDialog).getByTestId("modal-footer-submit-button")
|
|
280
280
|
?.textContent,
|
|
@@ -221,6 +221,111 @@ export function buildKubernetesMonitorConfig(args: {
|
|
|
221
221
|
};
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Build a per-series ratio monitor: `(numerator / denominator) * 100`,
|
|
226
|
+
* grouped by a single OpenTelemetry attribute so one incident fires per
|
|
227
|
+
* group (e.g. per node).
|
|
228
|
+
*
|
|
229
|
+
* Used for saturation metrics that aren't emitted as a single ready-made
|
|
230
|
+
* series — e.g. node request utilization (summed pod requests ÷ node
|
|
231
|
+
* allocatable) and node usage utilization (node usage ÷ node allocatable),
|
|
232
|
+
* neither of which the kubeletstats receiver exposes as a percentage.
|
|
233
|
+
*
|
|
234
|
+
* Aggregation (`aggregationType`, default `Sum`) — the per-series worker
|
|
235
|
+
* buckets raw rows by (group, minute) and applies this aggregation to
|
|
236
|
+
* EVERY row in the bucket, i.e. across both the grouped entities AND the
|
|
237
|
+
* scrapes in that minute. Pick it based on the numerator:
|
|
238
|
+
*
|
|
239
|
+
* - `Sum` when the numerator must be totalled across multiple series per
|
|
240
|
+
* group (e.g. summing every container's request on a node). The scrape
|
|
241
|
+
* multiple then has to cancel, so numerator and denominator must ride
|
|
242
|
+
* the SAME receiver/scrape — true for the request-utilization
|
|
243
|
+
* templates, where both metrics come from `k8s_cluster`:
|
|
244
|
+
* `(Σrequests × scrapes) / (allocatable × scrapes)`.
|
|
245
|
+
*
|
|
246
|
+
* - `Avg` when the numerator is already ONE series per group (e.g.
|
|
247
|
+
* `k8s.node.cpu.usage`). Avg yields the representative per-minute value
|
|
248
|
+
* independent of scrape count, so it stays correct even when numerator
|
|
249
|
+
* and denominator come from DIFFERENT receivers on independent scrape
|
|
250
|
+
* cycles (node usage is from the kubeletstats DaemonSet; allocatable is
|
|
251
|
+
* from the `k8s_cluster` Deployment). `Sum` there would only cancel if
|
|
252
|
+
* both reported the same row count every minute — fragile across
|
|
253
|
+
* restarts / missed scrapes / minute-boundary jitter.
|
|
254
|
+
*
|
|
255
|
+
* The group-by key is the ClickHouse-stored attribute name, which carries
|
|
256
|
+
* the `resource.` prefix for OTel resource attributes (see
|
|
257
|
+
* OtelMetricsIngestService — resource attributes are stamped with
|
|
258
|
+
* `prefixKeysWithString: "resource"`). So node grouping is
|
|
259
|
+
* `resource.k8s.node.name`, not the bare `k8s.node.name`.
|
|
260
|
+
*/
|
|
261
|
+
export function buildKubernetesRatioMonitorConfig(args: {
|
|
262
|
+
clusterIdentifier: string;
|
|
263
|
+
numeratorMetricName: string;
|
|
264
|
+
denominatorMetricName: string;
|
|
265
|
+
groupByAttributeKey: string;
|
|
266
|
+
numeratorAlias: string;
|
|
267
|
+
denominatorAlias: string;
|
|
268
|
+
resultAlias: string;
|
|
269
|
+
resultLegend: string;
|
|
270
|
+
resourceScope: KubernetesResourceScope;
|
|
271
|
+
rollingTime: RollingTime;
|
|
272
|
+
aggregationType?: MetricsAggregationType | undefined;
|
|
273
|
+
}): MonitorStepKubernetesMonitor {
|
|
274
|
+
const aggregationType: MetricsAggregationType =
|
|
275
|
+
args.aggregationType || MetricsAggregationType.Sum;
|
|
276
|
+
|
|
277
|
+
const buildQueryConfig: (alias: string, metricName: string) => any = (
|
|
278
|
+
alias: string,
|
|
279
|
+
metricName: string,
|
|
280
|
+
): any => {
|
|
281
|
+
return {
|
|
282
|
+
metricAliasData: {
|
|
283
|
+
metricVariable: alias,
|
|
284
|
+
title: alias,
|
|
285
|
+
description: alias,
|
|
286
|
+
legend: alias,
|
|
287
|
+
legendUnit: undefined,
|
|
288
|
+
},
|
|
289
|
+
metricQueryData: {
|
|
290
|
+
filterData: {
|
|
291
|
+
metricName: metricName,
|
|
292
|
+
attributes: {},
|
|
293
|
+
aggegationType: aggregationType,
|
|
294
|
+
aggregateBy: {},
|
|
295
|
+
},
|
|
296
|
+
groupByAttributeKeys: [args.groupByAttributeKey],
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
return {
|
|
302
|
+
clusterIdentifier: args.clusterIdentifier,
|
|
303
|
+
resourceScope: args.resourceScope,
|
|
304
|
+
resourceFilters: {},
|
|
305
|
+
metricViewConfig: {
|
|
306
|
+
queryConfigs: [
|
|
307
|
+
buildQueryConfig(args.numeratorAlias, args.numeratorMetricName),
|
|
308
|
+
buildQueryConfig(args.denominatorAlias, args.denominatorMetricName),
|
|
309
|
+
],
|
|
310
|
+
formulaConfigs: [
|
|
311
|
+
{
|
|
312
|
+
metricAliasData: {
|
|
313
|
+
metricVariable: args.resultAlias,
|
|
314
|
+
title: args.resultLegend,
|
|
315
|
+
description: args.resultLegend,
|
|
316
|
+
legend: args.resultLegend,
|
|
317
|
+
legendUnit: "%",
|
|
318
|
+
},
|
|
319
|
+
metricFormulaData: {
|
|
320
|
+
metricFormula: `(${args.numeratorAlias} / ${args.denominatorAlias}) * 100`,
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
},
|
|
325
|
+
rollingTime: args.rollingTime,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
|
|
224
329
|
// --- Template Definitions ---
|
|
225
330
|
|
|
226
331
|
const crashLoopBackOffTemplate: KubernetesAlertTemplate = {
|
|
@@ -356,19 +461,31 @@ const nodeNotReadyTemplate: KubernetesAlertTemplate = {
|
|
|
356
461
|
const highCpuTemplate: KubernetesAlertTemplate = {
|
|
357
462
|
id: "k8s-high-cpu",
|
|
358
463
|
name: "High Node CPU Utilization",
|
|
359
|
-
description:
|
|
464
|
+
description:
|
|
465
|
+
"Alert when a node's average CPU usage exceeds 90% of its allocatable CPU. Computed per node as k8s.node.cpu.usage ÷ k8s.node.allocatable_cpu × 100 — both are cores, so this is a true percentage (the raw k8s.node.cpu.utilization metric is a misnamed cores gauge, not a percent).",
|
|
360
466
|
category: "Node",
|
|
361
467
|
severity: "Warning",
|
|
362
468
|
getMonitorStep: (args: KubernetesAlertTemplateArgs): MonitorStep => {
|
|
363
|
-
const metricAlias: string = "
|
|
469
|
+
const metricAlias: string = "node_cpu_utilization";
|
|
364
470
|
|
|
365
471
|
return buildKubernetesMonitorStep({
|
|
366
|
-
kubernetesMonitor:
|
|
472
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
367
473
|
clusterIdentifier: args.clusterIdentifier,
|
|
368
|
-
|
|
369
|
-
|
|
474
|
+
numeratorMetricName: "k8s.node.cpu.usage",
|
|
475
|
+
denominatorMetricName: "k8s.node.allocatable_cpu",
|
|
476
|
+
groupByAttributeKey: "resource.k8s.node.name",
|
|
477
|
+
numeratorAlias: "used_cpu",
|
|
478
|
+
denominatorAlias: "alloc_cpu",
|
|
479
|
+
resultAlias: metricAlias,
|
|
480
|
+
resultLegend: "Node CPU Utilization (%)",
|
|
370
481
|
resourceScope: KubernetesResourceScope.Node,
|
|
371
482
|
rollingTime: RollingTime.Past5Minutes,
|
|
483
|
+
/*
|
|
484
|
+
* Single series per node from two DIFFERENT receivers (usage =
|
|
485
|
+
* kubeletstats, allocatable = k8s_cluster) — Avg keeps the per-minute
|
|
486
|
+
* ratio correct regardless of each receiver's scrape count. See
|
|
487
|
+
* buildKubernetesRatioMonitorConfig.
|
|
488
|
+
*/
|
|
372
489
|
aggregationType: MetricsAggregationType.Avg,
|
|
373
490
|
}),
|
|
374
491
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
@@ -380,10 +497,10 @@ const highCpuTemplate: KubernetesAlertTemplate = {
|
|
|
380
497
|
filterType: FilterType.GreaterThan,
|
|
381
498
|
value: 90,
|
|
382
499
|
incidentTitle: `[K8s] High CPU Utilization (>90%) - ${args.monitorName}`,
|
|
383
|
-
incidentDescription: `
|
|
500
|
+
incidentDescription: `A node's average CPU usage has exceeded 90% of its allocatable CPU. Sustained high CPU usage can cause pod throttling, increased latency, and potential node instability. Check the root cause for the specific node and top CPU-consuming workloads.`,
|
|
384
501
|
criteriaName: "High CPU - Utilization > 90%",
|
|
385
502
|
criteriaDescription:
|
|
386
|
-
"Triggers when
|
|
503
|
+
"Triggers when a node's average CPU usage exceeds 90% of its allocatable CPU over the monitoring window.",
|
|
387
504
|
}),
|
|
388
505
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
389
506
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -398,19 +515,31 @@ const highCpuTemplate: KubernetesAlertTemplate = {
|
|
|
398
515
|
const highMemoryTemplate: KubernetesAlertTemplate = {
|
|
399
516
|
id: "k8s-high-memory",
|
|
400
517
|
name: "High Node Memory Utilization",
|
|
401
|
-
description:
|
|
518
|
+
description:
|
|
519
|
+
"Alert when a node's average memory usage exceeds 85% of its allocatable memory. Computed per node as k8s.node.memory.usage ÷ k8s.node.allocatable_memory × 100 — both are bytes, so this is a true percentage (the raw k8s.node.memory.usage metric is bytes, not a percent).",
|
|
402
520
|
category: "Node",
|
|
403
521
|
severity: "Warning",
|
|
404
522
|
getMonitorStep: (args: KubernetesAlertTemplateArgs): MonitorStep => {
|
|
405
|
-
const metricAlias: string = "
|
|
523
|
+
const metricAlias: string = "node_memory_utilization";
|
|
406
524
|
|
|
407
525
|
return buildKubernetesMonitorStep({
|
|
408
|
-
kubernetesMonitor:
|
|
526
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
409
527
|
clusterIdentifier: args.clusterIdentifier,
|
|
410
|
-
|
|
411
|
-
|
|
528
|
+
numeratorMetricName: "k8s.node.memory.usage",
|
|
529
|
+
denominatorMetricName: "k8s.node.allocatable_memory",
|
|
530
|
+
groupByAttributeKey: "resource.k8s.node.name",
|
|
531
|
+
numeratorAlias: "used_mem",
|
|
532
|
+
denominatorAlias: "alloc_mem",
|
|
533
|
+
resultAlias: metricAlias,
|
|
534
|
+
resultLegend: "Node Memory Utilization (%)",
|
|
412
535
|
resourceScope: KubernetesResourceScope.Node,
|
|
413
536
|
rollingTime: RollingTime.Past5Minutes,
|
|
537
|
+
/*
|
|
538
|
+
* Single series per node from two DIFFERENT receivers (usage =
|
|
539
|
+
* kubeletstats, allocatable = k8s_cluster) — Avg keeps the per-minute
|
|
540
|
+
* ratio correct regardless of each receiver's scrape count. See
|
|
541
|
+
* buildKubernetesRatioMonitorConfig.
|
|
542
|
+
*/
|
|
414
543
|
aggregationType: MetricsAggregationType.Avg,
|
|
415
544
|
}),
|
|
416
545
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
@@ -422,10 +551,10 @@ const highMemoryTemplate: KubernetesAlertTemplate = {
|
|
|
422
551
|
filterType: FilterType.GreaterThan,
|
|
423
552
|
value: 85,
|
|
424
553
|
incidentTitle: `[K8s] High Memory Utilization (>85%) - ${args.monitorName}`,
|
|
425
|
-
incidentDescription: `
|
|
554
|
+
incidentDescription: `A node's average memory usage has exceeded 85% of its allocatable memory. High memory usage can lead to OOMKilled pods, node instability, and potential evictions. Check the root cause for the specific node and top memory-consuming workloads.`,
|
|
426
555
|
criteriaName: "High Memory - Utilization > 85%",
|
|
427
556
|
criteriaDescription:
|
|
428
|
-
"Triggers when
|
|
557
|
+
"Triggers when a node's average memory usage exceeds 85% of its allocatable memory over the monitoring window.",
|
|
429
558
|
}),
|
|
430
559
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
431
560
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -736,6 +865,100 @@ const daemonSetUnavailableTemplate: KubernetesAlertTemplate = {
|
|
|
736
865
|
},
|
|
737
866
|
};
|
|
738
867
|
|
|
868
|
+
const nodeCpuRequestUtilizationTemplate: KubernetesAlertTemplate = {
|
|
869
|
+
id: "k8s-node-cpu-request-utilization",
|
|
870
|
+
name: "High Node CPU Request Commitment",
|
|
871
|
+
description:
|
|
872
|
+
"Alert when a node's committed CPU requests exceed 90% of its allocatable CPU. Derived per node from summed container CPU requests over node allocatable CPU — both collected by default via the k8s_cluster receiver. A near-full node can't schedule new pods even if actual CPU usage is low.",
|
|
873
|
+
category: "Node",
|
|
874
|
+
severity: "Warning",
|
|
875
|
+
getMonitorStep: (args: KubernetesAlertTemplateArgs): MonitorStep => {
|
|
876
|
+
const metricAlias: string = "node_cpu_request_utilization";
|
|
877
|
+
|
|
878
|
+
return buildKubernetesMonitorStep({
|
|
879
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
880
|
+
clusterIdentifier: args.clusterIdentifier,
|
|
881
|
+
numeratorMetricName: "k8s.container.cpu_request",
|
|
882
|
+
denominatorMetricName: "k8s.node.allocatable_cpu",
|
|
883
|
+
groupByAttributeKey: "resource.k8s.node.name",
|
|
884
|
+
numeratorAlias: "req_cpu",
|
|
885
|
+
denominatorAlias: "alloc_cpu",
|
|
886
|
+
resultAlias: metricAlias,
|
|
887
|
+
resultLegend: "Node CPU Request Utilization (%)",
|
|
888
|
+
resourceScope: KubernetesResourceScope.Node,
|
|
889
|
+
rollingTime: RollingTime.Past5Minutes,
|
|
890
|
+
}),
|
|
891
|
+
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
892
|
+
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
893
|
+
incidentSeverityId: args.defaultIncidentSeverityId,
|
|
894
|
+
alertSeverityId: args.defaultAlertSeverityId,
|
|
895
|
+
monitorName: args.monitorName,
|
|
896
|
+
metricAlias,
|
|
897
|
+
filterType: FilterType.GreaterThan,
|
|
898
|
+
value: 90,
|
|
899
|
+
incidentTitle: `[K8s] High Node CPU Request Commitment (>90%) - ${args.monitorName}`,
|
|
900
|
+
incidentDescription: `A node's committed CPU requests have exceeded 90% of its allocatable CPU. The node is nearly full from a scheduling standpoint and may be unable to place new pods, even if current CPU usage is low. Check the root cause for the specific node and its top CPU-requesting workloads.`,
|
|
901
|
+
criteriaName: "High CPU Request Commitment - Utilization > 90%",
|
|
902
|
+
criteriaDescription:
|
|
903
|
+
"Triggers when any node's summed container CPU requests exceed 90% of its allocatable CPU.",
|
|
904
|
+
}),
|
|
905
|
+
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
906
|
+
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
907
|
+
metricAlias,
|
|
908
|
+
filterType: FilterType.LessThanOrEqualTo,
|
|
909
|
+
value: 90,
|
|
910
|
+
}),
|
|
911
|
+
});
|
|
912
|
+
},
|
|
913
|
+
};
|
|
914
|
+
|
|
915
|
+
const nodeMemoryRequestUtilizationTemplate: KubernetesAlertTemplate = {
|
|
916
|
+
id: "k8s-node-memory-request-utilization",
|
|
917
|
+
name: "High Node Memory Request Commitment",
|
|
918
|
+
description:
|
|
919
|
+
"Alert when a node's committed memory requests exceed 90% of its allocatable memory. Derived per node from summed container memory requests over node allocatable memory — both collected by default via the k8s_cluster receiver. A near-full node can't schedule new pods even if actual memory usage is low.",
|
|
920
|
+
category: "Node",
|
|
921
|
+
severity: "Warning",
|
|
922
|
+
getMonitorStep: (args: KubernetesAlertTemplateArgs): MonitorStep => {
|
|
923
|
+
const metricAlias: string = "node_memory_request_utilization";
|
|
924
|
+
|
|
925
|
+
return buildKubernetesMonitorStep({
|
|
926
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
927
|
+
clusterIdentifier: args.clusterIdentifier,
|
|
928
|
+
numeratorMetricName: "k8s.container.memory_request",
|
|
929
|
+
denominatorMetricName: "k8s.node.allocatable_memory",
|
|
930
|
+
groupByAttributeKey: "resource.k8s.node.name",
|
|
931
|
+
numeratorAlias: "req_mem",
|
|
932
|
+
denominatorAlias: "alloc_mem",
|
|
933
|
+
resultAlias: metricAlias,
|
|
934
|
+
resultLegend: "Node Memory Request Utilization (%)",
|
|
935
|
+
resourceScope: KubernetesResourceScope.Node,
|
|
936
|
+
rollingTime: RollingTime.Past5Minutes,
|
|
937
|
+
}),
|
|
938
|
+
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
939
|
+
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
940
|
+
incidentSeverityId: args.defaultIncidentSeverityId,
|
|
941
|
+
alertSeverityId: args.defaultAlertSeverityId,
|
|
942
|
+
monitorName: args.monitorName,
|
|
943
|
+
metricAlias,
|
|
944
|
+
filterType: FilterType.GreaterThan,
|
|
945
|
+
value: 90,
|
|
946
|
+
incidentTitle: `[K8s] High Node Memory Request Commitment (>90%) - ${args.monitorName}`,
|
|
947
|
+
incidentDescription: `A node's committed memory requests have exceeded 90% of its allocatable memory. The node is nearly full from a scheduling standpoint and may be unable to place new pods, even if current memory usage is low. Check the root cause for the specific node and its top memory-requesting workloads.`,
|
|
948
|
+
criteriaName: "High Memory Request Commitment - Utilization > 90%",
|
|
949
|
+
criteriaDescription:
|
|
950
|
+
"Triggers when any node's summed container memory requests exceed 90% of its allocatable memory.",
|
|
951
|
+
}),
|
|
952
|
+
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
953
|
+
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
954
|
+
metricAlias,
|
|
955
|
+
filterType: FilterType.LessThanOrEqualTo,
|
|
956
|
+
value: 90,
|
|
957
|
+
}),
|
|
958
|
+
});
|
|
959
|
+
},
|
|
960
|
+
};
|
|
961
|
+
|
|
739
962
|
export function getAllKubernetesAlertTemplates(): Array<KubernetesAlertTemplate> {
|
|
740
963
|
return [
|
|
741
964
|
crashLoopBackOffTemplate,
|
|
@@ -750,6 +973,8 @@ export function getAllKubernetesAlertTemplates(): Array<KubernetesAlertTemplate>
|
|
|
750
973
|
schedulerBacklogTemplate,
|
|
751
974
|
highDiskUsageTemplate,
|
|
752
975
|
daemonSetUnavailableTemplate,
|
|
976
|
+
nodeCpuRequestUtilizationTemplate,
|
|
977
|
+
nodeMemoryRequestUtilizationTemplate,
|
|
753
978
|
];
|
|
754
979
|
}
|
|
755
980
|
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { getAllKubernetesAlertTemplates, getKubernetesAlertTemplateById, } from "../../../Types/Monitor/KubernetesAlertTemplates";
|
|
2
|
+
import MetricsAggregationType from "../../../Types/Metrics/MetricsAggregationType";
|
|
3
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
4
|
+
const RATIO_TEMPLATES = [
|
|
5
|
+
// Request utilization — Sum/Sum (numerator totals many containers per node).
|
|
6
|
+
{
|
|
7
|
+
id: "k8s-node-cpu-request-utilization",
|
|
8
|
+
numerator: "k8s.container.cpu_request",
|
|
9
|
+
denominator: "k8s.node.allocatable_cpu",
|
|
10
|
+
numAlias: "req_cpu",
|
|
11
|
+
denAlias: "alloc_cpu",
|
|
12
|
+
resultAlias: "node_cpu_request_utilization",
|
|
13
|
+
aggregation: MetricsAggregationType.Sum,
|
|
14
|
+
threshold: 90,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "k8s-node-memory-request-utilization",
|
|
18
|
+
numerator: "k8s.container.memory_request",
|
|
19
|
+
denominator: "k8s.node.allocatable_memory",
|
|
20
|
+
numAlias: "req_mem",
|
|
21
|
+
denAlias: "alloc_mem",
|
|
22
|
+
resultAlias: "node_memory_request_utilization",
|
|
23
|
+
aggregation: MetricsAggregationType.Sum,
|
|
24
|
+
threshold: 90,
|
|
25
|
+
},
|
|
26
|
+
// Usage utilization — Avg/Avg (one series per node, cross-receiver).
|
|
27
|
+
{
|
|
28
|
+
id: "k8s-high-cpu",
|
|
29
|
+
numerator: "k8s.node.cpu.usage",
|
|
30
|
+
denominator: "k8s.node.allocatable_cpu",
|
|
31
|
+
numAlias: "used_cpu",
|
|
32
|
+
denAlias: "alloc_cpu",
|
|
33
|
+
resultAlias: "node_cpu_utilization",
|
|
34
|
+
aggregation: MetricsAggregationType.Avg,
|
|
35
|
+
threshold: 90,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: "k8s-high-memory",
|
|
39
|
+
numerator: "k8s.node.memory.usage",
|
|
40
|
+
denominator: "k8s.node.allocatable_memory",
|
|
41
|
+
numAlias: "used_mem",
|
|
42
|
+
denAlias: "alloc_mem",
|
|
43
|
+
resultAlias: "node_memory_utilization",
|
|
44
|
+
aggregation: MetricsAggregationType.Avg,
|
|
45
|
+
threshold: 85,
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
function buildArgs() {
|
|
49
|
+
return {
|
|
50
|
+
clusterIdentifier: "prod-cluster",
|
|
51
|
+
onlineMonitorStatusId: ObjectID.generate(),
|
|
52
|
+
offlineMonitorStatusId: ObjectID.generate(),
|
|
53
|
+
defaultIncidentSeverityId: ObjectID.generate(),
|
|
54
|
+
defaultAlertSeverityId: ObjectID.generate(),
|
|
55
|
+
monitorName: "Test Monitor",
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function getKubernetesMonitor(step) {
|
|
59
|
+
var _a;
|
|
60
|
+
const kubernetesMonitor = (_a = step.data) === null || _a === void 0 ? void 0 : _a.kubernetesMonitor;
|
|
61
|
+
if (!kubernetesMonitor) {
|
|
62
|
+
throw new Error("kubernetesMonitor missing from monitor step");
|
|
63
|
+
}
|
|
64
|
+
return kubernetesMonitor;
|
|
65
|
+
}
|
|
66
|
+
describe("KubernetesAlertTemplates - per-node ratio templates", () => {
|
|
67
|
+
test("all four ratio templates are registered", () => {
|
|
68
|
+
const ids = getAllKubernetesAlertTemplates().map((t) => {
|
|
69
|
+
return t.id;
|
|
70
|
+
});
|
|
71
|
+
for (const tc of RATIO_TEMPLATES) {
|
|
72
|
+
expect(ids).toContain(tc.id);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
test.each(RATIO_TEMPLATES)("$id is a per-node ($aggregation/$aggregation) ratio keyed on resource.k8s.node.name", (tc) => {
|
|
76
|
+
var _a, _b, _c, _d, _e;
|
|
77
|
+
const template = getKubernetesAlertTemplateById(tc.id);
|
|
78
|
+
expect(template).toBeDefined();
|
|
79
|
+
const step = template.getMonitorStep(buildArgs());
|
|
80
|
+
const monitor = getKubernetesMonitor(step);
|
|
81
|
+
const queryConfigs = monitor.metricViewConfig
|
|
82
|
+
.queryConfigs;
|
|
83
|
+
const formulaConfigs = monitor.metricViewConfig
|
|
84
|
+
.formulaConfigs;
|
|
85
|
+
// Two queries (numerator + denominator) and one formula.
|
|
86
|
+
expect(queryConfigs).toHaveLength(2);
|
|
87
|
+
expect(formulaConfigs).toHaveLength(1);
|
|
88
|
+
const [numerator, denominator] = queryConfigs;
|
|
89
|
+
// Metric names.
|
|
90
|
+
expect(numerator.metricQueryData.filterData.metricName).toBe(tc.numerator);
|
|
91
|
+
expect(denominator.metricQueryData.filterData.metricName).toBe(tc.denominator);
|
|
92
|
+
/*
|
|
93
|
+
* Decision (2): both sides use the same aggregation — Sum for request
|
|
94
|
+
* utilization (totals containers, cancels scrape factor) or Avg for
|
|
95
|
+
* usage utilization (one series per node, cross-receiver).
|
|
96
|
+
*/
|
|
97
|
+
expect(numerator.metricQueryData.filterData.aggegationType).toBe(tc.aggregation);
|
|
98
|
+
expect(denominator.metricQueryData.filterData.aggegationType).toBe(tc.aggregation);
|
|
99
|
+
/*
|
|
100
|
+
* Decision (1): group by the resource-prefixed node attribute on BOTH
|
|
101
|
+
* queries so the per-series fingerprints line up for the formula join.
|
|
102
|
+
*/
|
|
103
|
+
expect(numerator.metricQueryData.groupByAttributeKeys).toEqual([
|
|
104
|
+
"resource.k8s.node.name",
|
|
105
|
+
]);
|
|
106
|
+
expect(denominator.metricQueryData.groupByAttributeKeys).toEqual([
|
|
107
|
+
"resource.k8s.node.name",
|
|
108
|
+
]);
|
|
109
|
+
// Formula divides numerator by denominator and scales to a percentage.
|
|
110
|
+
expect(formulaConfigs[0].metricFormulaData.metricFormula).toBe(`(${tc.numAlias} / ${tc.denAlias}) * 100`);
|
|
111
|
+
/*
|
|
112
|
+
* Decision (3): the criteria must reference the FORMULA alias (not a
|
|
113
|
+
* raw query), so the threshold is evaluated against the computed
|
|
114
|
+
* percentage.
|
|
115
|
+
*/
|
|
116
|
+
const offlineFilters = (_e = (_d = (_c = (_b = (_a = step.data) === null || _a === void 0 ? void 0 : _a.monitorCriteria.data) === null || _b === void 0 ? void 0 : _b.monitorCriteriaInstanceArray) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.filters;
|
|
117
|
+
expect(offlineFilters[0].metricMonitorOptions.metricAlias).toBe(tc.resultAlias);
|
|
118
|
+
expect(offlineFilters[0].value).toBe(tc.threshold);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=KubernetesAlertTemplates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KubernetesAlertTemplates.test.js","sourceRoot":"","sources":["../../../../../Tests/Types/Monitor/KubernetesAlertTemplates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -173,7 +173,7 @@ describe("DuplicateModel", () => {
|
|
|
173
173
|
await screen.findByText("Duplicate Error");
|
|
174
174
|
const errorDialog = screen.getByRole("dialog");
|
|
175
175
|
expect((_a = within(errorDialog).getByTestId("modal-title")) === null || _a === void 0 ? void 0 : _a.textContent).toBe("Duplicate Error");
|
|
176
|
-
expect((_b = within(errorDialog).getByTestId("confirm-modal-description")) === null || _b === void 0 ? void 0 : _b.textContent).toBe("
|
|
176
|
+
expect((_b = within(errorDialog).getByTestId("confirm-modal-description")) === null || _b === void 0 ? void 0 : _b.textContent).toBe("Could not create Foo");
|
|
177
177
|
expect((_c = within(errorDialog).getByTestId("modal-footer-submit-button")) === null || _c === void 0 ? void 0 : _c.textContent).toBe("Close");
|
|
178
178
|
});
|
|
179
179
|
it("handles item not found error correctly", async () => {
|
|
@@ -196,7 +196,7 @@ describe("DuplicateModel", () => {
|
|
|
196
196
|
await screen.findByText("Duplicate Error");
|
|
197
197
|
const errorDialog = screen.getByRole("dialog");
|
|
198
198
|
expect((_a = within(errorDialog).getByTestId("modal-title")) === null || _a === void 0 ? void 0 : _a.textContent).toBe("Duplicate Error");
|
|
199
|
-
expect((_b = within(errorDialog).getByTestId("confirm-modal-description")) === null || _b === void 0 ? void 0 : _b.textContent).toBe("
|
|
199
|
+
expect((_b = within(errorDialog).getByTestId("confirm-modal-description")) === null || _b === void 0 ? void 0 : _b.textContent).toBe("Could not find Foo with id foo");
|
|
200
200
|
expect((_c = within(errorDialog).getByTestId("modal-footer-submit-button")) === null || _c === void 0 ? void 0 : _c.textContent).toBe("Close");
|
|
201
201
|
});
|
|
202
202
|
it("closes error dialog when close button is clicked", async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DuplicateModel.test.js","sourceRoot":"","sources":["../../../../../Tests/UI/Components/DuplicateModel.test.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DuplicateModel.test.js","sourceRoot":"","sources":["../../../../../Tests/UI/Components/DuplicateModel.test.tsx"],"names":[],"mappings":";;;;;;AAAA,OAAO,cAAc,MAAM,sDAAsD,CAAC;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,GACP,MAAM,wBAAwB,CAAC;AAChC,OAAO,SAAS,MAAM,oEAAoE,CAAC;AAC3F,OAAO,KAAK,MAAM,0BAA0B,CAAC;AAC7C,OAAO,eAAe,MAAM,yCAAyC,CAAC;AACtE,OAAO,aAAa,MAAM,uCAAuC,CAAC;AAClE,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AACpD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,IAAI,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC7C,OAAO;QACL,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;SACpB;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,OAAO,UAAU,MAAM,8BAA8B,CAAC;AAEtD,mDAAmD;AACnD,IAAI,gBAAgB,GAAW,CAAC,CAAC;AACjC,IAAI,eAAe,GAAW,CAAC,CAAC;AAEhC,IAAI,CAAC,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACpD,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACzC,gBAAgB,EAAE,CAAC;YACnB,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,UAAU,EAAE,SAAS;oBACrB,8DAA8D;oBAC9D,QAAQ,EAAE,UAAU,GAAW,EAAE,KAAa;wBAC5C,8DAA8D;wBAC7D,IAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBAC7B,CAAC;oBACD,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;iBACvB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACxC,eAAe,EAAE,CAAC;YAClB,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,OAAO,CAAC;oBACrB,IAAI,EAAE;wBACJ,EAAE,EAAE,QAAQ;wBACZ,UAAU,EAAE,SAAS;qBACtB;iBACF,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAUH,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,SAAS;IAAjC;;QACS,eAAU,GAAY,UAAU,CAAC;IAC1C,CAAC;CAAA,CAAA;AAFK,SAAS;IARd,aAAa,CAAC;QACb,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,MAAM;QAClB,IAAI,EAAE,QAAQ,CAAC,MAAM;QACrB,gBAAgB,EAAE,cAAc;KACjC,CAAC;IACD,eAAe,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;GACnC,SAAS,CAEd;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,MAAM,iBAAiB,GAAsB,EAAE,CAAC;IAChD,MAAM,cAAc,GAAiC;QACnD;YACE,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI;aACjB;YACD,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,qBAAqB;SACnC;KACF,CAAC;IACF,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;;QAC3B,MAAM,CACJ,oBAAC,cAAc,IACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,GAC9B,CACH,CAAC;QACF,MAAM,CAAC,MAAA,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,0CAAE,WAAW,CAAC,CAAC,IAAI,CAClE,eAAe,CAChB,CAAC;QACF,MAAM,CAAC,MAAA,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,0CAAE,WAAW,CAAC,CAAC,IAAI,CAC9D,qEAAqE,CACtE,CAAC;QACF,MAAM,CAAC,MAAA,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,0CAAE,WAAW,CAAC,CAAC,IAAI,CACzD,eAAe,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;;QACnE,MAAM,CACJ,oBAAC,cAAc,IACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,GAC9B,CACH,CAAC;QACF,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACrD,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,aAAa,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAA,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,0CAAE,WAAW,CAAC,CAAC,IAAI,CACxE,eAAe,CAChB,CAAC;QACF,MAAM,CACJ,MAAA,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,0CAAE,WAAW,CACpE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACvD,MAAM,CACJ,MAAA,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,0CAC3D,WAAW,CAChB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxB,MAAM,CACJ,MAAA,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,0CAC1D,WAAW,CAChB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,kBAAkB,GAA8B,IAAI,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,CACJ,oBAAC,cAAc,IACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GACvC,CACH,CAAC;QACF,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACrD,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAgB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzE,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,OAAO,MAAM,CAAC,kBAAkB,CAAC,CAAC,cAAc,CAAC;gBAC/C,EAAE,EAAE,QAAQ;gBACZ,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,cAAc,CAC/C,IAAI,KAAK,CAAC,cAAc,CAAC,EACzB;gBACE,aAAa,EAAE,IAAI;aACpB,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,kBAAkB,GAA8B,IAAI,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,CACJ,oBAAC,cAAc,IACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GACvC,CACH,CAAC;QACF,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACrD,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,WAAW,GAAgB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;YAClE,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;;QACxD,MAAM,kBAAkB,GAA8B,IAAI,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,CACJ,oBAAC,cAAc,IACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GACvC,CACH,CAAC;QACF,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACrD,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAgB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzE,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAA,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,0CAAE,WAAW,CAAC,CAAC,IAAI,CACtE,iBAAiB,CAClB,CAAC;QACF,MAAM,CACJ,MAAA,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,0CAAE,WAAW,CAC1E,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC/B,MAAM,CACJ,MAAA,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,0CACzD,WAAW,CAChB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;;QACtD,MAAM,kBAAkB,GAA8B,IAAI,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,CACJ,oBAAC,cAAc,IACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GACvC,CACH,CAAC;QACF,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACrD,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAgB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzE,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAA,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,0CAAE,WAAW,CAAC,CAAC,IAAI,CACtE,iBAAiB,CAClB,CAAC;QACF,MAAM,CACJ,MAAA,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,0CAAE,WAAW,CAC1E,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACzC,MAAM,CACJ,MAAA,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,0CACzD,WAAW,CAChB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,kBAAkB,GAA8B,IAAI,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,CACJ,oBAAC,cAAc,IACb,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GACvC,CACH,CAAC;QACF,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;YACrD,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAgB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;YACzE,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAgB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAgB,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;YACvE,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,KAAK,GAAG,CAAC,GAAG,EAAE;YACZ,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -146,6 +146,92 @@ export function buildKubernetesMonitorConfig(args) {
|
|
|
146
146
|
rollingTime: args.rollingTime,
|
|
147
147
|
};
|
|
148
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Build a per-series ratio monitor: `(numerator / denominator) * 100`,
|
|
151
|
+
* grouped by a single OpenTelemetry attribute so one incident fires per
|
|
152
|
+
* group (e.g. per node).
|
|
153
|
+
*
|
|
154
|
+
* Used for saturation metrics that aren't emitted as a single ready-made
|
|
155
|
+
* series — e.g. node request utilization (summed pod requests ÷ node
|
|
156
|
+
* allocatable) and node usage utilization (node usage ÷ node allocatable),
|
|
157
|
+
* neither of which the kubeletstats receiver exposes as a percentage.
|
|
158
|
+
*
|
|
159
|
+
* Aggregation (`aggregationType`, default `Sum`) — the per-series worker
|
|
160
|
+
* buckets raw rows by (group, minute) and applies this aggregation to
|
|
161
|
+
* EVERY row in the bucket, i.e. across both the grouped entities AND the
|
|
162
|
+
* scrapes in that minute. Pick it based on the numerator:
|
|
163
|
+
*
|
|
164
|
+
* - `Sum` when the numerator must be totalled across multiple series per
|
|
165
|
+
* group (e.g. summing every container's request on a node). The scrape
|
|
166
|
+
* multiple then has to cancel, so numerator and denominator must ride
|
|
167
|
+
* the SAME receiver/scrape — true for the request-utilization
|
|
168
|
+
* templates, where both metrics come from `k8s_cluster`:
|
|
169
|
+
* `(Σrequests × scrapes) / (allocatable × scrapes)`.
|
|
170
|
+
*
|
|
171
|
+
* - `Avg` when the numerator is already ONE series per group (e.g.
|
|
172
|
+
* `k8s.node.cpu.usage`). Avg yields the representative per-minute value
|
|
173
|
+
* independent of scrape count, so it stays correct even when numerator
|
|
174
|
+
* and denominator come from DIFFERENT receivers on independent scrape
|
|
175
|
+
* cycles (node usage is from the kubeletstats DaemonSet; allocatable is
|
|
176
|
+
* from the `k8s_cluster` Deployment). `Sum` there would only cancel if
|
|
177
|
+
* both reported the same row count every minute — fragile across
|
|
178
|
+
* restarts / missed scrapes / minute-boundary jitter.
|
|
179
|
+
*
|
|
180
|
+
* The group-by key is the ClickHouse-stored attribute name, which carries
|
|
181
|
+
* the `resource.` prefix for OTel resource attributes (see
|
|
182
|
+
* OtelMetricsIngestService — resource attributes are stamped with
|
|
183
|
+
* `prefixKeysWithString: "resource"`). So node grouping is
|
|
184
|
+
* `resource.k8s.node.name`, not the bare `k8s.node.name`.
|
|
185
|
+
*/
|
|
186
|
+
export function buildKubernetesRatioMonitorConfig(args) {
|
|
187
|
+
const aggregationType = args.aggregationType || MetricsAggregationType.Sum;
|
|
188
|
+
const buildQueryConfig = (alias, metricName) => {
|
|
189
|
+
return {
|
|
190
|
+
metricAliasData: {
|
|
191
|
+
metricVariable: alias,
|
|
192
|
+
title: alias,
|
|
193
|
+
description: alias,
|
|
194
|
+
legend: alias,
|
|
195
|
+
legendUnit: undefined,
|
|
196
|
+
},
|
|
197
|
+
metricQueryData: {
|
|
198
|
+
filterData: {
|
|
199
|
+
metricName: metricName,
|
|
200
|
+
attributes: {},
|
|
201
|
+
aggegationType: aggregationType,
|
|
202
|
+
aggregateBy: {},
|
|
203
|
+
},
|
|
204
|
+
groupByAttributeKeys: [args.groupByAttributeKey],
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
return {
|
|
209
|
+
clusterIdentifier: args.clusterIdentifier,
|
|
210
|
+
resourceScope: args.resourceScope,
|
|
211
|
+
resourceFilters: {},
|
|
212
|
+
metricViewConfig: {
|
|
213
|
+
queryConfigs: [
|
|
214
|
+
buildQueryConfig(args.numeratorAlias, args.numeratorMetricName),
|
|
215
|
+
buildQueryConfig(args.denominatorAlias, args.denominatorMetricName),
|
|
216
|
+
],
|
|
217
|
+
formulaConfigs: [
|
|
218
|
+
{
|
|
219
|
+
metricAliasData: {
|
|
220
|
+
metricVariable: args.resultAlias,
|
|
221
|
+
title: args.resultLegend,
|
|
222
|
+
description: args.resultLegend,
|
|
223
|
+
legend: args.resultLegend,
|
|
224
|
+
legendUnit: "%",
|
|
225
|
+
},
|
|
226
|
+
metricFormulaData: {
|
|
227
|
+
metricFormula: `(${args.numeratorAlias} / ${args.denominatorAlias}) * 100`,
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
rollingTime: args.rollingTime,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
149
235
|
// --- Template Definitions ---
|
|
150
236
|
const crashLoopBackOffTemplate = {
|
|
151
237
|
id: "k8s-crashloopbackoff",
|
|
@@ -268,18 +354,29 @@ const nodeNotReadyTemplate = {
|
|
|
268
354
|
const highCpuTemplate = {
|
|
269
355
|
id: "k8s-high-cpu",
|
|
270
356
|
name: "High Node CPU Utilization",
|
|
271
|
-
description: "Alert when node CPU
|
|
357
|
+
description: "Alert when a node's average CPU usage exceeds 90% of its allocatable CPU. Computed per node as k8s.node.cpu.usage ÷ k8s.node.allocatable_cpu × 100 — both are cores, so this is a true percentage (the raw k8s.node.cpu.utilization metric is a misnamed cores gauge, not a percent).",
|
|
272
358
|
category: "Node",
|
|
273
359
|
severity: "Warning",
|
|
274
360
|
getMonitorStep: (args) => {
|
|
275
|
-
const metricAlias = "
|
|
361
|
+
const metricAlias = "node_cpu_utilization";
|
|
276
362
|
return buildKubernetesMonitorStep({
|
|
277
|
-
kubernetesMonitor:
|
|
363
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
278
364
|
clusterIdentifier: args.clusterIdentifier,
|
|
279
|
-
|
|
280
|
-
|
|
365
|
+
numeratorMetricName: "k8s.node.cpu.usage",
|
|
366
|
+
denominatorMetricName: "k8s.node.allocatable_cpu",
|
|
367
|
+
groupByAttributeKey: "resource.k8s.node.name",
|
|
368
|
+
numeratorAlias: "used_cpu",
|
|
369
|
+
denominatorAlias: "alloc_cpu",
|
|
370
|
+
resultAlias: metricAlias,
|
|
371
|
+
resultLegend: "Node CPU Utilization (%)",
|
|
281
372
|
resourceScope: KubernetesResourceScope.Node,
|
|
282
373
|
rollingTime: RollingTime.Past5Minutes,
|
|
374
|
+
/*
|
|
375
|
+
* Single series per node from two DIFFERENT receivers (usage =
|
|
376
|
+
* kubeletstats, allocatable = k8s_cluster) — Avg keeps the per-minute
|
|
377
|
+
* ratio correct regardless of each receiver's scrape count. See
|
|
378
|
+
* buildKubernetesRatioMonitorConfig.
|
|
379
|
+
*/
|
|
283
380
|
aggregationType: MetricsAggregationType.Avg,
|
|
284
381
|
}),
|
|
285
382
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
@@ -291,9 +388,9 @@ const highCpuTemplate = {
|
|
|
291
388
|
filterType: FilterType.GreaterThan,
|
|
292
389
|
value: 90,
|
|
293
390
|
incidentTitle: `[K8s] High CPU Utilization (>90%) - ${args.monitorName}`,
|
|
294
|
-
incidentDescription: `
|
|
391
|
+
incidentDescription: `A node's average CPU usage has exceeded 90% of its allocatable CPU. Sustained high CPU usage can cause pod throttling, increased latency, and potential node instability. Check the root cause for the specific node and top CPU-consuming workloads.`,
|
|
295
392
|
criteriaName: "High CPU - Utilization > 90%",
|
|
296
|
-
criteriaDescription: "Triggers when
|
|
393
|
+
criteriaDescription: "Triggers when a node's average CPU usage exceeds 90% of its allocatable CPU over the monitoring window.",
|
|
297
394
|
}),
|
|
298
395
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
299
396
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -307,18 +404,29 @@ const highCpuTemplate = {
|
|
|
307
404
|
const highMemoryTemplate = {
|
|
308
405
|
id: "k8s-high-memory",
|
|
309
406
|
name: "High Node Memory Utilization",
|
|
310
|
-
description: "Alert when node memory
|
|
407
|
+
description: "Alert when a node's average memory usage exceeds 85% of its allocatable memory. Computed per node as k8s.node.memory.usage ÷ k8s.node.allocatable_memory × 100 — both are bytes, so this is a true percentage (the raw k8s.node.memory.usage metric is bytes, not a percent).",
|
|
311
408
|
category: "Node",
|
|
312
409
|
severity: "Warning",
|
|
313
410
|
getMonitorStep: (args) => {
|
|
314
|
-
const metricAlias = "
|
|
411
|
+
const metricAlias = "node_memory_utilization";
|
|
315
412
|
return buildKubernetesMonitorStep({
|
|
316
|
-
kubernetesMonitor:
|
|
413
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
317
414
|
clusterIdentifier: args.clusterIdentifier,
|
|
318
|
-
|
|
319
|
-
|
|
415
|
+
numeratorMetricName: "k8s.node.memory.usage",
|
|
416
|
+
denominatorMetricName: "k8s.node.allocatable_memory",
|
|
417
|
+
groupByAttributeKey: "resource.k8s.node.name",
|
|
418
|
+
numeratorAlias: "used_mem",
|
|
419
|
+
denominatorAlias: "alloc_mem",
|
|
420
|
+
resultAlias: metricAlias,
|
|
421
|
+
resultLegend: "Node Memory Utilization (%)",
|
|
320
422
|
resourceScope: KubernetesResourceScope.Node,
|
|
321
423
|
rollingTime: RollingTime.Past5Minutes,
|
|
424
|
+
/*
|
|
425
|
+
* Single series per node from two DIFFERENT receivers (usage =
|
|
426
|
+
* kubeletstats, allocatable = k8s_cluster) — Avg keeps the per-minute
|
|
427
|
+
* ratio correct regardless of each receiver's scrape count. See
|
|
428
|
+
* buildKubernetesRatioMonitorConfig.
|
|
429
|
+
*/
|
|
322
430
|
aggregationType: MetricsAggregationType.Avg,
|
|
323
431
|
}),
|
|
324
432
|
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
@@ -330,9 +438,9 @@ const highMemoryTemplate = {
|
|
|
330
438
|
filterType: FilterType.GreaterThan,
|
|
331
439
|
value: 85,
|
|
332
440
|
incidentTitle: `[K8s] High Memory Utilization (>85%) - ${args.monitorName}`,
|
|
333
|
-
incidentDescription: `
|
|
441
|
+
incidentDescription: `A node's average memory usage has exceeded 85% of its allocatable memory. High memory usage can lead to OOMKilled pods, node instability, and potential evictions. Check the root cause for the specific node and top memory-consuming workloads.`,
|
|
334
442
|
criteriaName: "High Memory - Utilization > 85%",
|
|
335
|
-
criteriaDescription: "Triggers when
|
|
443
|
+
criteriaDescription: "Triggers when a node's average memory usage exceeds 85% of its allocatable memory over the monitoring window.",
|
|
336
444
|
}),
|
|
337
445
|
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
338
446
|
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
@@ -616,6 +724,92 @@ const daemonSetUnavailableTemplate = {
|
|
|
616
724
|
});
|
|
617
725
|
},
|
|
618
726
|
};
|
|
727
|
+
const nodeCpuRequestUtilizationTemplate = {
|
|
728
|
+
id: "k8s-node-cpu-request-utilization",
|
|
729
|
+
name: "High Node CPU Request Commitment",
|
|
730
|
+
description: "Alert when a node's committed CPU requests exceed 90% of its allocatable CPU. Derived per node from summed container CPU requests over node allocatable CPU — both collected by default via the k8s_cluster receiver. A near-full node can't schedule new pods even if actual CPU usage is low.",
|
|
731
|
+
category: "Node",
|
|
732
|
+
severity: "Warning",
|
|
733
|
+
getMonitorStep: (args) => {
|
|
734
|
+
const metricAlias = "node_cpu_request_utilization";
|
|
735
|
+
return buildKubernetesMonitorStep({
|
|
736
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
737
|
+
clusterIdentifier: args.clusterIdentifier,
|
|
738
|
+
numeratorMetricName: "k8s.container.cpu_request",
|
|
739
|
+
denominatorMetricName: "k8s.node.allocatable_cpu",
|
|
740
|
+
groupByAttributeKey: "resource.k8s.node.name",
|
|
741
|
+
numeratorAlias: "req_cpu",
|
|
742
|
+
denominatorAlias: "alloc_cpu",
|
|
743
|
+
resultAlias: metricAlias,
|
|
744
|
+
resultLegend: "Node CPU Request Utilization (%)",
|
|
745
|
+
resourceScope: KubernetesResourceScope.Node,
|
|
746
|
+
rollingTime: RollingTime.Past5Minutes,
|
|
747
|
+
}),
|
|
748
|
+
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
749
|
+
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
750
|
+
incidentSeverityId: args.defaultIncidentSeverityId,
|
|
751
|
+
alertSeverityId: args.defaultAlertSeverityId,
|
|
752
|
+
monitorName: args.monitorName,
|
|
753
|
+
metricAlias,
|
|
754
|
+
filterType: FilterType.GreaterThan,
|
|
755
|
+
value: 90,
|
|
756
|
+
incidentTitle: `[K8s] High Node CPU Request Commitment (>90%) - ${args.monitorName}`,
|
|
757
|
+
incidentDescription: `A node's committed CPU requests have exceeded 90% of its allocatable CPU. The node is nearly full from a scheduling standpoint and may be unable to place new pods, even if current CPU usage is low. Check the root cause for the specific node and its top CPU-requesting workloads.`,
|
|
758
|
+
criteriaName: "High CPU Request Commitment - Utilization > 90%",
|
|
759
|
+
criteriaDescription: "Triggers when any node's summed container CPU requests exceed 90% of its allocatable CPU.",
|
|
760
|
+
}),
|
|
761
|
+
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
762
|
+
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
763
|
+
metricAlias,
|
|
764
|
+
filterType: FilterType.LessThanOrEqualTo,
|
|
765
|
+
value: 90,
|
|
766
|
+
}),
|
|
767
|
+
});
|
|
768
|
+
},
|
|
769
|
+
};
|
|
770
|
+
const nodeMemoryRequestUtilizationTemplate = {
|
|
771
|
+
id: "k8s-node-memory-request-utilization",
|
|
772
|
+
name: "High Node Memory Request Commitment",
|
|
773
|
+
description: "Alert when a node's committed memory requests exceed 90% of its allocatable memory. Derived per node from summed container memory requests over node allocatable memory — both collected by default via the k8s_cluster receiver. A near-full node can't schedule new pods even if actual memory usage is low.",
|
|
774
|
+
category: "Node",
|
|
775
|
+
severity: "Warning",
|
|
776
|
+
getMonitorStep: (args) => {
|
|
777
|
+
const metricAlias = "node_memory_request_utilization";
|
|
778
|
+
return buildKubernetesMonitorStep({
|
|
779
|
+
kubernetesMonitor: buildKubernetesRatioMonitorConfig({
|
|
780
|
+
clusterIdentifier: args.clusterIdentifier,
|
|
781
|
+
numeratorMetricName: "k8s.container.memory_request",
|
|
782
|
+
denominatorMetricName: "k8s.node.allocatable_memory",
|
|
783
|
+
groupByAttributeKey: "resource.k8s.node.name",
|
|
784
|
+
numeratorAlias: "req_mem",
|
|
785
|
+
denominatorAlias: "alloc_mem",
|
|
786
|
+
resultAlias: metricAlias,
|
|
787
|
+
resultLegend: "Node Memory Request Utilization (%)",
|
|
788
|
+
resourceScope: KubernetesResourceScope.Node,
|
|
789
|
+
rollingTime: RollingTime.Past5Minutes,
|
|
790
|
+
}),
|
|
791
|
+
offlineCriteriaInstance: buildOfflineCriteriaInstance({
|
|
792
|
+
offlineMonitorStatusId: args.offlineMonitorStatusId,
|
|
793
|
+
incidentSeverityId: args.defaultIncidentSeverityId,
|
|
794
|
+
alertSeverityId: args.defaultAlertSeverityId,
|
|
795
|
+
monitorName: args.monitorName,
|
|
796
|
+
metricAlias,
|
|
797
|
+
filterType: FilterType.GreaterThan,
|
|
798
|
+
value: 90,
|
|
799
|
+
incidentTitle: `[K8s] High Node Memory Request Commitment (>90%) - ${args.monitorName}`,
|
|
800
|
+
incidentDescription: `A node's committed memory requests have exceeded 90% of its allocatable memory. The node is nearly full from a scheduling standpoint and may be unable to place new pods, even if current memory usage is low. Check the root cause for the specific node and its top memory-requesting workloads.`,
|
|
801
|
+
criteriaName: "High Memory Request Commitment - Utilization > 90%",
|
|
802
|
+
criteriaDescription: "Triggers when any node's summed container memory requests exceed 90% of its allocatable memory.",
|
|
803
|
+
}),
|
|
804
|
+
onlineCriteriaInstance: buildOnlineCriteriaInstance({
|
|
805
|
+
onlineMonitorStatusId: args.onlineMonitorStatusId,
|
|
806
|
+
metricAlias,
|
|
807
|
+
filterType: FilterType.LessThanOrEqualTo,
|
|
808
|
+
value: 90,
|
|
809
|
+
}),
|
|
810
|
+
});
|
|
811
|
+
},
|
|
812
|
+
};
|
|
619
813
|
export function getAllKubernetesAlertTemplates() {
|
|
620
814
|
return [
|
|
621
815
|
crashLoopBackOffTemplate,
|
|
@@ -630,6 +824,8 @@ export function getAllKubernetesAlertTemplates() {
|
|
|
630
824
|
schedulerBacklogTemplate,
|
|
631
825
|
highDiskUsageTemplate,
|
|
632
826
|
daemonSetUnavailableTemplate,
|
|
827
|
+
nodeCpuRequestUtilizationTemplate,
|
|
828
|
+
nodeMemoryRequestUtilizationTemplate,
|
|
633
829
|
];
|
|
634
830
|
}
|
|
635
831
|
export function getKubernetesAlertTemplatesByCategory(category) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KubernetesAlertTemplates.js","sourceRoot":"","sources":["../../../../Types/Monitor/KubernetesAlertTemplates.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"KubernetesAlertTemplates.js","sourceRoot":"","sources":["../../../../Types/Monitor/KubernetesAlertTemplates.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAChE,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAqC,EACnC,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,sBAAsB,MAAM,mCAAmC,CAAC;AA6BvE,MAAM,UAAU,0BAA0B,CAAC,IAI1C;IACC,MAAM,WAAW,GAAgB,IAAI,WAAW,EAAE,CAAC;IAEnD,MAAM,eAAe,GAAoB,IAAI,eAAe,EAAE,CAAC;IAE/D,eAAe,CAAC,IAAI,GAAG;QACrB,4BAA4B,EAAE;YAC5B,IAAI,CAAC,uBAAuB;YAC5B,IAAI,CAAC,sBAAsB;SAC5B;KACF,CAAC;IAEF,WAAW,CAAC,IAAI,GAAG;QACjB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAClC,kBAAkB,EAAE,SAAS;QAC7B,oBAAoB,EAAE,SAAS;QAC/B,sBAAsB,EAAE,SAAS;QACjC,eAAe,EAAE,eAAe;QAChC,WAAW,EAAE,KAAY;QACzB,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,SAAS;QACrB,eAAe,EAAE,SAAS;QAC1B,YAAY,EAAE,SAAS;QACvB,iBAAiB,EAAE,SAAS;QAC5B,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,SAAS;QACvB,aAAa,EAAE,SAAS;QACxB,gBAAgB,EAAE,SAAS;QAC3B,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,SAAS;QACrB,aAAa,EAAE,SAAS;QACxB,yBAAyB,EAAE,SAAS;QACpC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAY5C;IACC,MAAM,QAAQ,GAA4B,IAAI,uBAAuB,EAAE,CAAC;IAExE,MAAM,aAAa,GACjB,IAAI,CAAC,aAAa,IAAI,GAAG,IAAI,CAAC,WAAW,oBAAoB,CAAC;IAChE,MAAM,mBAAmB,GACvB,IAAI,CAAC,mBAAmB;QACxB,GAAG,IAAI,CAAC,WAAW,iGAAiG,CAAC;IAEvH,QAAQ,CAAC,IAAI,GAAG;QACd,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAClC,eAAe,EAAE,IAAI,CAAC,sBAAsB;QAC5C,eAAe,EAAE,eAAe,CAAC,GAAG;QACpC,OAAO,EAAE;YACP;gBACE,OAAO,EAAE,OAAO,CAAC,WAAW;gBAC5B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,oBAAoB,EAAE;oBACpB,qBAAqB,EAAE,oBAAoB,CAAC,QAAQ;oBACpD,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;gBACD,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB;SACF;QACD,SAAS,EAAE;YACT;gBACE,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,mBAAmB;gBAChC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,mBAAmB,EAAE,IAAI;gBACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;gBAClC,eAAe,EAAE,EAAE;aACpB;SACF;QACD,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,mBAAmB;gBAChC,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,gBAAgB,EAAE,IAAI;gBACtB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;gBAClC,eAAe,EAAE,EAAE;aACpB;SACF;QACD,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,IAAI,EAAE,IAAI,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,WAAW,cAAc;QAC5D,WAAW,EACT,IAAI,CAAC,mBAAmB,IAAI,yCAAyC;KACxE,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAK3C;IACC,MAAM,QAAQ,GAA4B,IAAI,uBAAuB,EAAE,CAAC;IAExE,QAAQ,CAAC,IAAI,GAAG;QACd,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAClC,eAAe,EAAE,IAAI,CAAC,qBAAqB;QAC3C,eAAe,EAAE,eAAe,CAAC,GAAG;QACpC,OAAO,EAAE;YACP;gBACE,OAAO,EAAE,OAAO,CAAC,WAAW;gBAC5B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,oBAAoB,EAAE;oBACpB,qBAAqB,EAAE,oBAAoB,CAAC,QAAQ;oBACpD,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;gBACD,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB;SACF;QACD,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,EAAE;QACV,mBAAmB,EAAE,IAAI;QACzB,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,KAAK;QACnB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,6BAA6B;KAC3C,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAQ5C;IACC,OAAO;QACL,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,eAAe,EAAE,EAAE;QACnB,gBAAgB,EAAE;YAChB,YAAY,EAAE;gBACZ;oBACE,eAAe,EAAE;wBACf,cAAc,EAAE,IAAI,CAAC,WAAW;wBAChC,KAAK,EAAE,IAAI,CAAC,WAAW;wBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,MAAM,EAAE,IAAI,CAAC,WAAW;wBACxB,UAAU,EAAE,SAAS;qBACtB;oBACD,eAAe,EAAE;wBACf,UAAU,EAAE;4BACV,UAAU,EAAE,IAAI,CAAC,UAAU;4BAC3B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;4BACjC,cAAc,EAAE,IAAI,CAAC,eAAe;4BACpC,WAAW,EAAE,EAAE;yBAChB;qBACF;iBACF;aACF;YACD,cAAc,EAAE,EAAE;SACnB;QACD,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,iCAAiC,CAAC,IAYjD;IACC,MAAM,eAAe,GACnB,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC,GAAG,CAAC;IAErD,MAAM,gBAAgB,GAA+C,CACnE,KAAa,EACb,UAAkB,EACb,EAAE;QACP,OAAO;YACL,eAAe,EAAE;gBACf,cAAc,EAAE,KAAK;gBACrB,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,SAAS;aACtB;YACD,eAAe,EAAE;gBACf,UAAU,EAAE;oBACV,UAAU,EAAE,UAAU;oBACtB,UAAU,EAAE,EAAE;oBACd,cAAc,EAAE,eAAe;oBAC/B,WAAW,EAAE,EAAE;iBAChB;gBACD,oBAAoB,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC;aACjD;SACF,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;QACL,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,eAAe,EAAE,EAAE;QACnB,gBAAgB,EAAE;YAChB,YAAY,EAAE;gBACZ,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC;gBAC/D,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,CAAC;aACpE;YACD,cAAc,EAAE;gBACd;oBACE,eAAe,EAAE;wBACf,cAAc,EAAE,IAAI,CAAC,WAAW;wBAChC,KAAK,EAAE,IAAI,CAAC,YAAY;wBACxB,WAAW,EAAE,IAAI,CAAC,YAAY;wBAC9B,MAAM,EAAE,IAAI,CAAC,YAAY;wBACzB,UAAU,EAAE,GAAG;qBAChB;oBACD,iBAAiB,EAAE;wBACjB,aAAa,EAAE,IAAI,IAAI,CAAC,cAAc,MAAM,IAAI,CAAC,gBAAgB,SAAS;qBAC3E;iBACF;aACF;SACF;QACD,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC;AACJ,CAAC;AAED,+BAA+B;AAE/B,MAAM,wBAAwB,GAA4B;IACxD,EAAE,EAAE,sBAAsB;IAC1B,IAAI,EAAE,4BAA4B;IAClC,WAAW,EACT,gGAAgG;IAClG,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,oBAAoB,CAAC;QAEjD,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,wBAAwB;gBACpC,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,OAAO;gBAC9C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,qCAAqC,IAAI,CAAC,WAAW,EAAE;gBACtE,mBAAmB,EAAE,+OAA+O;gBACpQ,YAAY,EAAE,2CAA2C;gBACzD,mBAAmB,EACjB,wHAAwH;aAC3H,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,iBAAiB;gBACxC,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,kBAAkB,GAA4B;IAClD,EAAE,EAAE,iBAAiB;IACrB,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,oFAAoF;IACtF,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,cAAc,CAAC;QAE3C,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,eAAe;gBAC3B,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,OAAO;gBAC9C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;gBAC3C,UAAU,EAAE,EAAE,wBAAwB,EAAE,SAAS,EAAE;aACpD,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,iCAAiC,IAAI,CAAC,WAAW,EAAE;gBAClE,mBAAmB,EAAE,qRAAqR;gBAC1S,YAAY,EAAE,0BAA0B;gBACxC,mBAAmB,EACjB,sEAAsE;aACzE,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,OAAO;gBAC9B,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,oBAAoB,GAA4B;IACpD,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,qFAAqF;IACvF,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,YAAY,CAAC;QAEzC,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,0BAA0B;gBACtC,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,IAAI;gBAC3C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,OAAO;gBAC9B,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,0BAA0B,IAAI,CAAC,WAAW,EAAE;gBAC3D,mBAAmB,EAAE,wNAAwN;gBAC7O,YAAY,EAAE,+BAA+B;gBAC7C,mBAAmB,EACjB,gEAAgE;aACnE,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,eAAe,GAA4B;IAC/C,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,2BAA2B;IACjC,WAAW,EACT,uRAAuR;IACzR,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,sBAAsB,CAAC;QAEnD,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,iCAAiC,CAAC;gBACnD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,mBAAmB,EAAE,oBAAoB;gBACzC,qBAAqB,EAAE,0BAA0B;gBACjD,mBAAmB,EAAE,wBAAwB;gBAC7C,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,WAAW;gBAC7B,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,0BAA0B;gBACxC,aAAa,EAAE,uBAAuB,CAAC,IAAI;gBAC3C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC;;;;;mBAKG;gBACH,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,EAAE;gBACT,aAAa,EAAE,uCAAuC,IAAI,CAAC,WAAW,EAAE;gBACxE,mBAAmB,EAAE,uPAAuP;gBAC5Q,YAAY,EAAE,8BAA8B;gBAC5C,mBAAmB,EACjB,yGAAyG;aAC5G,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,iBAAiB;gBACxC,KAAK,EAAE,EAAE;aACV,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,kBAAkB,GAA4B;IAClD,EAAE,EAAE,iBAAiB;IACrB,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACT,+QAA+Q;IACjR,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,yBAAyB,CAAC;QAEtD,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,iCAAiC,CAAC;gBACnD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,mBAAmB,EAAE,uBAAuB;gBAC5C,qBAAqB,EAAE,6BAA6B;gBACpD,mBAAmB,EAAE,wBAAwB;gBAC7C,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,WAAW;gBAC7B,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,6BAA6B;gBAC3C,aAAa,EAAE,uBAAuB,CAAC,IAAI;gBAC3C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC;;;;;mBAKG;gBACH,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,EAAE;gBACT,aAAa,EAAE,0CAA0C,IAAI,CAAC,WAAW,EAAE;gBAC3E,mBAAmB,EAAE,mPAAmP;gBACxQ,YAAY,EAAE,iCAAiC;gBAC/C,mBAAmB,EACjB,+GAA+G;aAClH,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,iBAAiB;gBACxC,KAAK,EAAE,EAAE;aACV,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,iCAAiC,GAA4B;IACjE,EAAE,EAAE,iCAAiC;IACrC,IAAI,EAAE,6BAA6B;IACnC,WAAW,EACT,gFAAgF;IAClF,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,sBAAsB,CAAC;QAEnD,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,qCAAqC;gBACjD,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,QAAQ;gBAC/C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,uCAAuC,IAAI,CAAC,WAAW,EAAE;gBACxE,mBAAmB,EAAE,2RAA2R;gBAChT,YAAY,EAAE,oCAAoC;gBAClD,mBAAmB,EACjB,wDAAwD;aAC3D,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,OAAO;gBAC9B,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,mBAAmB,GAA4B;IACnD,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,kCAAkC;IAC/C,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,aAAa,CAAC;QAE1C,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,qBAAqB;gBACjC,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,QAAQ;gBAC/C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,gCAAgC,IAAI,CAAC,WAAW,EAAE;gBACjE,mBAAmB,EAAE,iNAAiN;gBACtO,YAAY,EAAE,gCAAgC;gBAC9C,mBAAmB,EACjB,mDAAmD;aACtD,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,OAAO;gBAC9B,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,oBAAoB,GAA4B;IACpD,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,6FAA6F;IAC/F,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,iBAAiB,CAAC;QAE9C,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,wBAAwB;gBACpC,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,OAAO;gBAC9C,WAAW,EAAE,WAAW,CAAC,WAAW;gBACpC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,OAAO;gBAC9B,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,oCAAoC,IAAI,CAAC,WAAW,EAAE;gBACrE,mBAAmB,EAAE,uOAAuO;gBAC5P,YAAY,EAAE,iCAAiC;gBAC/C,mBAAmB,EACjB,2DAA2D;aAC9D,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,2BAA2B,GAA4B;IAC3D,EAAE,EAAE,0BAA0B;IAC9B,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,8EAA8E;IAChF,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,kBAAkB,CAAC;QAE/C,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,kCAAkC;gBAC9C,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,OAAO;gBAC9C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,2CAA2C,IAAI,CAAC,WAAW,EAAE;gBAC5E,mBAAmB,EAAE,uLAAuL;gBAC5M,YAAY,EAAE,8CAA8C;gBAC5D,mBAAmB,EACjB,4DAA4D;aAC/D,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,OAAO;gBAC9B,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,wBAAwB,GAA4B;IACxD,EAAE,EAAE,uBAAuB;IAC3B,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,4EAA4E;IAC9E,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,cAAc,CAAC;QAE3C,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,wBAAwB;gBACpC,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,OAAO;gBAC9C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,6BAA6B,IAAI,CAAC,WAAW,EAAE;gBAC9D,mBAAmB,EAAE,uNAAuN;gBAC5O,YAAY,EAAE,sCAAsC;gBACpD,mBAAmB,EACjB,+EAA+E;aAClF,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,OAAO;gBAC9B,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,qBAAqB,GAA4B;IACrD,EAAE,EAAE,qBAAqB;IACzB,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,wDAAwD;IACrE,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,YAAY,CAAC;QAEzC,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,2BAA2B;gBACvC,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,IAAI;gBAC3C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,EAAE;gBACT,aAAa,EAAE,kCAAkC,IAAI,CAAC,WAAW,EAAE;gBACnE,mBAAmB,EAAE,mOAAmO;gBACxP,YAAY,EAAE,yBAAyB;gBACvC,mBAAmB,EACjB,mEAAmE;aACtE,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,iBAAiB;gBACxC,KAAK,EAAE,EAAE;aACV,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,4BAA4B,GAA4B;IAC5D,EAAE,EAAE,2BAA2B;IAC/B,IAAI,EAAE,6BAA6B;IACnC,WAAW,EACT,sFAAsF;IACxF,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,mBAAmB,CAAC;QAEhD,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,4BAA4B,CAAC;gBAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,UAAU,EAAE,kCAAkC;gBAC9C,WAAW;gBACX,aAAa,EAAE,uBAAuB,CAAC,QAAQ;gBAC/C,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,eAAe,EAAE,sBAAsB,CAAC,GAAG;aAC5C,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,uCAAuC,IAAI,CAAC,WAAW,EAAE;gBACxE,mBAAmB,EAAE,gNAAgN;gBACrO,YAAY,EAAE,0CAA0C;gBACxD,mBAAmB,EACjB,mFAAmF;aACtF,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,OAAO;gBAC9B,KAAK,EAAE,CAAC;aACT,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,iCAAiC,GAA4B;IACjE,EAAE,EAAE,kCAAkC;IACtC,IAAI,EAAE,kCAAkC;IACxC,WAAW,EACT,iSAAiS;IACnS,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,8BAA8B,CAAC;QAE3D,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,iCAAiC,CAAC;gBACnD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,mBAAmB,EAAE,2BAA2B;gBAChD,qBAAqB,EAAE,0BAA0B;gBACjD,mBAAmB,EAAE,wBAAwB;gBAC7C,cAAc,EAAE,SAAS;gBACzB,gBAAgB,EAAE,WAAW;gBAC7B,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,kCAAkC;gBAChD,aAAa,EAAE,uBAAuB,CAAC,IAAI;gBAC3C,WAAW,EAAE,WAAW,CAAC,YAAY;aACtC,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,EAAE;gBACT,aAAa,EAAE,mDAAmD,IAAI,CAAC,WAAW,EAAE;gBACpF,mBAAmB,EAAE,wRAAwR;gBAC7S,YAAY,EAAE,iDAAiD;gBAC/D,mBAAmB,EACjB,2FAA2F;aAC9F,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,iBAAiB;gBACxC,KAAK,EAAE,EAAE;aACV,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,oCAAoC,GAA4B;IACpE,EAAE,EAAE,qCAAqC;IACzC,IAAI,EAAE,qCAAqC;IAC3C,WAAW,EACT,gTAAgT;IAClT,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,SAAS;IACnB,cAAc,EAAE,CAAC,IAAiC,EAAe,EAAE;QACjE,MAAM,WAAW,GAAW,iCAAiC,CAAC;QAE9D,OAAO,0BAA0B,CAAC;YAChC,iBAAiB,EAAE,iCAAiC,CAAC;gBACnD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,mBAAmB,EAAE,8BAA8B;gBACnD,qBAAqB,EAAE,6BAA6B;gBACpD,mBAAmB,EAAE,wBAAwB;gBAC7C,cAAc,EAAE,SAAS;gBACzB,gBAAgB,EAAE,WAAW;gBAC7B,WAAW,EAAE,WAAW;gBACxB,YAAY,EAAE,qCAAqC;gBACnD,aAAa,EAAE,uBAAuB,CAAC,IAAI;gBAC3C,WAAW,EAAE,WAAW,CAAC,YAAY;aACtC,CAAC;YACF,uBAAuB,EAAE,4BAA4B,CAAC;gBACpD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;gBACnD,kBAAkB,EAAE,IAAI,CAAC,yBAAyB;gBAClD,eAAe,EAAE,IAAI,CAAC,sBAAsB;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,WAAW;gBAClC,KAAK,EAAE,EAAE;gBACT,aAAa,EAAE,sDAAsD,IAAI,CAAC,WAAW,EAAE;gBACvF,mBAAmB,EAAE,oSAAoS;gBACzT,YAAY,EAAE,oDAAoD;gBAClE,mBAAmB,EACjB,iGAAiG;aACpG,CAAC;YACF,sBAAsB,EAAE,2BAA2B,CAAC;gBAClD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;gBACjD,WAAW;gBACX,UAAU,EAAE,UAAU,CAAC,iBAAiB;gBACxC,KAAK,EAAE,EAAE;aACV,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,8BAA8B;IAC5C,OAAO;QACL,wBAAwB;QACxB,kBAAkB;QAClB,oBAAoB;QACpB,eAAe;QACf,kBAAkB;QAClB,iCAAiC;QACjC,mBAAmB;QACnB,oBAAoB;QACpB,2BAA2B;QAC3B,wBAAwB;QACxB,qBAAqB;QACrB,4BAA4B;QAC5B,iCAAiC;QACjC,oCAAoC;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,QAAyC;IAEzC,OAAO,8BAA8B,EAAE,CAAC,MAAM,CAC5C,CAAC,QAAiC,EAAE,EAAE;QACpC,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC;IACxC,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,EAAU;IAEV,OAAO,8BAA8B,EAAE,CAAC,IAAI,CAC1C,CAAC,QAAiC,EAAE,EAAE;QACpC,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC,CACF,CAAC;AACJ,CAAC"}
|