@oneuptime/common 10.0.35 → 10.0.37

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.
Files changed (113) hide show
  1. package/Models/DatabaseModels/Index.ts +2 -0
  2. package/Models/DatabaseModels/WorkspaceNotificationSummary.ts +819 -0
  3. package/Server/API/StatusPageAPI.ts +7 -0
  4. package/Server/API/WorkspaceNotificationSummaryAPI.ts +67 -0
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/{1773761409952-MigrationName.ts → 1774000000001-MigrationName.ts} +2 -2
  6. package/Server/Infrastructure/Postgres/SchemaMigrations/1774355321449-MigrationName.ts +51 -0
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/1774357353502-MigrationName.ts +29 -0
  8. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -2
  9. package/Server/Middleware/MasterAdminAuthorization.ts +55 -0
  10. package/Server/Services/Index.ts +2 -0
  11. package/Server/Services/WorkspaceNotificationSummaryService.ts +1450 -0
  12. package/Server/Types/Markdown.ts +11 -3
  13. package/Server/Utils/Greenlock/Greenlock.ts +1 -0
  14. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +4 -1
  15. package/Types/Code/CodeType.ts +1 -1
  16. package/Types/Metrics/MetricQueryConfigData.ts +1 -0
  17. package/Types/Monitor/CriteriaFilter.ts +19 -0
  18. package/Types/Monitor/KubernetesAlertTemplates.ts +703 -0
  19. package/Types/Monitor/KubernetesMetricCatalog.ts +347 -0
  20. package/Types/Monitor/MonitorCriteriaInstance.ts +86 -0
  21. package/Types/Monitor/MonitorStep.ts +36 -1
  22. package/Types/Monitor/MonitorStepKubernetesMonitor.ts +50 -0
  23. package/Types/Monitor/MonitorType.ts +14 -10
  24. package/Types/Permission.ts +42 -0
  25. package/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryItem.ts +13 -0
  26. package/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryType.ts +8 -0
  27. package/UI/Components/AlertBanner/AlertBanner.tsx +69 -0
  28. package/UI/Components/ConditionsTable/ConditionsTable.tsx +149 -0
  29. package/UI/Components/Dictionary/DictionaryOfStingsViewer.tsx +35 -15
  30. package/UI/Components/ExpandableText/ExpandableText.tsx +42 -0
  31. package/UI/Components/FilterButtons/FilterButtons.tsx +60 -0
  32. package/UI/Components/GanttChart/Bar/Index.tsx +23 -5
  33. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +4 -1
  34. package/UI/Components/ResourceUsageBar/ResourceUsageBar.tsx +58 -0
  35. package/UI/Components/StackedProgressBar/StackedProgressBar.tsx +81 -0
  36. package/UI/Components/StatusBadge/StatusBadge.tsx +44 -0
  37. package/UI/Components/Tabs/Tabs.tsx +36 -8
  38. package/UI/Utils/Dropdown.ts +2 -1
  39. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  40. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  41. package/build/dist/Models/DatabaseModels/WorkspaceNotificationSummary.js +857 -0
  42. package/build/dist/Models/DatabaseModels/WorkspaceNotificationSummary.js.map +1 -0
  43. package/build/dist/Server/API/StatusPageAPI.js +2 -0
  44. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  45. package/build/dist/Server/API/WorkspaceNotificationSummaryAPI.js +40 -0
  46. package/build/dist/Server/API/WorkspaceNotificationSummaryAPI.js.map +1 -0
  47. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/{1773761409952-MigrationName.js → 1774000000001-MigrationName.js} +3 -3
  48. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/{1773761409952-MigrationName.js.map → 1774000000001-MigrationName.js.map} +1 -1
  49. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774355321449-MigrationName.js +24 -0
  50. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774355321449-MigrationName.js.map +1 -0
  51. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774357353502-MigrationName.js +16 -0
  52. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1774357353502-MigrationName.js.map +1 -0
  53. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -2
  54. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  55. package/build/dist/Server/Middleware/MasterAdminAuthorization.js +25 -0
  56. package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -0
  57. package/build/dist/Server/Services/Index.js +2 -0
  58. package/build/dist/Server/Services/Index.js.map +1 -1
  59. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +1122 -0
  60. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -0
  61. package/build/dist/Server/Types/Markdown.js +10 -2
  62. package/build/dist/Server/Types/Markdown.js.map +1 -1
  63. package/build/dist/Server/Utils/Greenlock/Greenlock.js +1 -0
  64. package/build/dist/Server/Utils/Greenlock/Greenlock.js.map +1 -1
  65. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +2 -1
  66. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  67. package/build/dist/Types/Code/CodeType.js +1 -1
  68. package/build/dist/Types/Code/CodeType.js.map +1 -1
  69. package/build/dist/Types/Monitor/CriteriaFilter.js +18 -0
  70. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  71. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +594 -0
  72. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -0
  73. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +311 -0
  74. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -0
  75. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +78 -0
  76. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  77. package/build/dist/Types/Monitor/MonitorStep.js +24 -1
  78. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  79. package/build/dist/Types/Monitor/MonitorStepKubernetesMonitor.js +30 -0
  80. package/build/dist/Types/Monitor/MonitorStepKubernetesMonitor.js.map +1 -0
  81. package/build/dist/Types/Monitor/MonitorType.js +13 -10
  82. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  83. package/build/dist/Types/Permission.js +36 -0
  84. package/build/dist/Types/Permission.js.map +1 -1
  85. package/build/dist/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryItem.js +14 -0
  86. package/build/dist/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryItem.js.map +1 -0
  87. package/build/dist/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryType.js +9 -0
  88. package/build/dist/Types/Workspace/NotificationSummary/WorkspaceNotificationSummaryType.js.map +1 -0
  89. package/build/dist/UI/Components/AlertBanner/AlertBanner.js +42 -0
  90. package/build/dist/UI/Components/AlertBanner/AlertBanner.js.map +1 -0
  91. package/build/dist/UI/Components/ConditionsTable/ConditionsTable.js +83 -0
  92. package/build/dist/UI/Components/ConditionsTable/ConditionsTable.js.map +1 -0
  93. package/build/dist/UI/Components/Dictionary/DictionaryOfStingsViewer.js +14 -8
  94. package/build/dist/UI/Components/Dictionary/DictionaryOfStingsViewer.js.map +1 -1
  95. package/build/dist/UI/Components/ExpandableText/ExpandableText.js +19 -0
  96. package/build/dist/UI/Components/ExpandableText/ExpandableText.js.map +1 -0
  97. package/build/dist/UI/Components/FilterButtons/FilterButtons.js +17 -0
  98. package/build/dist/UI/Components/FilterButtons/FilterButtons.js.map +1 -0
  99. package/build/dist/UI/Components/GanttChart/Bar/Index.js +15 -3
  100. package/build/dist/UI/Components/GanttChart/Bar/Index.js.map +1 -1
  101. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +3 -1
  102. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  103. package/build/dist/UI/Components/ResourceUsageBar/ResourceUsageBar.js +23 -0
  104. package/build/dist/UI/Components/ResourceUsageBar/ResourceUsageBar.js.map +1 -0
  105. package/build/dist/UI/Components/StackedProgressBar/StackedProgressBar.js +34 -0
  106. package/build/dist/UI/Components/StackedProgressBar/StackedProgressBar.js.map +1 -0
  107. package/build/dist/UI/Components/StatusBadge/StatusBadge.js +22 -0
  108. package/build/dist/UI/Components/StatusBadge/StatusBadge.js.map +1 -0
  109. package/build/dist/UI/Components/Tabs/Tabs.js +32 -9
  110. package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
  111. package/build/dist/UI/Utils/Dropdown.js +2 -1
  112. package/build/dist/UI/Utils/Dropdown.js.map +1 -1
  113. package/package.json +1 -1
