@oneuptime/common 14.0.5 → 14.0.7

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 (192) hide show
  1. package/Models/DatabaseModels/InventoryItem.ts +23 -12
  2. package/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.ts +217 -0
  3. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  4. package/Server/Services/AlertService.ts +32 -36
  5. package/Server/Services/IncidentAlertService.ts +609 -2
  6. package/Server/Services/IncidentService.ts +134 -44
  7. package/Server/Services/InventoryItemService.ts +38 -0
  8. package/Server/Services/IoTDeviceCredentialService.ts +13 -4
  9. package/Server/Services/MetricService.ts +1 -1
  10. package/Server/Services/ScheduledMaintenanceService.ts +50 -46
  11. package/Server/Services/UserNotificationRuleService.ts +55 -53
  12. package/Server/Services/WorkspaceNotificationSummaryService.ts +38 -20
  13. package/Server/Types/Database/QueryHelper.ts +54 -1
  14. package/Server/Utils/AI/Toolbox/MetricTools.ts +13 -2
  15. package/Server/Utils/AI/Toolbox/ResourceTools.ts +12 -1
  16. package/Server/Utils/AffectedResources/LinkedAffectedResources.ts +576 -0
  17. package/Server/Utils/Alert/AlertStateChangeAuthorization.ts +129 -0
  18. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +1 -1
  19. package/Server/Utils/Inventory/InventoryOverviewAggregation.ts +111 -0
  20. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +33 -0
  21. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +4 -3
  22. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +3 -1
  23. package/Server/Utils/Response.ts +31 -0
  24. package/Server/Utils/Topology/TopologyConcurrencyLimiter.ts +229 -0
  25. package/Server/Utils/Topology/TopologyQueries.ts +1350 -0
  26. package/Server/Utils/Topology/TopologyRequest.ts +463 -0
  27. package/Server/Utils/Topology/TopologyResponseCache.ts +183 -0
  28. package/Server/Utils/Topology/TopologySql.ts +1024 -0
  29. package/Tests/App/Dashboard/AcknowledgeAlertsOnDeclare.test.ts +369 -0
  30. package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +1 -1
  31. package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +510 -123
  32. package/Tests/App/Dashboard/AlertsTableAffectedResources.test.tsx +490 -0
  33. package/Tests/App/Dashboard/ChangeAlertStateDeclareIncident.test.tsx +886 -0
  34. package/Tests/App/Dashboard/CreateReviewStepRoleSummary.test.tsx +1250 -0
  35. package/Tests/App/Dashboard/CreateReviewStepSelectionSummary.test.tsx +738 -0
  36. package/Tests/App/Dashboard/DeclareIncidentFromAlert.test.ts +417 -0
  37. package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +1948 -229
  38. package/Tests/App/Dashboard/EntityDetailPanelLifecycle.test.tsx +493 -0
  39. package/Tests/App/Dashboard/EntityDetailPanelNavigation.test.tsx +439 -0
  40. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +292 -1
  41. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +798 -2
  42. package/Tests/App/Dashboard/FetchStateAndSeverityElements.test.tsx +669 -0
  43. package/Tests/App/Dashboard/FetchUsers.test.tsx +230 -0
  44. package/Tests/App/Dashboard/IncidentCreateAcknowledgeAlerts.test.tsx +1611 -0
  45. package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +1365 -57
  46. package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +964 -23
  47. package/Tests/App/Dashboard/InventoryRelationships.test.tsx +885 -0
  48. package/Tests/App/Dashboard/NetworkTopologyExplorerSearch.test.tsx +1267 -0
  49. package/Tests/App/Dashboard/ResourceOverviewTileTooltips.test.tsx +4 -1
  50. package/Tests/App/Dashboard/RumOverviewPage.test.tsx +127 -0
  51. package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +201 -15
  52. package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +508 -36
  53. package/Tests/App/Dashboard/SiteSearchBox.test.tsx +2110 -0
  54. package/Tests/App/Dashboard/TelemetryMetricsSignals.test.ts +168 -8
  55. package/Tests/App/Dashboard/TopologyDataLifecycle.test.tsx +583 -0
  56. package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +982 -218
  57. package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +818 -114
  58. package/Tests/Server/Infrastructure/Postgres/RenameInventoryItemMigration.test.ts +90 -21
  59. package/Tests/Server/Services/DomainService.test.ts +525 -0
  60. package/Tests/Server/Services/IncidentAlertAcknowledgeOnDeclare.test.ts +2630 -0
  61. package/Tests/Server/Services/IncidentAlertPostgres.test.ts +1625 -1
  62. package/Tests/Server/Services/IncidentDeclareAcknowledgeAlerts.test.ts +2189 -0
  63. package/Tests/Server/Services/InventoryItemServiceOverviewCounts.test.ts +345 -0
  64. package/Tests/Server/Services/InventoryOverviewPostgres.test.ts +254 -0
  65. package/Tests/Server/Services/IoTDeviceCredentialService.test.ts +819 -0
  66. package/Tests/Server/Services/LinkedAffectedResourcesCreatedFeed.test.ts +420 -0
  67. package/Tests/Server/Services/MetricServiceAggregate.test.ts +12 -0
  68. package/Tests/Server/Services/SavedViewDefaults.test.ts +325 -0
  69. package/Tests/Server/Services/SloAffectedResourceCreatedFeed.test.ts +92 -36
  70. package/Tests/Server/Services/StatusPageCertificateService.test.ts +169 -0
  71. package/Tests/Server/Services/TeamComplianceSettingService.test.ts +191 -0
  72. package/Tests/Server/Types/Database/QueryHelperSearchAllWords.test.ts +651 -0
  73. package/Tests/Server/Utils/AI/AlertWriteTools.test.ts +256 -0
  74. package/Tests/Server/Utils/AI/IncidentWriteTools.test.ts +482 -0
  75. package/Tests/Server/Utils/AffectedResources/LinkedAffectedResources.test.ts +858 -0
  76. package/Tests/Server/Utils/Alert/AlertStateChangeAuthorization.test.ts +1172 -0
  77. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +54 -0
  78. package/Tests/Server/Utils/Monitor/MetricDecimalThreshold.test.ts +417 -0
  79. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorAffectedResourceEdgeCases.test.ts +96 -0
  80. package/Tests/Server/Utils/Topology/InventoryItemEntityKeyIndexMigration.test.ts +386 -0
  81. package/Tests/Server/Utils/Topology/InventoryItemEntityKeyIndexMigrationPostgres.test.ts +430 -0
  82. package/Tests/Server/Utils/Topology/TopologyActivityParityPostgres.test.ts +279 -0
  83. package/Tests/Server/Utils/Topology/TopologyConcurrencyLimiter.test.ts +534 -0
  84. package/Tests/Server/Utils/Topology/TopologyEstateGenerator.ts +624 -0
  85. package/Tests/Server/Utils/Topology/TopologyJsonResponse.test.ts +90 -0
  86. package/Tests/Server/Utils/Topology/TopologyQueries.test.ts +1634 -0
  87. package/Tests/Server/Utils/Topology/TopologyQueriesDifferentialPostgres.test.ts +683 -0
  88. package/Tests/Server/Utils/Topology/TopologyQueriesPostgres.test.ts +2624 -0
  89. package/Tests/Server/Utils/Topology/TopologyReference.ts +1018 -0
  90. package/Tests/Server/Utils/Topology/TopologyRequest.test.ts +643 -0
  91. package/Tests/Server/Utils/Topology/TopologyResponseCache.test.ts +305 -0
  92. package/Tests/Server/Utils/Topology/TopologySql.test.ts +973 -0
  93. package/Tests/Types/BaseDatabase/AggregationType.test.ts +5 -1
  94. package/Tests/Types/Dashboard/KubernetesDashboardTemplate.test.ts +184 -0
  95. package/Tests/Types/Dashboard/KubernetesDashboardTemplates.test.ts +107 -0
  96. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +8 -14
  97. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +4 -3
  98. package/Tests/Types/Monitor/Utils/KubernetesAgentEmittedMetrics.ts +27 -6
  99. package/Tests/Types/Topology/TopologyTypeRules.test.ts +176 -0
  100. package/Tests/UI/Rum/ChunkLoader.test.ts +76 -0
  101. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +53 -0
  102. package/Tests/UI/Rum/ReplaySignals.test.ts +54 -0
  103. package/Tests/Utils/Dashboard/KubernetesClusterCpuTileRepair.test.ts +370 -0
  104. package/Tests/Utils/Incident/IncidentFromAlerts.test.ts +302 -0
  105. package/Tests/Utils/Rules/MonitorTypeRuleCriteria.test.ts +181 -0
  106. package/Types/BaseDatabase/AggregationType.ts +7 -0
  107. package/Types/Dashboard/DashboardTemplates.ts +20 -7
  108. package/Types/Incident/IncidentAlertLink.ts +19 -0
  109. package/Types/Rum/SessionReplayCustomEvents.ts +29 -3
  110. package/Types/Rum/WebVitals.ts +13 -0
  111. package/Types/Telemetry/InventoryLiveness.ts +26 -0
  112. package/Types/Topology/TopologyApi.ts +428 -0
  113. package/Types/Topology/TopologyTypeRules.ts +191 -0
  114. package/UI/Components/Input/Input.tsx +11 -0
  115. package/Utils/Dashboard/KubernetesClusterCpuTileRepair.ts +147 -0
  116. package/Utils/Incident/IncidentFromAlerts.ts +78 -0
  117. package/build/dist/Models/DatabaseModels/InventoryItem.js +20 -11
  118. package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -1
  119. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.js +165 -0
  120. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.js.map +1 -0
  121. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  122. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  123. package/build/dist/Server/Services/AlertService.js +21 -33
  124. package/build/dist/Server/Services/AlertService.js.map +1 -1
  125. package/build/dist/Server/Services/IncidentAlertService.js +457 -3
  126. package/build/dist/Server/Services/IncidentAlertService.js.map +1 -1
  127. package/build/dist/Server/Services/IncidentService.js +96 -42
  128. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  129. package/build/dist/Server/Services/InventoryItemService.js +31 -0
  130. package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
  131. package/build/dist/Server/Services/IoTDeviceCredentialService.js +12 -5
  132. package/build/dist/Server/Services/IoTDeviceCredentialService.js.map +1 -1
  133. package/build/dist/Server/Services/MetricService.js +1 -1
  134. package/build/dist/Server/Services/ScheduledMaintenanceService.js +37 -40
  135. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  136. package/build/dist/Server/Services/UserNotificationRuleService.js +55 -51
  137. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  138. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +42 -25
  139. package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
  140. package/build/dist/Server/Types/Database/QueryHelper.js +47 -1
  141. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  142. package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js +13 -2
  143. package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js.map +1 -1
  144. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +12 -1
  145. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
  146. package/build/dist/Server/Utils/AffectedResources/LinkedAffectedResources.js +405 -0
  147. package/build/dist/Server/Utils/AffectedResources/LinkedAffectedResources.js.map +1 -0
  148. package/build/dist/Server/Utils/Alert/AlertStateChangeAuthorization.js +112 -0
  149. package/build/dist/Server/Utils/Alert/AlertStateChangeAuthorization.js.map +1 -0
  150. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +1 -1
  151. package/build/dist/Server/Utils/Inventory/InventoryOverviewAggregation.js +81 -0
  152. package/build/dist/Server/Utils/Inventory/InventoryOverviewAggregation.js.map +1 -0
  153. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +31 -0
  154. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  155. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +1 -1
  156. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  157. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +1 -1
  158. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  159. package/build/dist/Server/Utils/Response.js +30 -0
  160. package/build/dist/Server/Utils/Response.js.map +1 -1
  161. package/build/dist/Server/Utils/Topology/TopologyConcurrencyLimiter.js +178 -0
  162. package/build/dist/Server/Utils/Topology/TopologyConcurrencyLimiter.js.map +1 -0
  163. package/build/dist/Server/Utils/Topology/TopologyQueries.js +884 -0
  164. package/build/dist/Server/Utils/Topology/TopologyQueries.js.map +1 -0
  165. package/build/dist/Server/Utils/Topology/TopologyRequest.js +275 -0
  166. package/build/dist/Server/Utils/Topology/TopologyRequest.js.map +1 -0
  167. package/build/dist/Server/Utils/Topology/TopologyResponseCache.js +146 -0
  168. package/build/dist/Server/Utils/Topology/TopologyResponseCache.js.map +1 -0
  169. package/build/dist/Server/Utils/Topology/TopologySql.js +688 -0
  170. package/build/dist/Server/Utils/Topology/TopologySql.js.map +1 -0
  171. package/build/dist/Types/BaseDatabase/AggregationType.js +7 -0
  172. package/build/dist/Types/BaseDatabase/AggregationType.js.map +1 -1
  173. package/build/dist/Types/Dashboard/DashboardTemplates.js +20 -7
  174. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  175. package/build/dist/Types/Incident/IncidentAlertLink.js +17 -0
  176. package/build/dist/Types/Incident/IncidentAlertLink.js.map +1 -1
  177. package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -1
  178. package/build/dist/Types/Rum/WebVitals.js +12 -0
  179. package/build/dist/Types/Rum/WebVitals.js.map +1 -1
  180. package/build/dist/Types/Telemetry/InventoryLiveness.js +23 -0
  181. package/build/dist/Types/Telemetry/InventoryLiveness.js.map +1 -1
  182. package/build/dist/Types/Topology/TopologyApi.js +55 -0
  183. package/build/dist/Types/Topology/TopologyApi.js.map +1 -0
  184. package/build/dist/Types/Topology/TopologyTypeRules.js +165 -0
  185. package/build/dist/Types/Topology/TopologyTypeRules.js.map +1 -0
  186. package/build/dist/UI/Components/Input/Input.js +1 -1
  187. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  188. package/build/dist/Utils/Dashboard/KubernetesClusterCpuTileRepair.js +110 -0
  189. package/build/dist/Utils/Dashboard/KubernetesClusterCpuTileRepair.js.map +1 -0
  190. package/build/dist/Utils/Incident/IncidentFromAlerts.js +38 -0
  191. package/build/dist/Utils/Incident/IncidentFromAlerts.js.map +1 -1
  192. package/package.json +1 -1