@@ -0,0 +1,347 @@
1
+ import { KubernetesResourceScope } from "./MonitorStepKubernetesMonitor";
2
+ import MetricsAggregationType from "../Metrics/MetricsAggregationType";
3
+
4
+ export type KubernetesMetricCategory =
5
+ | "Pod"
6
+ | "Node"
7
+ | "Container"
8
+ | "Workload"
9
+ | "HPA";
10
+
11
+ export interface KubernetesMetricDefinition {
12
+ id: string;
13
+ friendlyName: string;
14
+ description: string;
15
+ metricName: string;
16
+ category: KubernetesMetricCategory;
17
+ defaultAggregation: MetricsAggregationType;
18
+ defaultResourceScope: KubernetesResourceScope;
19
+ unit?: string;
20
+ }
21
+
22
+ const kubernetesMetricCatalog: Array<KubernetesMetricDefinition> = [
23
+ // Pod Metrics
24
+ {
25
+ id: "pod-cpu-utilization",
26
+ friendlyName: "Pod CPU Utilization",
27
+ description: "CPU usage percentage for pods",
28
+ metricName: "k8s.pod.cpu.utilization",
29
+ category: "Pod",
30
+ defaultAggregation: MetricsAggregationType.Avg,
31
+ defaultResourceScope: KubernetesResourceScope.Pod,
32
+ unit: "%",
33
+ },
34
+ {
35
+ id: "pod-memory-usage",
36
+ friendlyName: "Pod Memory Usage",
37
+ description: "Memory usage in bytes for pods",
38
+ metricName: "k8s.pod.memory.usage",
39
+ category: "Pod",
40
+ defaultAggregation: MetricsAggregationType.Avg,
41
+ defaultResourceScope: KubernetesResourceScope.Pod,
42
+ unit: "bytes",
43
+ },
44
+ {
45
+ id: "pod-phase",
46
+ friendlyName: "Pod Phase",
47
+ description:
48
+ "Current phase of the pod (Pending, Running, Succeeded, Failed, Unknown)",
49
+ metricName: "k8s.pod.phase",
50
+ category: "Pod",
51
+ defaultAggregation: MetricsAggregationType.Sum,
52
+ defaultResourceScope: KubernetesResourceScope.Cluster,
53
+ unit: "count",
54
+ },
55
+ {
56
+ id: "pod-filesystem-usage",
57
+ friendlyName: "Pod Filesystem Usage",
58
+ description: "Filesystem usage in bytes for pods",
59
+ metricName: "k8s.pod.filesystem.usage",
60
+ category: "Pod",
61
+ defaultAggregation: MetricsAggregationType.Avg,
62
+ defaultResourceScope: KubernetesResourceScope.Pod,
63
+ unit: "bytes",
64
+ },
65
+ {
66
+ id: "pod-network-io-receive",
67
+ friendlyName: "Pod Network Receive",
68
+ description: "Network bytes received by pods",
69
+ metricName: "k8s.pod.network.io",
70
+ category: "Pod",
71
+ defaultAggregation: MetricsAggregationType.Sum,
72
+ defaultResourceScope: KubernetesResourceScope.Pod,
73
+ unit: "bytes",
74
+ },
75
+
76
+ // Node Metrics
77
+ {
78
+ id: "node-cpu-utilization",
79
+ friendlyName: "Node CPU Utilization",
80
+ description: "CPU usage percentage for nodes",
81
+ metricName: "k8s.node.cpu.utilization",
82
+ category: "Node",
83
+ defaultAggregation: MetricsAggregationType.Avg,
84
+ defaultResourceScope: KubernetesResourceScope.Node,
85
+ unit: "%",
86
+ },
87
+ {
88
+ id: "node-memory-usage",
89
+ friendlyName: "Node Memory Usage",
90
+ description: "Memory usage in bytes for nodes",
91
+ metricName: "k8s.node.memory.usage",
92
+ category: "Node",
93
+ defaultAggregation: MetricsAggregationType.Avg,
94
+ defaultResourceScope: KubernetesResourceScope.Node,
95
+ unit: "bytes",
96
+ },
97
+ {
98
+ id: "node-filesystem-usage",
99
+ friendlyName: "Node Filesystem Usage",
100
+ description: "Filesystem usage in bytes for nodes",
101
+ metricName: "k8s.node.filesystem.usage",
102
+ category: "Node",
103
+ defaultAggregation: MetricsAggregationType.Avg,
104
+ defaultResourceScope: KubernetesResourceScope.Node,
105
+ unit: "bytes",
106
+ },
107
+ {
108
+ id: "node-condition-ready",
109
+ friendlyName: "Node Ready Condition",
110
+ description:
111
+ "Whether the node is in Ready condition (1 = ready, 0 = not ready)",
112
+ metricName: "k8s.node.condition_ready",
113
+ category: "Node",
114
+ defaultAggregation: MetricsAggregationType.Min,
115
+ defaultResourceScope: KubernetesResourceScope.Node,
116
+ unit: "count",
117
+ },
118
+ {
119
+ id: "node-disk-io",
120
+ friendlyName: "Node Disk I/O",
121
+ description: "Disk I/O operations on nodes",
122
+ metricName: "k8s.node.filesystem.available",
123
+ category: "Node",
124
+ defaultAggregation: MetricsAggregationType.Avg,
125
+ defaultResourceScope: KubernetesResourceScope.Node,
126
+ unit: "bytes",
127
+ },
128
+
129
+ // Container Metrics
130
+ {
131
+ id: "container-restarts",
132
+ friendlyName: "Container Restarts",
133
+ description: "Number of times a container has restarted",
134
+ metricName: "k8s.container.restarts",
135
+ category: "Container",
136
+ defaultAggregation: MetricsAggregationType.Max,
137
+ defaultResourceScope: KubernetesResourceScope.Cluster,
138
+ unit: "count",
139
+ },
140
+ {
141
+ id: "container-cpu-limit",
142
+ friendlyName: "Container CPU Limit",
143
+ description: "CPU limit set for containers",
144
+ metricName: "k8s.container.cpu_limit",
145
+ category: "Container",
146
+ defaultAggregation: MetricsAggregationType.Avg,
147
+ defaultResourceScope: KubernetesResourceScope.Pod,
148
+ unit: "cores",
149
+ },
150
+ {
151
+ id: "container-cpu-request",
152
+ friendlyName: "Container CPU Request",
153
+ description: "CPU request set for containers",
154
+ metricName: "k8s.container.cpu_request",
155
+ category: "Container",
156
+ defaultAggregation: MetricsAggregationType.Avg,
157
+ defaultResourceScope: KubernetesResourceScope.Pod,
158
+ unit: "cores",
159
+ },
160
+ {
161
+ id: "container-memory-limit",
162
+ friendlyName: "Container Memory Limit",
163
+ description: "Memory limit set for containers",
164
+ metricName: "k8s.container.memory_limit",
165
+ category: "Container",
166
+ defaultAggregation: MetricsAggregationType.Avg,
167
+ defaultResourceScope: KubernetesResourceScope.Pod,
168
+ unit: "bytes",
169
+ },
170
+ {
171
+ id: "container-memory-request",
172
+ friendlyName: "Container Memory Request",
173
+ description: "Memory request set for containers",
174
+ metricName: "k8s.container.memory_request",
175
+ category: "Container",
176
+ defaultAggregation: MetricsAggregationType.Avg,
177
+ defaultResourceScope: KubernetesResourceScope.Pod,
178
+ unit: "bytes",
179
+ },
180
+ {
181
+ id: "container-ready",
182
+ friendlyName: "Container Ready",
183
+ description: "Whether the container is in Ready state",
184
+ metricName: "k8s.container.ready",
185
+ category: "Container",
186
+ defaultAggregation: MetricsAggregationType.Min,
187
+ defaultResourceScope: KubernetesResourceScope.Pod,
188
+ unit: "count",
189
+ },
190
+
191
+ // Workload Metrics
192
+ {
193
+ id: "deployment-available-replicas",
194
+ friendlyName: "Deployment Available Replicas",
195
+ description: "Number of available replicas in a deployment",
196
+ metricName: "k8s.deployment.available_replicas",
197
+ category: "Workload",
198
+ defaultAggregation: MetricsAggregationType.Min,
199
+ defaultResourceScope: KubernetesResourceScope.Workload,
200
+ unit: "count",
201
+ },
202
+ {
203
+ id: "deployment-desired-replicas",
204
+ friendlyName: "Deployment Desired Replicas",
205
+ description: "Number of desired replicas in a deployment",
206
+ metricName: "k8s.deployment.desired_replicas",
207
+ category: "Workload",
208
+ defaultAggregation: MetricsAggregationType.Max,
209
+ defaultResourceScope: KubernetesResourceScope.Workload,
210
+ unit: "count",
211
+ },
212
+ {
213
+ id: "deployment-unavailable-replicas",
214
+ friendlyName: "Deployment Unavailable Replicas",
215
+ description: "Number of unavailable replicas in a deployment",
216
+ metricName: "k8s.deployment.unavailable_replicas",
217
+ category: "Workload",
218
+ defaultAggregation: MetricsAggregationType.Max,
219
+ defaultResourceScope: KubernetesResourceScope.Workload,
220
+ unit: "count",
221
+ },
222
+ {
223
+ id: "daemonset-misscheduled-nodes",
224
+ friendlyName: "DaemonSet Misscheduled Nodes",
225
+ description:
226
+ "Number of nodes running a daemon pod that should not be running one",
227
+ metricName: "k8s.daemonset.misscheduled_nodes",
228
+ category: "Workload",
229
+ defaultAggregation: MetricsAggregationType.Max,
230
+ defaultResourceScope: KubernetesResourceScope.Workload,
231
+ unit: "count",
232
+ },
233
+ {
234
+ id: "daemonset-ready-nodes",
235
+ friendlyName: "DaemonSet Ready Nodes",
236
+ description: "Number of nodes with a ready daemon pod",
237
+ metricName: "k8s.daemonset.ready_nodes",
238
+ category: "Workload",
239
+ defaultAggregation: MetricsAggregationType.Min,
240
+ defaultResourceScope: KubernetesResourceScope.Workload,
241
+ unit: "count",
242
+ },
243
+ {
244
+ id: "statefulset-ready-replicas",
245
+ friendlyName: "StatefulSet Ready Replicas",
246
+ description: "Number of ready replicas in a StatefulSet",
247
+ metricName: "k8s.statefulset.ready_replicas",
248
+ category: "Workload",
249
+ defaultAggregation: MetricsAggregationType.Min,
250
+ defaultResourceScope: KubernetesResourceScope.Workload,
251
+ unit: "count",
252
+ },
253
+ {
254
+ id: "job-failed-pods",
255
+ friendlyName: "Job Failed Pods",
256
+ description: "Number of failed pods in a Job",
257
+ metricName: "k8s.job.failed_pods",
258
+ category: "Workload",
259
+ defaultAggregation: MetricsAggregationType.Max,
260
+ defaultResourceScope: KubernetesResourceScope.Workload,
261
+ unit: "count",
262
+ },
263
+ {
264
+ id: "job-successful-pods",
265
+ friendlyName: "Job Successful Pods",
266
+ description: "Number of successful pods in a Job",
267
+ metricName: "k8s.job.successful_pods",
268
+ category: "Workload",
269
+ defaultAggregation: MetricsAggregationType.Max,
270
+ defaultResourceScope: KubernetesResourceScope.Workload,
271
+ unit: "count",
272
+ },
273
+
274
+ // HPA Metrics
275
+ {
276
+ id: "hpa-current-replicas",
277
+ friendlyName: "HPA Current Replicas",
278
+ description: "Current number of replicas managed by the HPA",
279
+ metricName: "k8s.hpa.current_replicas",
280
+ category: "HPA",
281
+ defaultAggregation: MetricsAggregationType.Avg,
282
+ defaultResourceScope: KubernetesResourceScope.Workload,
283
+ unit: "count",
284
+ },
285
+ {
286
+ id: "hpa-desired-replicas",
287
+ friendlyName: "HPA Desired Replicas",
288
+ description: "Desired number of replicas as determined by the HPA",
289
+ metricName: "k8s.hpa.desired_replicas",
290
+ category: "HPA",
291
+ defaultAggregation: MetricsAggregationType.Max,
292
+ defaultResourceScope: KubernetesResourceScope.Workload,
293
+ unit: "count",
294
+ },
295
+ {
296
+ id: "hpa-max-replicas",
297
+ friendlyName: "HPA Max Replicas",
298
+ description: "Maximum number of replicas the HPA can scale to",
299
+ metricName: "k8s.hpa.max_replicas",
300
+ category: "HPA",
301
+ defaultAggregation: MetricsAggregationType.Max,
302
+ defaultResourceScope: KubernetesResourceScope.Workload,
303
+ unit: "count",
304
+ },
305
+ {
306
+ id: "hpa-min-replicas",
307
+ friendlyName: "HPA Min Replicas",
308
+ description: "Minimum number of replicas the HPA maintains",
309
+ metricName: "k8s.hpa.min_replicas",
310
+ category: "HPA",
311
+ defaultAggregation: MetricsAggregationType.Min,
312
+ defaultResourceScope: KubernetesResourceScope.Workload,
313
+ unit: "count",
314
+ },
315
+ ];
316
+
317
+ export function getAllKubernetesMetrics(): Array<KubernetesMetricDefinition> {
318
+ return kubernetesMetricCatalog;
319
+ }
320
+
321
+ export function getKubernetesMetricsByCategory(
322
+ category: KubernetesMetricCategory,
323
+ ): Array<KubernetesMetricDefinition> {
324
+ return kubernetesMetricCatalog.filter((m: KubernetesMetricDefinition) => {
325
+ return m.category === category;
326
+ });
327
+ }
328
+
329
+ export function getKubernetesMetricById(
330
+ id: string,
331
+ ): KubernetesMetricDefinition | undefined {
332
+ return kubernetesMetricCatalog.find((m: KubernetesMetricDefinition) => {
333
+ return m.id === id;
334
+ });
335
+ }
336
+
337
+ export function getKubernetesMetricByMetricName(
338
+ metricName: string,
339
+ ): KubernetesMetricDefinition | undefined {
340
+ return kubernetesMetricCatalog.find((m: KubernetesMetricDefinition) => {
341
+ return m.metricName === metricName;
342
+ });
343
+ }
344
+
345
+ export function getAllKubernetesMetricCategories(): Array<KubernetesMetricCategory> {
346
+ return ["Pod", "Node", "Container", "Workload", "HPA"];
347
+ }
@@ -212,6 +212,43 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
212
212
  return monitorCriteriaInstance;
213
213
  }
214
214
 
215
+ if (arg.monitorType === MonitorType.Kubernetes) {
216
+ const monitorCriteriaInstance: MonitorCriteriaInstance =
217
+ new MonitorCriteriaInstance();
218
+
219
+ monitorCriteriaInstance.data = {
220
+ id: ObjectID.generate().toString(),
221
+ monitorStatusId: arg.monitorStatusId,
222
+ filterCondition: FilterCondition.Any,
223
+ filters: [
224
+ {
225
+ checkOn: CheckOn.MetricValue,
226
+ filterType: FilterType.GreaterThan,
227
+
228
+ metricMonitorOptions: {
229
+ metricAggregationType: EvaluateOverTimeType.AnyValue,
230
+ metricAlias:
231
+ arg.metricOptions &&
232
+ arg.metricOptions.metricAliases &&
233
+ arg.metricOptions.metricAliases.length > 0
234
+ ? arg.metricOptions.metricAliases[0]
235
+ : undefined,
236
+ },
237
+ value: 0,
238
+ },
239
+ ],
240
+ incidents: [],
241
+ alerts: [],
242
+ changeMonitorStatus: true,
243
+ createIncidents: false,
244
+ createAlerts: false,
245
+ name: `Check if ${arg.monitorName} is online`,
246
+ description: `This criteria checks if the ${arg.monitorName} is online`,
247
+ };
248
+
249
+ return monitorCriteriaInstance;
250
+ }
251
+
215
252
  if (arg.monitorType === MonitorType.Traces) {
216
253
  const monitorCriteriaInstance: MonitorCriteriaInstance =
217
254
  new MonitorCriteriaInstance();
@@ -873,6 +910,55 @@ export default class MonitorCriteriaInstance extends DatabaseProperty {
873
910
  };
874
911
  }