@@ -0,0 +1,147 @@
1
+ import DashboardComponentType from "../../Types/Dashboard/DashboardComponentType";
2
+ import { JSONObject } from "../../Types/JSON";
3
+ import MetricsAggregationType from "../../Types/Metrics/MetricsAggregationType";
4
+
5
+ /*
6
+ * Repairs the "Cluster CPU (cores in use)" tile on Kubernetes dashboards
7
+ * created before the template stopped summing a gauge.
8
+ *
9
+ * The tile was a Value widget over k8s.node.cpu.usage with `Sum`. The server
10
+ * sums every node's reading in each time bucket, then the Value widget sums
11
+ * the buckets, so the number scales with the scrape count and the window
12
+ * length: three nodes on 1.5 cores each read ~540 over the default hour
13
+ * instead of 4.5. The template now ships the busiest node's peak (`Max`);
14
+ * templates are COPIED into a dashboard when it is created, so dashboards
15
+ * that already exist keep the old tile until this rewrites them.
16
+ *
17
+ * Only the template's exact signature is touched: a Value widget with the
18
+ * template's title, metric and `Sum`. A tile the user renamed or re-aggregated
19
+ * is theirs and stays as they left it. Everything else on the tile — its
20
+ * position, thresholds, trend direction, any filters the user added — is kept.
21
+ *
22
+ * React-free and import-light so plain node tests load it.
23
+ */
24
+
25
+ export const KUBERNETES_NODE_CPU_USAGE_METRIC: string = "k8s.node.cpu.usage";
26
+
27
+ export const LEGACY_CLUSTER_CPU_TILE_TITLE: string =
28
+ "Cluster CPU (cores in use)";
29
+
30
+ export const BUSIEST_NODE_CPU_TILE_TITLE: string =
31
+ "Busiest Node CPU (cores, peak)";
32
+
33
+ export interface KubernetesClusterCpuTileRepairResult {
34
+ config: JSONObject;
35
+ repairedTileCount: number;
36
+ }
37
+
38
+ function asObject(value: unknown): JSONObject | undefined {
39
+ if (value && typeof value === "object" && !Array.isArray(value)) {
40
+ return value as JSONObject;
41
+ }
42
+
43
+ return undefined;
44
+ }
45
+
46
+ // The tile's filterData, where the fetch layer reads metric and aggregation.
47
+ function getFilterData(component: JSONObject): JSONObject | undefined {
48
+ const args: JSONObject | undefined = asObject(component["arguments"]);
49
+ const metricQueryConfig: JSONObject | undefined = asObject(
50
+ args?.["metricQueryConfig"],
51
+ );
52
+ const metricQueryData: JSONObject | undefined = asObject(
53
+ metricQueryConfig?.["metricQueryData"],
54
+ );
55
+
56
+ return asObject(metricQueryData?.["filterData"]);
57
+ }
58
+
59
+ export default class KubernetesClusterCpuTileRepair {
60
+ /*
61
+ * The legacy tile's signature as a Postgres jsonb containment (`@>`)
62
+ * document. Containment against an array matches an element that holds
63
+ * ALL of these keys, so a dashboard only matches when one component
64
+ * carries the title, metric and aggregation together. The
65
+ * misspelled `aggegationType` is the key the fetch layer reads.
66
+ */
67
+ public static getLegacyTileContainment(): JSONObject {
68
+ return {
69
+ components: [
70
+ {
71
+ componentType: DashboardComponentType.Value,
72
+ arguments: {
73
+ title: LEGACY_CLUSTER_CPU_TILE_TITLE,
74
+ metricQueryConfig: {
75
+ metricQueryData: {
76
+ filterData: {
77
+ metricName: KUBERNETES_NODE_CPU_USAGE_METRIC,
78
+ aggegationType: MetricsAggregationType.Sum,
79
+ },
80
+ },
81
+ },
82
+ },
83
+ },
84
+ ],
85
+ };
86
+ }
87
+
88
+ // The same signature as getLegacyTileContainment, for one component.
89
+ public static isLegacyTile(component: unknown): boolean {
90
+ const componentObject: JSONObject | undefined = asObject(component);
91
+
92
+ if (
93
+ !componentObject ||
94
+ componentObject["componentType"] !== DashboardComponentType.Value
95
+ ) {
96
+ return false;
97
+ }
98
+
99
+ const args: JSONObject | undefined = asObject(componentObject["arguments"]);
100
+ const filterData: JSONObject | undefined = getFilterData(componentObject);
101
+
102
+ return (
103
+ args?.["title"] === LEGACY_CLUSTER_CPU_TILE_TITLE &&
104
+ filterData?.["metricName"] === KUBERNETES_NODE_CPU_USAGE_METRIC &&
105
+ filterData?.["aggegationType"] === MetricsAggregationType.Sum
106
+ );
107
+ }
108
+
109
+ /*
110
+ * Returns a repaired COPY of a stored dashboardViewConfig, or null when it
111
+ * holds no legacy tile — so a caller writes only when something changed,
112
+ * and a second run is a no-op. The input is never mutated.
113
+ */
114
+ public static repair(
115
+ dashboardViewConfig: unknown,
116
+ ): KubernetesClusterCpuTileRepairResult | null {
117
+ const configObject: JSONObject | undefined = asObject(dashboardViewConfig);
118
+ const components: unknown = configObject?.["components"];
119
+
120
+ if (!configObject || !Array.isArray(components)) {
121
+ return null;
122
+ }
123
+
124
+ if (!components.some(KubernetesClusterCpuTileRepair.isLegacyTile)) {
125
+ return null;
126
+ }
127
+
128
+ // A stored config is plain jsonb, so a JSON round trip is a full copy.
129
+ const config: JSONObject = JSON.parse(JSON.stringify(configObject));
130
+ let repairedTileCount: number = 0;
131
+
132
+ for (const component of config["components"] as Array<unknown>) {
133
+ if (!KubernetesClusterCpuTileRepair.isLegacyTile(component)) {
134
+ continue;
135
+ }
136
+
137
+ const componentObject: JSONObject = component as JSONObject;
138
+ (componentObject["arguments"] as JSONObject)["title"] =
139
+ BUSIEST_NODE_CPU_TILE_TITLE;
140
+ getFilterData(componentObject)!["aggegationType"] =
141
+ MetricsAggregationType.Max;
142
+ repairedTileCount++;
143
+ }
144
+
145
+ return { config, repairedTileCount };
146
+ }
147
+ }
@@ -69,6 +69,29 @@ export interface BuildIncidentPrefillInput {
69
69
  incidentSeverities: Array<SeverityForMapping>;
70
70
  }
71
71
 
72
+ /*
73
+ * What the create page needs to offer acknowledging the alerts as the
74
+ * incident is declared: each alert's current state, and the project's alert
75
+ * states (to find Acknowledged and compare by order).
76
+ */
77
+ export interface AlertForAcknowledgement {
78
+ id: string;
79
+ currentAlertStateId?: string | undefined;
80
+ }
81
+
82
+ export interface AlertStateForAcknowledgement {
83
+ id: string;
84
+ order?: number | undefined;
85
+ isAcknowledgedState?: boolean | undefined;
86
+ }
87
+
88
+ export interface AlertsToAcknowledge {
89
+ // Alerts not acknowledged yet, in the order given.
90
+ alertIds: Array<string>;
91
+ // Alerts already acknowledged, resolved or in a later state.
92
+ alreadyAcknowledgedCount: number;
93
+ }
94
+
72
95
  export interface ParsedAlertIds {
73
96
  alertIds: Array<string>;
74
97
  /* More ids were asked for than one declaration may link. */
@@ -291,6 +314,61 @@ export default class IncidentFromAlerts {
291
314
  return target ? target.id : null;
292
315
  }
293
316
 
317
+ /*
318
+ * Which of the alerts acknowledging would change. States are compared by
319
+ * order, like the server does: an alert in a custom state after
320
+ * Acknowledged, or resolved, has been acknowledged already. An alert whose
321
+ * state is not among the given states is counted as not acknowledged - the
322
+ * server skips it if it turns out to be. Null when the project has no
323
+ * Acknowledged state with an order (nothing could be acknowledged), so the
324
+ * page does not offer it at all.
325
+ */
326
+ public static getAlertsToAcknowledge(data: {
327
+ alerts: Array<AlertForAcknowledgement>;
328
+ alertStates: Array<AlertStateForAcknowledgement>;
329
+ }): AlertsToAcknowledge | null {
330
+ const acknowledgedState: AlertStateForAcknowledgement | undefined =
331
+ data.alertStates.find((state: AlertStateForAcknowledgement) => {
332
+ return state.isAcknowledgedState === true;
333
+ });
334
+
335
+ if (!acknowledgedState || typeof acknowledgedState.order !== "number") {
336
+ return null;
337
+ }
338
+
339
+ const acknowledgedOrder: number = acknowledgedState.order;
340
+
341
+ const result: AlertsToAcknowledge = {
342
+ alertIds: [],
343
+ alreadyAcknowledgedCount: 0,
344
+ };
345
+
346
+ for (const alert of data.alerts) {
347
+ const currentState: AlertStateForAcknowledgement | undefined =
348
+ alert.currentAlertStateId
349
+ ? data.alertStates.find((state: AlertStateForAcknowledgement) => {
350
+ return (
351
+ state.id.trim().toLowerCase() ===
352
+ alert.currentAlertStateId!.trim().toLowerCase()
353
+ );
354
+ })
355
+ : undefined;
356
+
357
+ if (
358
+ currentState &&
359
+ typeof currentState.order === "number" &&
360
+ currentState.order >= acknowledgedOrder
361
+ ) {
362
+ result.alreadyAcknowledgedCount++;
363
+ continue;
364
+ }
365
+
366
+ result.alertIds.push(alert.id);
367
+ }
368
+
369
+ return result;
370
+ }
371
+
294
372
  /* "Alert #42" / "Alert ALT-42", or "Alert" when the number is unknown. */
295
373
  public static getAlertReference(alert: AlertForIncidentPrefill): string {
296
374
  if (alert.alertNumberWithPrefix) {
@@ -21,12 +21,13 @@ import TableColumn from "../../Types/Database/TableColumn";
21
21
  import TableColumnType from "../../Types/Database/TableColumnType";
22
22
  import TableMetadata from "../../Types/Database/TableMetadata";
23
23
  import TenantColumn from "../../Types/Database/TenantColumn";
24
+ import UNSYNCHRONIZED_INDEX from "../../Types/Database/UnsynchronizedIndex";
24
25
  import IconProp from "../../Types/Icon/IconProp";
25
26
  import ObjectID from "../../Types/ObjectID";
26
27
  import Permission from "../../Types/Permission";
27
28
  import EntitySource from "../../Types/Telemetry/EntitySource";
28
29
  import EntityType from "../../Types/Telemetry/EntityType";
29
- import { InventoryLiveness, INVENTORY_LIVE_WINDOW_MINUTES, INVENTORY_STALE_AFTER_MINUTES, } from "../../Types/Telemetry/InventoryLiveness";
30
+ import { InventoryLiveness, getInventoryLivenessSql, } from "../../Types/Telemetry/InventoryLiveness";
30
31
  import { Column, Entity, Index, JoinColumn, ManyToOne, VirtualColumn, } from "typeorm";
31
32
  import DatabaseBaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
32
33
  /*
@@ -99,9 +100,8 @@ let InventoryItem = class InventoryItem extends DatabaseBaseModel {
99
100
  * status without persisting a value that becomes stale as time passes.
100
101
  * A virtual column needs no schema migration and is never written.
101
102
  *
102
- * The badge floors elapsed minutes before applying inclusive thresholds:
103
- * 30m59s is still Live, and 24h00m59s is still Recent. Strict comparisons
104
- * against the following minute preserve those exact boundaries.
103
+ * The SQL is shared with the Inventory Overview's "Gone Quiet" count — see
104
+ * getInventoryLivenessSql for the boundary rules.
105
105
  */
106
106
  this.inventoryStatus = undefined;
107
107
  /*
@@ -401,13 +401,7 @@ __decorate([
401
401
  VirtualColumn({
402
402
  type: ColumnType.ShortText,
403
403
  query: (alias) => {
404
- return `CASE
405
- WHEN ${alias}."source" IS DISTINCT FROM '${EntitySource.Discovered}' THEN '${InventoryLiveness.NotTracked}'
406
- WHEN ${alias}."lastSeenAt" IS NULL THEN '${InventoryLiveness.Never}'
407
- WHEN ${alias}."lastSeenAt" > CURRENT_TIMESTAMP - INTERVAL '${INVENTORY_LIVE_WINDOW_MINUTES + 1} minutes' THEN '${InventoryLiveness.Live}'
408
- WHEN ${alias}."lastSeenAt" > CURRENT_TIMESTAMP - INTERVAL '${INVENTORY_STALE_AFTER_MINUTES + 1} minutes' THEN '${InventoryLiveness.Recent}'
409
- ELSE '${InventoryLiveness.Stale}'
410
- END`;
404
+ return getInventoryLivenessSql(alias);
411
405
  },
412
406
  }),
413
407
  __metadata("design:type", String)
@@ -630,6 +624,21 @@ InventoryItem = __decorate([
630
624
  */
631
625
  ,
632
626
  Index(["projectId", "isArchived"])
627
+ /*
628
+ * Lookup by entity key alone. Relationships name their ends by key, never by
629
+ * type, so every "what is at the other end" join (the Topology API's callee,
630
+ * placement and drawer lookups) resolves keys without knowing the type. The
631
+ * unique index above can only serve that as one probe per type in the
632
+ * project; this serves it in one.
633
+ *
634
+ * Created by migration 1795200000000-AddInventoryItemProjectEntityKeyIndex,
635
+ * which carries the timeouts and the CONCURRENTLY runbook for large installs
636
+ * that a generated migration cannot. `synchronize: false` keeps the schema
637
+ * builder from dropping it or generating a second copy (see
638
+ * UnsynchronizedIndex).
639
+ */
640
+ ,
641
+ Index("IDX_INVENTORY_ITEM_PROJECT_ENTITY_KEY", ["projectId", "entityKey"], UNSYNCHRONIZED_INDEX)
633
642
  ], InventoryItem);
634
643
  export default InventoryItem;
635
644
  //# sourceMappingURL=InventoryItem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InventoryItem.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/InventoryItem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InventoryItem.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/InventoryItem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import logger from "../../../Utils/Logger";
2
+ export const INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX = "IDX_INVENTORY_ITEM_PROJECT_ENTITY_KEY";
3
+ /*
4
+ * Above this many InventoryItem rows the index is not built here (see
5
+ * "LOCKING" below). Roughly ten seconds of build on modest hardware.
6
+ */
7
+ export const INVENTORY_ITEM_INLINE_INDEX_BUILD_MAX_ROWS = 1000000;
8
+ /* What an operator runs to build the index online, under exactly this name. */
9
+ export const INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX_RUNBOOK = `CREATE INDEX CONCURRENTLY IF NOT EXISTS "${INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX}" ON "InventoryItem" ("projectId", "entityKey")`;
10
+ /*
11
+ * Adds ("projectId", "entityKey") on InventoryItem.
12
+ *
13
+ * WHY
14
+ *
15
+ * Relationships name both ends by entity key only. The Topology API resolves
16
+ * those keys to items constantly — the things services call, where they run,
17
+ * the other end of every row in the detail drawer — and the only index that
18
+ * leads with the key today is the unique ("projectId", "entityType",
19
+ * "entityKey"), which a type-less lookup can use only as one probe per type in
20
+ * the project. The queries are written to stay correct and acceptable without
21
+ * this index (they constrain "entityType" to the project's types so the
22
+ * unique index is usable), because on Helm installs migrations run
23
+ * asynchronously and the new API can serve traffic before this has been
24
+ * built. This makes the same lookups one probe.
25
+ *
26
+ * Relationships get no new index on purpose: InventoryItemRelationship is the
27
+ * largest inventory table and a plain CREATE INDEX would block its ingest
28
+ * writes for the whole build.
29
+ *
30
+ * WHY THIS IS HAND-WRITTEN
31
+ *
32
+ * A generated migration cannot bound its own lock wait or runtime, nor decide
33
+ * to leave a build to the operator, and this one runs against a table that
34
+ * ingest writes continuously. The entity declares the index by name with
35
+ * `synchronize: false` (see Types/Database/UnsynchronizedIndex.ts), so the
36
+ * schema builder neither generates a second copy nor drops this one.
37
+ *
38
+ * LOCKING, AND THE RUNBOOK FOR LARGE INSTALLS
39
+ *
40
+ * Migrations run one transaction each (migrationsTransactionMode "each"), so
41
+ * CREATE INDEX CONCURRENTLY is not available here. A plain CREATE INDEX holds
42
+ * a SHARE lock on InventoryItem for as long as the build takes: reads
43
+ * continue, inventory writes queue behind it and fail once their own
44
+ * lock_timeout (3 s in the app) or statement_timeout runs out.
45
+ *
46
+ * The build cannot be given more time than the connection allows. The
47
+ * effective ceiling is the client-side DATABASE_QUERY_TIMEOUT_MS of
48
+ * node-postgres (35 s by default), which no SET can raise: past it the client
49
+ * abandons the query — and the ROLLBACK queued behind it — while the server
50
+ * keeps building and keeps the lock. So statement_timeout stays at the
51
+ * connection's own value (30 s by default, below that ceiling; `DEFAULT`
52
+ * undoes anything an earlier statement on the session may have set), which
53
+ * makes Postgres cancel an overlong build itself and release the lock at
54
+ * once. `lock_timeout` stops the migration from queueing behind a long
55
+ * transaction (and parking every writer behind itself) for more than five
56
+ * seconds; a timeout fails the migration, which the next start retries.
57
+ *
58
+ * A build that would not finish comfortably inside that window is not
59
+ * attempted: when InventoryItem holds more than
60
+ * INVENTORY_ITEM_INLINE_INDEX_BUILD_MAX_ROWS rows (the planner's estimate
61
+ * from pg_class; a bounded count when the table has never been analyzed),
62
+ * this migration logs a warning and completes without the index. The
63
+ * Topology API is correct without it, only slower on key lookups. Such an
64
+ * install should build the index online, at any time, under exactly this
65
+ * name:
66
+ *
67
+ * CREATE INDEX CONCURRENTLY IF NOT EXISTS "IDX_INVENTORY_ITEM_PROJECT_ENTITY_KEY"
68
+ * ON "InventoryItem" ("projectId", "entityKey");
69
+ *
70
+ * Built before the upgrade, this migration finds it and does nothing. A
71
+ * CONCURRENTLY build that failed leaves an INVALID index behind under that
72
+ * name, which IF NOT EXISTS would otherwise accept forever; such a leftover
73
+ * is dropped here first (so the runbook works as written afterwards) and
74
+ * rebuilt when the table is small enough.
75
+ *
76
+ * An online build that is still RUNNING looks exactly like that leftover
77
+ * (pg_index.indisvalid is false until it finishes). Dropping it would queue
78
+ * for an ACCESS EXCLUSIVE lock behind the build and stall every reader and
79
+ * writer of InventoryItem meanwhile, so a build in progress
80
+ * (pg_stat_progress_create_index) is left to finish and this migration
81
+ * completes without touching it.
82
+ */
83
+ export class AddInventoryItemProjectEntityKeyIndex1795200000000 {
84
+ /* Lowered only by tests; TypeORM constructs migrations without arguments. */
85
+ constructor(maxRowsForInlineBuild = INVENTORY_ITEM_INLINE_INDEX_BUILD_MAX_ROWS) {
86
+ this.maxRowsForInlineBuild = maxRowsForInlineBuild;
87
+ this.name = "AddInventoryItemProjectEntityKeyIndex1795200000000";
88
+ }
89
+ async up(queryRunner) {
90
+ await queryRunner.query(`SET LOCAL statement_timeout = DEFAULT`);
91
+ await queryRunner.query(`SET LOCAL lock_timeout = '5s'`);
92
+ const existing = await queryRunner.query(`SELECT x.indisvalid AS "isValid" FROM pg_index x
93
+ JOIN pg_class c ON c.oid = x.indexrelid
94
+ JOIN pg_namespace n ON n.oid = c.relnamespace
95
+ WHERE c.relname = $1 AND n.nspname = current_schema()`, [INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX]);
96
+ if (existing.some((index) => {
97
+ return index.isValid === true;
98
+ })) {
99
+ /* Pre-built by an operator (or already migrated): nothing to do. */
100
+ return;
101
+ }
102
+ if (existing.length > 0) {
103
+ if (await this.isBuildInProgress(queryRunner)) {
104
+ logger.warn(`AddInventoryItemProjectEntityKeyIndex: an online build of ${INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX} is in progress; leaving it to finish. If that build fails, drop the INVALID index it leaves behind and run again: ${INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX_RUNBOOK};`);
105
+ return;
106
+ }
107
+ await queryRunner.query(`DROP INDEX IF EXISTS "${INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX}"`);
108
+ }
109
+ const rows = await this.estimateRows(queryRunner);
110
+ if (rows > this.maxRowsForInlineBuild) {
111
+ logger.warn(`AddInventoryItemProjectEntityKeyIndex: InventoryItem holds about ${Math.round(rows)} rows, more than the ${this.maxRowsForInlineBuild} this migration builds an index over while it blocks inventory writes, so the index ${INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX} was NOT created. The Topology maps work without it but resolve entity keys more slowly. Build it online (it does not block writes) by running on the OneUptime database: ${INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX_RUNBOOK};`);
112
+ return;
113
+ }
114
+ await queryRunner.query(`CREATE INDEX IF NOT EXISTS "${INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX}" ON "InventoryItem" ("projectId", "entityKey")`);
115
+ }
116
+ async down(queryRunner) {
117
+ /*
118
+ * DROP INDEX takes ACCESS EXCLUSIVE on the table; waiting for it would
119
+ * park every reader and writer of InventoryItem behind this statement.
120
+ */
121
+ await queryRunner.query(`SET LOCAL statement_timeout = DEFAULT`);
122
+ await queryRunner.query(`SET LOCAL lock_timeout = '5s'`);
123
+ await queryRunner.query(`DROP INDEX IF EXISTS "${INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX}"`);
124
+ }
125
+ /* Whether a CREATE INDEX (CONCURRENTLY) of this index is running now. */
126
+ async isBuildInProgress(queryRunner) {
127
+ const builds = await queryRunner.query(`SELECT 1 FROM pg_stat_progress_create_index p
128
+ JOIN pg_class c ON c.oid = p.index_relid
129
+ JOIN pg_namespace n ON n.oid = c.relnamespace
130
+ WHERE c.relname = $1 AND n.nspname = current_schema()`, [INVENTORY_ITEM_PROJECT_ENTITY_KEY_INDEX]);
131
+ return builds.length > 0;
132
+ }
133
+ /*
134
+ * How many rows InventoryItem holds, from the statistics the planner uses:
135
+ * pg_class.reltuples scaled from the pages it was measured over to the
136
+ * table's current size (so growth since the last ANALYZE counts). A table
137
+ * that has never been analyzed (reltuples -1), or whose statistics saw no
138
+ * pages although it has some now, is counted instead — only up to just past
139
+ * the threshold, so the count stays cheap on any table.
140
+ */
141
+ async estimateRows(queryRunner) {
142
+ var _a, _b, _c, _d, _e, _f, _g, _h;
143
+ const statistics = await queryRunner.query(`SELECT c.reltuples::float8 AS "reltuples", c.relpages::float8 AS "relpages",
144
+ (pg_relation_size(c.oid) / current_setting('block_size')::int)::float8 AS "pages"
145
+ FROM pg_class c
146
+ JOIN pg_namespace n ON n.oid = c.relnamespace
147
+ WHERE c.relname = 'InventoryItem' AND n.nspname = current_schema()`);
148
+ const reltuples = Number((_b = (_a = statistics[0]) === null || _a === void 0 ? void 0 : _a.reltuples) !== null && _b !== void 0 ? _b : -1);
149
+ const relpages = Number((_d = (_c = statistics[0]) === null || _c === void 0 ? void 0 : _c.relpages) !== null && _d !== void 0 ? _d : 0);
150
+ const pages = Number((_f = (_e = statistics[0]) === null || _e === void 0 ? void 0 : _e.pages) !== null && _f !== void 0 ? _f : 0);
151
+ const isKnown = Number.isFinite(reltuples) &&
152
+ reltuples >= 0 &&
153
+ Number.isFinite(relpages) &&
154
+ Number.isFinite(pages) &&
155
+ (relpages > 0 || pages === 0);
156
+ if (isKnown) {
157
+ return relpages > 0
158
+ ? Math.max(reltuples, (reltuples / relpages) * pages)
159
+ : reltuples;
160
+ }
161
+ const counted = await queryRunner.query(`SELECT COUNT(*)::int AS "count" FROM (SELECT 1 FROM "InventoryItem" LIMIT $1) bounded`, [this.maxRowsForInlineBuild + 1]);
162
+ return Number((_h = (_g = counted[0]) === null || _g === void 0 ? void 0 : _g.count) !== null && _h !== void 0 ? _h : 0);
163
+ }
164
+ }
165
+ //# sourceMappingURL=1795200000000-AddInventoryItemProjectEntityKeyIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1795200000000-AddInventoryItemProjectEntityKeyIndex.js","sourceRoot":"","sources":["../../../../../../Server/Infrastructure/Postgres/SchemaMigrations/1795200000000-AddInventoryItemProjectEntityKeyIndex.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import { AddSessionReplaySameOriginTracePropagation1794800000000 } from "./17948
12
12
  import { AddIncidentAlert1794900000000 } from "./1794900000000-AddIncidentAlert";
13
13
  import { AddDatabaseServerTables1795000000000 } from "./1795000000000-AddDatabaseServerTables";
14
14
  import { AddUserProjectSsoConsent1795100000000 } from "./1795100000000-AddUserProjectSsoConsent";
15
+ import { AddInventoryItemProjectEntityKeyIndex1795200000000 } from "./1795200000000-AddInventoryItemProjectEntityKeyIndex";
15
16
  import { AddConfigurableRuleCriteria1792500000000 } from "./1792500000000-AddConfigurableRuleCriteria";
16
17
  import { AddGoogleSecOpsDiagnostics1792300000000 } from "./1792300000000-AddGoogleSecOpsDiagnostics";
17
18
  import { AddIncomingCallPolicyPhoneNumbers1792600000000 } from "./1792600000000-AddIncomingCallPolicyPhoneNumbers";
@@ -1223,5 +1224,6 @@ export default [
1223
1224
  AddIncidentAlert1794900000000,
1224
1225
  AddDatabaseServerTables1795000000000,
1225
1226
  AddUserProjectSsoConsent1795100000000,
1227
+ AddInventoryItemProjectEntityKeyIndex1795200000000,
1226
1228
  ];
1227
1229
  //# sourceMappingURL=Index.js.map