875
912
 
913
+ if (arg.monitorType === MonitorType.Kubernetes) {
914
+ monitorCriteriaInstance.data = {
915
+ id: ObjectID.generate().toString(),
916
+ monitorStatusId: arg.monitorStatusId,
917
+ filterCondition: FilterCondition.Any,
918
+ filters: [
919
+ {
920
+ checkOn: CheckOn.MetricValue,
921
+ filterType: FilterType.EqualTo,
922
+ metricMonitorOptions: {
923
+ metricAggregationType: EvaluateOverTimeType.AnyValue,
924
+ metricAlias:
925
+ arg.metricOptions &&
926
+ arg.metricOptions.metricAliases &&
927
+ arg.metricOptions.metricAliases.length > 0
928
+ ? arg.metricOptions.metricAliases[0]
929
+ : undefined,
930
+ },
931
+ value: 0,
932
+ },
933
+ ],
934
+ incidents: [
935
+ {
936
+ title: `${arg.monitorName} is offline`,
937
+ description: `${arg.monitorName} is currently offline.`,
938
+ incidentSeverityId: arg.incidentSeverityId,
939
+ autoResolveIncident: true,
940
+ id: ObjectID.generate().toString(),
941
+ onCallPolicyIds: [],
942
+ },
943
+ ],
944
+ alerts: [
945
+ {
946
+ title: `${arg.monitorName} is offline`,
947
+ description: `${arg.monitorName} is currently offline.`,
948
+ alertSeverityId: arg.alertSeverityId,
949
+ autoResolveAlert: true,
950
+ id: ObjectID.generate().toString(),
951
+ onCallPolicyIds: [],
952
+ },
953
+ ],
954
+ createAlerts: false,
955
+ changeMonitorStatus: true,
956
+ createIncidents: true,
957
+ name: `Check if ${arg.monitorName} is offline`,
958
+ description: `This criteria checks if the ${arg.monitorName} is offline`,
959
+ };
960
+ }
961
+
876
962
  if (arg.monitorType === MonitorType.Traces) {
877
963
  monitorCriteriaInstance.data = {
878
964
  id: ObjectID.generate().toString(),
@@ -38,6 +38,9 @@ import MonitorStepDomainMonitor, {
38
38
  import MonitorStepExternalStatusPageMonitor, {
39
39
  MonitorStepExternalStatusPageMonitorUtil,
40
40
  } from "./MonitorStepExternalStatusPageMonitor";
41
+ import MonitorStepKubernetesMonitor, {
42
+ MonitorStepKubernetesMonitorUtil,
43
+ } from "./MonitorStepKubernetesMonitor";
41
44
  import Zod, { ZodSchema } from "../../Utils/Schema/Zod";
42
45
 
43
46
  export interface MonitorStepType {
@@ -90,6 +93,9 @@ export interface MonitorStepType {
90
93
 
91
94
  // External Status Page monitor
92
95
  externalStatusPageMonitor?: MonitorStepExternalStatusPageMonitor | undefined;
96
+
97
+ // Kubernetes monitor
98
+ kubernetesMonitor?: MonitorStepKubernetesMonitor | undefined;
93
99
  }
94
100
 
95
101
  export default class MonitorStep extends DatabaseProperty {
@@ -119,6 +125,7 @@ export default class MonitorStep extends DatabaseProperty {
119
125
  dnsMonitor: undefined,
120
126
  domainMonitor: undefined,
121
127
  externalStatusPageMonitor: undefined,
128
+ kubernetesMonitor: undefined,
122
129
  };
123
130
  }
124
131
 
@@ -153,6 +160,7 @@ export default class MonitorStep extends DatabaseProperty {
153
160
  dnsMonitor: undefined,
154
161
  domainMonitor: undefined,
155
162
  externalStatusPageMonitor: undefined,
163
+ kubernetesMonitor: undefined,
156
164
  };
157
165
 
158
166
  return monitorStep;
@@ -267,6 +275,13 @@ export default class MonitorStep extends DatabaseProperty {
267
275
  return this;
268
276
  }
269
277
 
278
+ public setKubernetesMonitor(
279
+ kubernetesMonitor: MonitorStepKubernetesMonitor,
280
+ ): MonitorStep {
281
+ this.data!.kubernetesMonitor = kubernetesMonitor;
282
+ return this;
283
+ }
284
+
270
285
  public setCustomCode(customCode: string): MonitorStep {
271
286
  this.data!.customCode = customCode;
272
287
  return this;
@@ -293,8 +308,9 @@ export default class MonitorStep extends DatabaseProperty {
293
308
  screenSizeTypes: undefined,
294
309
  browserTypes: undefined,
295
310
  retryCountOnError: undefined,
296
- lgoMonitor: undefined,
311
+ logMonitor: undefined,
297
312
  exceptionMonitor: undefined,
313
+ kubernetesMonitor: undefined,
298
314
  },
299
315
  };
300
316
  }
@@ -405,6 +421,16 @@ export default class MonitorStep extends DatabaseProperty {
405
421
  }
406
422
  }
407
423
 
424
+ if (monitorType === MonitorType.Kubernetes) {
425
+ if (!value.data.kubernetesMonitor) {
426
+ return "Kubernetes monitor configuration is required";
427
+ }
428
+
429
+ if (!value.data.kubernetesMonitor.clusterIdentifier) {
430
+ return "Kubernetes cluster is required";
431
+ }
432
+ }
433
+
408
434
  return null;
409
435
  }
410
436
 
@@ -461,6 +487,11 @@ export default class MonitorStep extends DatabaseProperty {
461
487
  this.data.externalStatusPageMonitor,
462
488
  )
463
489
  : undefined,
490
+ kubernetesMonitor: this.data.kubernetesMonitor
491
+ ? MonitorStepKubernetesMonitorUtil.toJSON(
492
+ this.data.kubernetesMonitor,
493
+ )
494
+ : undefined,
464
495
  },
465
496
  });
466
497
  }
@@ -575,6 +606,9 @@ export default class MonitorStep extends DatabaseProperty {
575
606
  externalStatusPageMonitor: json["externalStatusPageMonitor"]
576
607
  ? (json["externalStatusPageMonitor"] as JSONObject)
577
608
  : undefined,
609
+ kubernetesMonitor: json["kubernetesMonitor"]
610
+ ? (json["kubernetesMonitor"] as JSONObject)
611
+ : undefined,
578
612
  }) as any;
579
613
 
580
614
  return monitorStep;
@@ -603,6 +637,7 @@ export default class MonitorStep extends DatabaseProperty {
603
637
  dnsMonitor: Zod.any().optional(),
604
638
  domainMonitor: Zod.any().optional(),
605
639
  externalStatusPageMonitor: Zod.any().optional(),
640
+ kubernetesMonitor: Zod.any().optional(),
606
641
  }).openapi({
607
642
  type: "object",
608
643
  example: {
@@ -0,0 +1,50 @@
1
+ import { JSONObject } from "../JSON";
2
+ import MetricsViewConfig from "../Metrics/MetricsViewConfig";
3
+ import RollingTime from "../RollingTime/RollingTime";
4
+
5
+ export enum KubernetesResourceScope {
6
+ Cluster = "Cluster",
7
+ Namespace = "Namespace",
8
+ Workload = "Workload",
9
+ Node = "Node",
10
+ Pod = "Pod",
11
+ }
12
+
13
+ export interface KubernetesResourceFilters {
14
+ namespace?: string | undefined;
15
+ workloadType?: string | undefined; // deployment, statefulset, daemonset, job, cronjob
16
+ workloadName?: string | undefined;
17
+ nodeName?: string | undefined;
18
+ podName?: string | undefined;
19
+ }
20
+
21
+ export default interface MonitorStepKubernetesMonitor {
22
+ clusterIdentifier: string;
23
+ resourceScope: KubernetesResourceScope;
24
+ resourceFilters: KubernetesResourceFilters;
25
+ metricViewConfig: MetricsViewConfig;
26
+ rollingTime: RollingTime;
27
+ }
28
+
29
+ export class MonitorStepKubernetesMonitorUtil {
30
+ public static getDefault(): MonitorStepKubernetesMonitor {
31
+ return {
32
+ clusterIdentifier: "",
33
+ resourceScope: KubernetesResourceScope.Cluster,
34
+ resourceFilters: {},
35
+ metricViewConfig: {
36
+ queryConfigs: [],
37
+ formulaConfigs: [],
38
+ },
39
+ rollingTime: RollingTime.Past1Minute,
40
+ };
41
+ }
42
+
43
+ public static fromJSON(json: JSONObject): MonitorStepKubernetesMonitor {
44
+ return json as any as MonitorStepKubernetesMonitor;
45
+ }
46
+
47
+ public static toJSON(monitor: MonitorStepKubernetesMonitor): JSONObject {
48
+ return monitor as any as JSONObject;
49
+ }
50
+ }
@@ -83,6 +83,10 @@ export class MonitorTypeHelper {
83
83
  label: "Infrastructure",
84
84
  monitorTypes: [MonitorType.Server, MonitorType.SNMP],
85
85
  },
86
+ {
87
+ label: "Kubernetes",
88
+ monitorTypes: [MonitorType.Kubernetes],
89
+ },
86
90
  {
87
91
  label: "Telemetry",
88
92
  monitorTypes: [
@@ -104,7 +108,8 @@ export class MonitorTypeHelper {
104
108
  monitorType === MonitorType.Logs ||
105
109
  monitorType === MonitorType.Metrics ||
106
110
  monitorType === MonitorType.Traces ||
107
- monitorType === MonitorType.Exceptions
111
+ monitorType === MonitorType.Exceptions ||
112
+ monitorType === MonitorType.Kubernetes
108
113
  );
109
114
  }
110
115
 
@@ -142,15 +147,13 @@ export class MonitorTypeHelper {
142
147
  "This monitor type does the basic ping test of an endpoint.",
143
148
  icon: IconProp.Signal,
144
149
  },
145
- /*
146
- * {
147
- * monitorType: MonitorType.Kubernetes,
148
- * title: 'Kubernetes',
149
- * description:
150
- * 'This monitor types lets you monitor Kubernetes clusters.',
151
- * icon: IconProp.Cube,
152
- * },
153
- */
150
+ {
151
+ monitorType: MonitorType.Kubernetes,
152
+ title: "Kubernetes",
153
+ description:
154
+ "This monitor type lets you monitor Kubernetes clusters, workloads, nodes, and pods.",
155
+ icon: IconProp.Cube,
156
+ },
154
157
  {
155
158
  monitorType: MonitorType.IP,
156
159
  title: "IP",
@@ -334,6 +337,7 @@ export class MonitorTypeHelper {
334
337
  MonitorType.DNS,
335
338
  MonitorType.Domain,
336
339
  MonitorType.ExternalStatusPage,
340
+ MonitorType.Kubernetes,
337
341
  ];
338
342
  }
339
343