@oneuptime/common 12.0.33 → 12.0.34

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 (652) hide show
  1. package/Models/AnalyticsModels/RumSession.ts +117 -1
  2. package/Models/AnalyticsModels/RumSessionChunk.ts +13 -0
  3. package/Models/DatabaseModels/AlertCustomField.ts +77 -3
  4. package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
  5. package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
  6. package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
  7. package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
  8. package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +77 -3
  9. package/Models/DatabaseModels/RumApplication.ts +6 -6
  10. package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
  11. package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
  12. package/Models/DatabaseModels/TeamCustomField.ts +77 -3
  13. package/Models/DatabaseModels/TeamMember.ts +0 -9
  14. package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
  15. package/Models/DatabaseModels/TeamPermission.ts +3 -24
  16. package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
  17. package/Models/DatabaseModels/UserTelegram.ts +0 -4
  18. package/Scripts/benchmark-fanin-capacity.js +181 -0
  19. package/Server/API/TelemetryAPI.ts +1284 -164
  20. package/Server/API/UserNotificationSettingAPI.ts +55 -0
  21. package/Server/API/UserTelegramAPI.ts +48 -4
  22. package/Server/EnvironmentConfig.ts +35 -2
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  28. package/Server/Infrastructure/QueueWorker.ts +20 -14
  29. package/Server/Infrastructure/Semaphore.ts +2 -0
  30. package/Server/Middleware/TelemetryIngest.ts +453 -7
  31. package/Server/Services/AccessTokenService.ts +1 -0
  32. package/Server/Services/AlertCustomFieldService.ts +98 -0
  33. package/Server/Services/AlertService.ts +37 -0
  34. package/Server/Services/ApiKeyPermissionService.ts +461 -29
  35. package/Server/Services/CustomFieldMappingService.ts +879 -0
  36. package/Server/Services/GlobalConfigService.ts +194 -0
  37. package/Server/Services/IncidentCustomFieldService.ts +98 -0
  38. package/Server/Services/IncidentService.ts +35 -0
  39. package/Server/Services/MetricService.ts +194 -0
  40. package/Server/Services/MonitorService.ts +32 -0
  41. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +78 -25
  42. package/Server/Services/ProjectService.ts +22 -0
  43. package/Server/Services/RoutineEmailSettingsService.ts +73 -0
  44. package/Server/Services/RumSessionReplayViewService.ts +104 -24
  45. package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
  46. package/Server/Services/ScheduledMaintenanceService.ts +32 -0
  47. package/Server/Services/TeamMemberService.ts +78 -0
  48. package/Server/Services/TeamPermissionService.ts +235 -3
  49. package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
  50. package/Server/Services/UserNotificationSettingService.ts +34 -6
  51. package/Server/Services/UserTelegramService.ts +326 -5
  52. package/Server/Types/Database/QueryHelper.ts +2 -0
  53. package/Server/Utils/APIKey/AccessPermission.ts +5 -2
  54. package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
  55. package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
  56. package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
  57. package/Server/Utils/DataSource/EgressGuard.ts +177 -8
  58. package/Server/Utils/EmailRollup/EmailRollupConstants.ts +38 -5
  59. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +57 -4
  60. package/Server/Utils/FrontendEnvironment.ts +40 -0
  61. package/Server/Utils/LogRedaction.ts +20 -0
  62. package/Server/Utils/Logger.ts +11 -0
  63. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +338 -77
  64. package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
  65. package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
  66. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +110 -15
  67. package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
  68. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +29 -0
  69. package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -0
  70. package/Server/Utils/SSRFProtection.ts +217 -10
  71. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
  72. package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
  73. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
  74. package/Server/Utils/StartServer.ts +2 -17
  75. package/Server/Utils/TelegramVerificationToken.ts +185 -0
  76. package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
  77. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
  78. package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
  79. package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
  80. package/Server/Utils/VM/VMAPI.ts +1 -0
  81. package/Server/Utils/VM/VMRunner.ts +975 -95
  82. package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
  83. package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
  84. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +468 -0
  85. package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +399 -0
  86. package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
  87. package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
  88. package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
  89. package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
  90. package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
  91. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
  92. package/Tests/ResponsiveVisibility.test.ts +115 -0
  93. package/Tests/ResponsiveVisibility.ts +183 -0
  94. package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
  95. package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
  96. package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
  97. package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
  98. package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +202 -0
  99. package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
  100. package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
  101. package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
  102. package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
  103. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
  104. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
  105. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
  106. package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
  107. package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
  108. package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
  109. package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
  110. package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
  111. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
  112. package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
  113. package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
  114. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +226 -1
  115. package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
  116. package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
  117. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
  118. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
  119. package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
  120. package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
  121. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -0
  122. package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +141 -0
  123. package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +18 -10
  124. package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
  125. package/Tests/Server/Utils/AI/SRE/Insights/FixRouting.test.ts +497 -0
  126. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
  127. package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
  128. package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
  129. package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
  130. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
  131. package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
  132. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1 -1
  133. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
  134. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +77 -1
  135. package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
  136. package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
  137. package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
  138. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +584 -0
  139. package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
  140. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +437 -0
  141. package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
  142. package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
  143. package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
  144. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
  145. package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
  146. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
  147. package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
  148. package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
  149. package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
  150. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
  151. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
  152. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
  153. package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
  154. package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
  155. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
  156. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
  157. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
  158. package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
  159. package/Tests/Types/JSONFunctions.test.ts +260 -0
  160. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
  161. package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
  162. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
  163. package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
  164. package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
  165. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
  166. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
  167. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
  168. package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +190 -21
  169. package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
  170. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
  171. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
  172. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
  173. package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
  174. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
  175. package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
  176. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
  177. package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
  178. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
  179. package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -0
  180. package/Tests/Types/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
  181. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
  182. package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
  183. package/Tests/Types/WebsiteRequest.test.ts +285 -3
  184. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
  185. package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
  186. package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
  187. package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
  188. package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
  189. package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
  190. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
  191. package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
  192. package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
  193. package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
  194. package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
  195. package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
  196. package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
  197. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +28 -12
  198. package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
  199. package/Tests/UI/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
  200. package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
  201. package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
  202. package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
  203. package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
  204. package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
  205. package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
  206. package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
  207. package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
  208. package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
  209. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
  210. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
  211. package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
  212. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
  213. package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
  214. package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
  215. package/Tests/UI/Rum/ReplayHeader.test.tsx +711 -0
  216. package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
  217. package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
  218. package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
  219. package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
  220. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
  221. package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
  222. package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
  223. package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
  224. package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
  225. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
  226. package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
  227. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
  228. package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
  229. package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
  230. package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
  231. package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
  232. package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
  233. package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
  234. package/Tests/Utils/API.test.ts +308 -0
  235. package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
  236. package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -0
  237. package/Tests/Utils/Rum/ChunkMath.test.ts +83 -0
  238. package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
  239. package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
  240. package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
  241. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
  242. package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
  243. package/Tests/Utils/ValueFormatter.test.ts +148 -0
  244. package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
  245. package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
  246. package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
  247. package/Types/Icon/IconProp.ts +1 -0
  248. package/Types/JSONFunctions.ts +189 -43
  249. package/Types/Monitor/CephAlertTemplates.ts +157 -195
  250. package/Types/Monitor/DockerAlertTemplates.ts +338 -128
  251. package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
  252. package/Types/Monitor/HostAlertTemplates.ts +302 -130
  253. package/Types/Monitor/IotAlertTemplates.ts +112 -104
  254. package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
  255. package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
  256. package/Types/Monitor/PodmanAlertTemplates.ts +116 -163
  257. package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
  258. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
  259. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
  260. package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
  261. package/Types/Monitor/RumAlertTemplates.ts +46 -7
  262. package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
  263. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
  264. package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
  265. package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
  266. package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -0
  267. package/Types/Rum/SessionReplay.ts +209 -0
  268. package/Types/Rum/SessionReplayApi.ts +722 -0
  269. package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
  270. package/Types/Rum/SessionReplayConsentMode.ts +11 -7
  271. package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
  272. package/Types/Rum/SessionReplayHealth.ts +238 -0
  273. package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
  274. package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
  275. package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
  276. package/Types/WebsiteRequest.ts +85 -3
  277. package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
  278. package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
  279. package/UI/Components/Charts/Line/LineChart.tsx +13 -2
  280. package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
  281. package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
  282. package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
  283. package/UI/Components/Charts/Utils/XAxis.ts +217 -0
  284. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +143 -25
  285. package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
  286. package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
  287. package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
  288. package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
  289. package/UI/Components/Header/Header.tsx +25 -9
  290. package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
  291. package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
  292. package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
  293. package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
  294. package/UI/Components/Icon/Icon.tsx +11 -0
  295. package/UI/Components/JSONTable/JSONTable.tsx +2 -2
  296. package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
  297. package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
  298. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
  299. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
  300. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
  301. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
  302. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
  303. package/UI/Components/ModelTable/Column.ts +15 -0
  304. package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
  305. package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
  306. package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
  307. package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
  308. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
  309. package/UI/Components/StatusPage/ResourceGroupSection.tsx +40 -0
  310. package/UI/Components/Table/CellClassName.ts +81 -0
  311. package/UI/Components/Table/TableRow.tsx +20 -14
  312. package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
  313. package/UI/Components/Table/Types/Column.ts +36 -0
  314. package/UI/Components/Tooltip/Tooltip.tsx +11 -1
  315. package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
  316. package/UI/Components/Workflow/NodePlacement.ts +57 -0
  317. package/UI/Components/Workflow/Workflow.tsx +47 -18
  318. package/UI/Config.ts +15 -33
  319. package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
  320. package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
  321. package/UI/Utils/Telemetry/Telemetry.ts +10 -8
  322. package/Utils/API.ts +129 -3
  323. package/Utils/HTTPResponseBodyReader.ts +221 -0
  324. package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -0
  325. package/Utils/Rum/ChunkMath.ts +106 -0
  326. package/Utils/Rum/SessionReplayHealth.ts +732 -0
  327. package/Utils/Rum/SessionReplayStringMap.ts +226 -0
  328. package/Utils/Schema/ModelSchema.ts +1 -0
  329. package/Utils/StatusPage/ResourceSearch.ts +290 -0
  330. package/Utils/Telemetry/OriginAllowList.ts +355 -0
  331. package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
  332. package/Utils/ValueFormatter.ts +35 -1
  333. package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
  334. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
  335. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
  336. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
  337. package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
  338. package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
  339. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
  340. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js.map +1 -1
  341. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +79 -3
  342. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  343. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +79 -3
  344. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -1
  345. package/build/dist/Models/DatabaseModels/MonitorCustomField.js +79 -3
  346. package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
  347. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +79 -3
  348. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
  349. package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
  350. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  351. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
  352. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
  353. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
  354. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
  355. package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
  356. package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
  357. package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
  358. package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
  359. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
  360. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
  361. package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
  362. package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
  363. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
  364. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
  365. package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
  366. package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
  367. package/build/dist/Server/API/TelemetryAPI.js +769 -109
  368. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  369. package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
  370. package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
  371. package/build/dist/Server/API/UserTelegramAPI.js +28 -6
  372. package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
  373. package/build/dist/Server/EnvironmentConfig.js +29 -2
  374. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  375. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
  376. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
  377. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
  378. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
  379. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
  380. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
  381. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
  382. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
  383. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  384. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  385. package/build/dist/Server/Infrastructure/QueueWorker.js +19 -7
  386. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  387. package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
  388. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  389. package/build/dist/Server/Middleware/TelemetryIngest.js +315 -8
  390. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  391. package/build/dist/Server/Services/AccessTokenService.js +1 -0
  392. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  393. package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
  394. package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
  395. package/build/dist/Server/Services/AlertService.js +34 -0
  396. package/build/dist/Server/Services/AlertService.js.map +1 -1
  397. package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
  398. package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
  399. package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
  400. package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
  401. package/build/dist/Server/Services/GlobalConfigService.js +133 -0
  402. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  403. package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
  404. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  405. package/build/dist/Server/Services/IncidentService.js +32 -0
  406. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  407. package/build/dist/Server/Services/MetricService.js +163 -0
  408. package/build/dist/Server/Services/MetricService.js.map +1 -1
  409. package/build/dist/Server/Services/MonitorService.js +29 -0
  410. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  411. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +79 -27
  412. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  413. package/build/dist/Server/Services/ProjectService.js +22 -0
  414. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  415. package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
  416. package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
  417. package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
  418. package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
  419. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
  420. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
  421. package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
  422. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  423. package/build/dist/Server/Services/TeamMemberService.js +62 -2
  424. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  425. package/build/dist/Server/Services/TeamPermissionService.js +166 -3
  426. package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
  427. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
  428. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  429. package/build/dist/Server/Services/UserNotificationSettingService.js +26 -6
  430. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  431. package/build/dist/Server/Services/UserTelegramService.js +257 -4
  432. package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
  433. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  434. package/build/dist/Server/Utils/APIKey/AccessPermission.js +2 -2
  435. package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
  436. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
  437. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
  438. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
  439. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
  440. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
  441. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
  442. package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
  443. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
  444. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +38 -5
  445. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -1
  446. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +44 -2
  447. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
  448. package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
  449. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
  450. package/build/dist/Server/Utils/LogRedaction.js +20 -0
  451. package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
  452. package/build/dist/Server/Utils/Logger.js +10 -0
  453. package/build/dist/Server/Utils/Logger.js.map +1 -1
  454. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +287 -68
  455. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  456. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +20 -4
  457. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
  458. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +29 -6
  459. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  460. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +88 -13
  461. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  462. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
  463. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  464. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +22 -0
  465. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  466. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js +237 -0
  467. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
  468. package/build/dist/Server/Utils/SSRFProtection.js +136 -9
  469. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  470. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
  471. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
  472. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
  473. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
  474. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
  475. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  476. package/build/dist/Server/Utils/StartServer.js +3 -14
  477. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  478. package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
  479. package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
  480. package/build/dist/Server/Utils/Telemetry/PinServiceName.js +163 -0
  481. package/build/dist/Server/Utils/Telemetry/PinServiceName.js.map +1 -0
  482. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +28 -15
  483. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
  484. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
  485. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
  486. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
  487. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
  488. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  489. package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
  490. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  491. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +60 -0
  492. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
  493. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
  494. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
  495. package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
  496. package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
  497. package/build/dist/Types/Icon/IconProp.js +1 -0
  498. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  499. package/build/dist/Types/JSONFunctions.js +118 -37
  500. package/build/dist/Types/JSONFunctions.js.map +1 -1
  501. package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
  502. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
  503. package/build/dist/Types/Monitor/DockerAlertTemplates.js +286 -121
  504. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  505. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
  506. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
  507. package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
  508. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  509. package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
  510. package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
  511. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
  512. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  513. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
  514. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
  515. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +104 -153
  516. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  517. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
  518. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
  519. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
  520. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  521. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
  522. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  523. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
  524. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
  525. package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
  526. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  527. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
  528. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
  529. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
  530. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
  531. package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
  532. package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -1
  533. package/build/dist/Types/Monitor/UptimeHistoryLabels.js +17 -0
  534. package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
  535. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
  536. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
  537. package/build/dist/Types/Rum/SessionReplay.js +117 -0
  538. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  539. package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
  540. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
  541. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
  542. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
  543. package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
  544. package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
  545. package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
  546. package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
  547. package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
  548. package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
  549. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
  550. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
  551. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
  552. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
  553. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
  554. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js.map +1 -0
  555. package/build/dist/Types/WebsiteRequest.js +55 -3
  556. package/build/dist/Types/WebsiteRequest.js.map +1 -1
  557. package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
  558. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  559. package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
  560. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  561. package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
  562. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  563. package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
  564. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
  565. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
  566. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
  567. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  568. package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
  569. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  570. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +80 -6
  571. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  572. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
  573. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
  574. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +112 -7
  575. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  576. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
  577. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  578. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
  579. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
  580. package/build/dist/UI/Components/Header/Header.js +2 -3
  581. package/build/dist/UI/Components/Header/Header.js.map +1 -1
  582. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
  583. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
  584. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
  585. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
  586. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
  587. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
  588. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
  589. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
  590. package/build/dist/UI/Components/Icon/Icon.js +5 -0
  591. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  592. package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
  593. package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
  594. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
  595. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
  596. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js +34 -0
  597. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
  598. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
  599. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
  600. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
  601. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  602. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
  603. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
  604. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +38 -0
  605. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  606. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +22 -1
  607. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
  608. package/build/dist/UI/Components/Table/CellClassName.js +55 -0
  609. package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
  610. package/build/dist/UI/Components/Table/TableRow.js +16 -13
  611. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  612. package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
  613. package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
  614. package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
  615. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  616. package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
  617. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  618. package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
  619. package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
  620. package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
  621. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  622. package/build/dist/UI/Config.js +10 -20
  623. package/build/dist/UI/Config.js.map +1 -1
  624. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
  625. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
  626. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js +14 -0
  627. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
  628. package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
  629. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  630. package/build/dist/Utils/API.js +67 -5
  631. package/build/dist/Utils/API.js.map +1 -1
  632. package/build/dist/Utils/HTTPResponseBodyReader.js +157 -0
  633. package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
  634. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
  635. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
  636. package/build/dist/Utils/Rum/ChunkMath.js +76 -0
  637. package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
  638. package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
  639. package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
  640. package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
  641. package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
  642. package/build/dist/Utils/Schema/ModelSchema.js +1 -0
  643. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  644. package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
  645. package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
  646. package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
  647. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
  648. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
  649. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
  650. package/build/dist/Utils/ValueFormatter.js +32 -1
  651. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  652. package/package.json +1 -1
@@ -2,8 +2,11 @@ import ObjectID from "../ObjectID";
2
2
  import MonitorStep from "./MonitorStep";
3
3
  import MonitorCriteria from "./MonitorCriteria";
4
4
  import MonitorCriteriaInstance from "./MonitorCriteriaInstance";
5
- import FilterCondition from "../Filter/FilterCondition";
6
- import { CheckOn, FilterType, EvaluateOverTimeType } from "./CriteriaFilter";
5
+ import {
6
+ buildHealthyCriteriaInstance,
7
+ buildUnhealthyCriteriaInstance,
8
+ } from "./Recommendation/RecommendationCriteriaBuilder";
9
+ import { FilterType, EvaluateOverTimeType } from "./CriteriaFilter";
7
10
  import MonitorStepHostMonitor from "./MonitorStepHostMonitor";
8
11
  import RollingTime from "../RollingTime/RollingTime";
9
12
  import MetricsAggregationType from "../Metrics/MetricsAggregationType";
@@ -106,59 +109,12 @@ export function buildHostOfflineCriteriaInstance(args: {
106
109
  incidentDescription?: string;
107
110
  criteriaName?: string;
108
111
  criteriaDescription?: string;
112
+ metricAggregationType?: EvaluateOverTimeType | undefined;
109
113
  }): MonitorCriteriaInstance {
110
- const instance: MonitorCriteriaInstance = new MonitorCriteriaInstance();
111
-
112
- const incidentTitle: string =
113
- args.incidentTitle || `${args.monitorName} - Alert Triggered`;
114
- const incidentDescription: string =
115
- args.incidentDescription ||
116
- `${args.monitorName} has triggered an alert condition. See root cause for detailed host information.`;
117
-
118
- instance.data = {
119
- id: ObjectID.generate().toString(),
120
- monitorStatusId: args.offlineMonitorStatusId,
121
- filterCondition: FilterCondition.Any,
122
- filters: [
123
- {
124
- checkOn: CheckOn.MetricValue,
125
- filterType: args.filterType,
126
- metricMonitorOptions: {
127
- metricAggregationType: EvaluateOverTimeType.AnyValue,
128
- metricAlias: args.metricAlias,
129
- },
130
- value: args.value,
131
- },
132
- ],
133
- incidents: [
134
- {
135
- title: incidentTitle,
136
- description: incidentDescription,
137
- incidentSeverityId: args.incidentSeverityId,
138
- autoResolveIncident: true,
139
- id: ObjectID.generate().toString(),
140
- onCallPolicyIds: [],
141
- },
142
- ],
143
- alerts: [
144
- {
145
- title: incidentTitle,
146
- description: incidentDescription,
147
- alertSeverityId: args.alertSeverityId,
148
- autoResolveAlert: true,
149
- id: ObjectID.generate().toString(),
150
- onCallPolicyIds: [],
151
- },
152
- ],
153
- changeMonitorStatus: true,
154
- createIncidents: true,
155
- createAlerts: true,
156
- name: args.criteriaName || `${args.monitorName} - Unhealthy`,
157
- description:
158
- args.criteriaDescription || `Criteria for detecting unhealthy state.`,
159
- };
160
-
161
- return instance;
114
+ return buildUnhealthyCriteriaInstance({
115
+ ...args,
116
+ resourceNoun: "host",
117
+ });
162
118
  }
163
119
 
164
120
  export function buildHostOnlineCriteriaInstance(args: {
@@ -166,34 +122,12 @@ export function buildHostOnlineCriteriaInstance(args: {
166
122
  metricAlias: string;
167
123
  filterType: FilterType;
168
124
  value: number;
125
+ recoveryValue?: number | undefined;
126
+ marginFraction?: number | undefined;
127
+ isBinaryMetric?: boolean | undefined;
128
+ metricAggregationType?: EvaluateOverTimeType | undefined;
169
129
  }): MonitorCriteriaInstance {
170
- const instance: MonitorCriteriaInstance = new MonitorCriteriaInstance();
171
-
172
- instance.data = {
173
- id: ObjectID.generate().toString(),
174
- monitorStatusId: args.onlineMonitorStatusId,
175
- filterCondition: FilterCondition.Any,
176
- filters: [
177
- {
178
- checkOn: CheckOn.MetricValue,
179
- filterType: args.filterType,
180
- metricMonitorOptions: {
181
- metricAggregationType: EvaluateOverTimeType.AnyValue,
182
- metricAlias: args.metricAlias,
183
- },
184
- value: args.value,
185
- },
186
- ],
187
- incidents: [],
188
- alerts: [],
189
- changeMonitorStatus: true,
190
- createIncidents: false,
191
- createAlerts: false,
192
- name: "Healthy",
193
- description: "Criteria for healthy state.",
194
- };
195
-
196
- return instance;
130
+ return buildHealthyCriteriaInstance(args);
197
131
  }
198
132
 
199
133
  export function buildHostMonitorConfig(args: {
@@ -203,7 +137,17 @@ export function buildHostMonitorConfig(args: {
203
137
  rollingTime: RollingTime;
204
138
  aggregationType: MetricsAggregationType;
205
139
  attributes?: Record<string, string>;
206
- groupByAttributeKey?: string | undefined;
140
+ /**
141
+ * Attributes to split the metric by, one alert per group.
142
+ *
143
+ * More than one key is not just finer grouping — the group-by set is
144
+ * exactly what the resulting alert can name. `mountpoint` alone says
145
+ * WHICH mount filled up; adding `device` also says which physical
146
+ * disk, which is the difference between "/var is full" and "/var is
147
+ * full and it is on the same device as /". See SeriesLabelDisplay,
148
+ * which renders these onto the alert's title and description.
149
+ */
150
+ groupByAttributeKeys?: Array<string> | undefined;
207
151
  }): MonitorStepHostMonitor {
208
152
  return {
209
153
  hostIdentifier: args.hostIdentifier,
@@ -224,8 +168,9 @@ export function buildHostMonitorConfig(args: {
224
168
  aggegationType: args.aggregationType,
225
169
  aggregateBy: {},
226
170
  },
227
- ...(args.groupByAttributeKey
228
- ? { groupByAttributeKeys: [args.groupByAttributeKey] }
171
+ ...(args.groupByAttributeKeys &&
172
+ args.groupByAttributeKeys.length > 0
173
+ ? { groupByAttributeKeys: args.groupByAttributeKeys }
229
174
  : {}),
230
175
  },
231
176
  },
@@ -236,24 +181,173 @@ export function buildHostMonitorConfig(args: {
236
181
  };
237
182
  }
238
183
 
184
+ /*
185
+ * The identity an incident title should carry, as a suffix.
186
+ *
187
+ * NOT `monitorName`: the recommendation flow builds that as
188
+ * `${resourceDisplayName} - ${template.name}`
189
+ * (MonitorRecommendationUtil.getMonitorName) and feeds the whole string
190
+ * back in here, so interpolating it produced titles that said the
191
+ * template name twice — "[Host] High CPU Utilization (>80%) - web-01 -
192
+ * High CPU Utilization". `hostIdentifier` is the agent-reported
193
+ * `host.name` the metrics are actually tagged with, which is the one
194
+ * identifier the reader needs, and it says it once.
195
+ */
196
+ export function hostTitleSuffix(args: HostAlertTemplateArgs): string {
197
+ const host: string = (args.hostIdentifier || "").trim();
198
+
199
+ return host ? ` - ${host}` : "";
200
+ }
201
+
202
+ /**
203
+ * A host metric that has to be DERIVED — from more than one series, or
204
+ * from a raw ratio that has to be rescaled before anyone can read it.
205
+ *
206
+ * `system.cpu.utilization` is the case this exists for: the hostmetrics
207
+ * cpu scraper partitions it by (cpu, state), and every cpu's states sum
208
+ * to 1. Averaging the raw metric therefore lands at 1/(state count) —
209
+ * ~0.125 on Linux — no matter how busy the host is, so a "> 0.8"
210
+ * criteria is structurally unreachable. Pulling `state=user` and
211
+ * `state=system` as separate queries and summing them yields the
212
+ * "fraction of CPU time spent doing work" that `top` reports, and is the
213
+ * same derivation the host Overview page charts (see
214
+ * App/FeatureSet/Dashboard/src/Pages/Host/View/Overview.tsx).
215
+ * `system.memory.utilization` is partitioned the same way, by `state`.
216
+ *
217
+ * UNITS: `legendUnit` is applied to the FORMULA alias only, never to the
218
+ * operand queries. MetricResultUnitConverter converts query results from
219
+ * their native OTel unit into the query alias's `legendUnit`, and
220
+ * MetricUnitUtil treats the dimensionless "1" and "%" as one family — so
221
+ * a `legendUnit: "%"` on an operand would scale it by 100 BEFORE the
222
+ * formula's own `* 100` ran. Formula configs are never converted, so the
223
+ * unit there is display metadata and the formula owns the scaling. That
224
+ * is also why the `* 100` is written into the formula rather than
225
+ * delegated to a query-level `legendUnit`: the converter is a silent
226
+ * no-op whenever the metric's native unit was not recorded at ingest,
227
+ * and the failure mode would be a [0, 1] sample compared against 80 —
228
+ * a monitor that never fires and never says why.
229
+ *
230
+ * Name the operand aliases after the state they carry (`host_cpu_user`,
231
+ * `host_memory_used`). A criteria bound to a formula alias reports the
232
+ * FORMULA STRING as its metric name and an empty attribute map, so the
233
+ * alias names are the only place the alert body can tell the reader
234
+ * which slice of the metric was measured.
235
+ *
236
+ * This mirrors buildKubernetesRatioMonitorConfig.
237
+ */
238
+ export function buildHostFormulaMonitorConfig(args: {
239
+ hostIdentifier: string;
240
+ queries: Array<{
241
+ metricAlias: string;
242
+ metricName: string;
243
+ aggregationType: MetricsAggregationType;
244
+ attributes?: Record<string, string> | undefined;
245
+ }>;
246
+ resultAlias: string;
247
+ resultLegend: string;
248
+ formula: string;
249
+ legendUnit?: string | undefined;
250
+ rollingTime: RollingTime;
251
+ groupByAttributeKeys?: Array<string> | undefined;
252
+ }): MonitorStepHostMonitor {
253
+ return {
254
+ hostIdentifier: args.hostIdentifier,
255
+ metricViewConfig: {
256
+ queryConfigs: args.queries.map(
257
+ (query: {
258
+ metricAlias: string;
259
+ metricName: string;
260
+ aggregationType: MetricsAggregationType;
261
+ attributes?: Record<string, string> | undefined;
262
+ }) => {
263
+ return {
264
+ metricAliasData: {
265
+ metricVariable: query.metricAlias,
266
+ title: query.metricAlias,
267
+ description: query.metricAlias,
268
+ legend: query.metricAlias,
269
+ // Never set here — see the UNITS note above.
270
+ legendUnit: undefined,
271
+ },
272
+ metricQueryData: {
273
+ filterData: {
274
+ metricName: query.metricName,
275
+ attributes: query.attributes || {},
276
+ aggegationType: query.aggregationType,
277
+ aggregateBy: {},
278
+ },
279
+ ...(args.groupByAttributeKeys &&
280
+ args.groupByAttributeKeys.length > 0
281
+ ? { groupByAttributeKeys: args.groupByAttributeKeys }
282
+ : {}),
283
+ },
284
+ };
285
+ },
286
+ ),
287
+ formulaConfigs: [
288
+ {
289
+ metricAliasData: {
290
+ metricVariable: args.resultAlias,
291
+ title: args.resultLegend,
292
+ description: args.resultLegend,
293
+ legend: args.resultLegend,
294
+ legendUnit: args.legendUnit,
295
+ },
296
+ metricFormulaData: {
297
+ metricFormula: args.formula,
298
+ },
299
+ },
300
+ ],
301
+ },
302
+ rollingTime: args.rollingTime,
303
+ };
304
+ }
305
+
239
306
  // --- Template Definitions ---
240
307
 
241
308
  const highCpuTemplate: HostAlertTemplate = {
242
309
  id: "host-high-cpu",
243
310
  name: "High CPU Utilization",
244
- description: "Alert when host CPU utilization exceeds 80% sustained.",
311
+ description:
312
+ "Alert when host CPU busy time (user + system) exceeds 80% for the whole evaluation window.",
245
313
  category: "Resource",
246
314
  severity: "Warning",
247
315
  getMonitorStep: (args: HostAlertTemplateArgs): MonitorStep => {
248
316
  const metricAlias: string = "host_cpu";
249
317
 
250
318
  return buildHostMonitorStep({
251
- hostMonitor: buildHostMonitorConfig({
319
+ /*
320
+ * Busy CPU = user + system, each pulled as its own `state` series.
321
+ * See buildHostFormulaMonitorConfig: averaging the raw metric
322
+ * across all states lands at ~1/(state count) and never reaches any
323
+ * threshold worth alerting on, so this template could not fire.
324
+ *
325
+ * `1 - idle` is the other way to derive this and is deliberately
326
+ * NOT used: it breaks the moment a platform stops emitting the
327
+ * `idle` state. user + system is what the host Overview page
328
+ * charts, so the alert and the chart now agree.
329
+ */
330
+ hostMonitor: buildHostFormulaMonitorConfig({
252
331
  hostIdentifier: args.hostIdentifier,
253
- metricName: "system.cpu.utilization",
254
- metricAlias,
332
+ queries: [
333
+ {
334
+ metricAlias: "host_cpu_user",
335
+ metricName: "system.cpu.utilization",
336
+ aggregationType: MetricsAggregationType.Avg,
337
+ attributes: { state: "user" },
338
+ },
339
+ {
340
+ metricAlias: "host_cpu_system",
341
+ metricName: "system.cpu.utilization",
342
+ aggregationType: MetricsAggregationType.Avg,
343
+ attributes: { state: "system" },
344
+ },
345
+ ],
346
+ resultAlias: metricAlias,
347
+ resultLegend: "CPU Busy (%)",
348
+ formula: "(host_cpu_user + host_cpu_system) * 100",
349
+ legendUnit: "%",
255
350
  rollingTime: RollingTime.Past5Minutes,
256
- aggregationType: MetricsAggregationType.Avg,
257
351
  }),
258
352
  offlineCriteriaInstance: buildHostOfflineCriteriaInstance({
259
353
  offlineMonitorStatusId: args.offlineMonitorStatusId,
@@ -262,19 +356,19 @@ const highCpuTemplate: HostAlertTemplate = {
262
356
  monitorName: args.monitorName,
263
357
  metricAlias,
264
358
  filterType: FilterType.GreaterThan,
265
- // system.cpu.utilization is a [0, 1] ratio, so 0.8 == 80%.
266
- value: 0.8,
267
- incidentTitle: `[Host] High CPU Utilization (>80%) - ${args.monitorName}`,
268
- incidentDescription: `A monitored host's CPU utilization has exceeded 80%. Sustained high CPU usage can cause performance degradation. Check the root cause for the specific host details.`,
359
+ // The formula already scales the [0, 1] ratio to percent, so 80 == 80%.
360
+ value: 80,
361
+ incidentTitle: `[Host] High CPU Utilization (>80%)${hostTitleSuffix(args)}`,
362
+ incidentDescription: `CPU busy time (user + system) stayed above 80% for the whole evaluation window on this host. Sustained saturation here shows up as latency in everything the host runs. Iowait and steal are excluded, so this is work the host itself is doing. See the root cause below for the measured values.`,
269
363
  criteriaName: "High CPU - Utilization > 80%",
270
364
  criteriaDescription:
271
- "Triggers when host CPU utilization exceeds 80% over the monitoring window.",
365
+ "Triggers when host CPU busy time (user + system) exceeds 80% for every sample in the monitoring window.",
272
366
  }),
273
367
  onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
274
368
  onlineMonitorStatusId: args.onlineMonitorStatusId,
275
369
  metricAlias,
276
370
  filterType: FilterType.LessThanOrEqualTo,
277
- value: 0.8,
371
+ value: 80,
278
372
  }),
279
373
  });
280
374
  },
@@ -283,19 +377,38 @@ const highCpuTemplate: HostAlertTemplate = {
283
377
  const highMemoryTemplate: HostAlertTemplate = {
284
378
  id: "host-high-memory",
285
379
  name: "High Memory Utilization",
286
- description: "Alert when host memory utilization exceeds 85%.",
380
+ description:
381
+ "Alert when memory in use — excluding buffers and page cache — exceeds 85% of physical memory.",
287
382
  category: "Resource",
288
383
  severity: "Warning",
289
384
  getMonitorStep: (args: HostAlertTemplateArgs): MonitorStep => {
290
385
  const metricAlias: string = "host_memory";
291
386
 
292
387
  return buildHostMonitorStep({
293
- hostMonitor: buildHostMonitorConfig({
388
+ /*
389
+ * `state=used` only. The hostmetrics receiver emits this metric once
390
+ * per memory state (used / free / buffered / cached / slab_* on
391
+ * Linux, used / free / inactive on macOS) and a state set sums to 1,
392
+ * so an unfiltered Avg sits at ~1/(state count) forever and could
393
+ * never reach 0.85 — this template never fired. `used` is the same
394
+ * state the host Overview memory tile reads, so the alert and the
395
+ * page now agree.
396
+ */
397
+ hostMonitor: buildHostFormulaMonitorConfig({
294
398
  hostIdentifier: args.hostIdentifier,
295
- metricName: "system.memory.utilization",
296
- metricAlias,
399
+ queries: [
400
+ {
401
+ metricAlias: "host_memory_used",
402
+ metricName: "system.memory.utilization",
403
+ aggregationType: MetricsAggregationType.Avg,
404
+ attributes: { state: "used" },
405
+ },
406
+ ],
407
+ resultAlias: metricAlias,
408
+ resultLegend: "Memory Used (%)",
409
+ formula: "host_memory_used * 100",
410
+ legendUnit: "%",
297
411
  rollingTime: RollingTime.Past5Minutes,
298
- aggregationType: MetricsAggregationType.Avg,
299
412
  }),
300
413
  offlineCriteriaInstance: buildHostOfflineCriteriaInstance({
301
414
  offlineMonitorStatusId: args.offlineMonitorStatusId,
@@ -304,19 +417,19 @@ const highMemoryTemplate: HostAlertTemplate = {
304
417
  monitorName: args.monitorName,
305
418
  metricAlias,
306
419
  filterType: FilterType.GreaterThan,
307
- // system.memory.utilization is a [0, 1] ratio, so 0.85 == 85%.
308
- value: 0.85,
309
- incidentTitle: `[Host] High Memory Utilization (>85%) - ${args.monitorName}`,
310
- incidentDescription: `A monitored host's memory utilization has exceeded 85%. High memory usage can lead to swapping and OOM kills. Check the root cause for the specific host details.`,
420
+ // The formula already scales the [0, 1] ratio to percent, so 85 == 85%.
421
+ value: 85,
422
+ incidentTitle: `[Host] High Memory Utilization (>85%)${hostTitleSuffix(args)}`,
423
+ incidentDescription: `Memory in use excluding buffers and page cache — stayed above 85% of physical memory for the whole evaluation window on this host. Sustained pressure here leads to swapping and OOM kills. A host that is mostly page cache will NOT trip this. See the root cause below for the measured values.`,
311
424
  criteriaName: "High Memory - Utilization > 85%",
312
425
  criteriaDescription:
313
- "Triggers when host memory utilization exceeds 85% over the monitoring window.",
426
+ "Triggers when memory in use exceeds 85% of physical memory for every sample in the monitoring window.",
314
427
  }),
315
428
  onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
316
429
  onlineMonitorStatusId: args.onlineMonitorStatusId,
317
430
  metricAlias,
318
431
  filterType: FilterType.LessThanOrEqualTo,
319
- value: 0.85,
432
+ value: 85,
320
433
  }),
321
434
  });
322
435
  },
@@ -333,20 +446,52 @@ const highFilesystemUsageTemplate: HostAlertTemplate = {
333
446
  const metricAlias: string = "host_filesystem";
334
447
 
335
448
  return buildHostMonitorStep({
336
- hostMonitor: buildHostMonitorConfig({
449
+ hostMonitor: buildHostFormulaMonitorConfig({
337
450
  hostIdentifier: args.hostIdentifier,
338
- metricName: "system.filesystem.utilization",
339
- metricAlias,
451
+ queries: [
452
+ {
453
+ metricAlias: "host_filesystem_ratio",
454
+ metricName: "system.filesystem.utilization",
455
+ /*
456
+ * Max WITHIN each mountpoint's series: the peak utilization
457
+ * that mount reached during the window. Grouping by
458
+ * `mountpoint` already keeps mounts from being averaged
459
+ * together, and gives one incident per mount so a second
460
+ * mount filling up is not silenced by the first one's open
461
+ * incident.
462
+ */
463
+ aggregationType: MetricsAggregationType.Max,
464
+ },
465
+ ],
466
+ resultAlias: metricAlias,
467
+ resultLegend: "Filesystem Used (%)",
468
+ /*
469
+ * The raw metric is a [0, 1] ratio with no unit recorded, so
470
+ * without this the body of a Critical alert read a bare "0.93"
471
+ * under a title that says 90%. See buildHostFormulaMonitorConfig
472
+ * for why the scaling lives in the formula.
473
+ */
474
+ formula: "host_filesystem_ratio * 100",
475
+ legendUnit: "%",
340
476
  rollingTime: RollingTime.Past5Minutes,
341
477
  /*
342
- * Max WITHIN each mountpoint's series: the peak utilization that
343
- * mount reached during the window. Grouping by `mountpoint` already
344
- * keeps mounts from being averaged together, and gives one incident
345
- * per mount so a second mount filling up is not silenced by the
346
- * first one's open incident.
478
+ * `mountpoint` is the identity one incident per mount.
479
+ * `device` rides along because the hostmetrics receiver puts it
480
+ * on the same datapoint, it is constant for a given mount (so it
481
+ * adds no series), and it is the first thing anyone asks after
482
+ * "which mount?": /var at 95% on the same device as / is a
483
+ * different problem from /var on its own disk.
484
+ *
485
+ * NOTE this template still pages on read-only pseudo-filesystems
486
+ * that are 100% full by design (snap `squashfs` loop mounts,
487
+ * macOS `devfs`). The Kubernetes agent's collector already
488
+ * excludes those with an `include_fs_types` allowlist; the
489
+ * standalone host collector config does not, and excluding them
490
+ * here would need a NOT-IN comparison that `filterData.attributes`
491
+ * (exact match only) cannot express. The mount and device are on
492
+ * the alert, so the description below names the pattern instead.
347
493
  */
348
- aggregationType: MetricsAggregationType.Max,
349
- groupByAttributeKey: "mountpoint",
494
+ groupByAttributeKeys: ["mountpoint", "device"],
350
495
  }),
351
496
  offlineCriteriaInstance: buildHostOfflineCriteriaInstance({
352
497
  offlineMonitorStatusId: args.offlineMonitorStatusId,
@@ -355,19 +500,19 @@ const highFilesystemUsageTemplate: HostAlertTemplate = {
355
500
  monitorName: args.monitorName,
356
501
  metricAlias,
357
502
  filterType: FilterType.GreaterThan,
358
- // system.filesystem.utilization is a [0, 1] ratio, so 0.9 == 90%.
359
- value: 0.9,
360
- incidentTitle: `[Host] High Filesystem Usage (>90%) - ${args.monitorName}`,
361
- incidentDescription: `A monitored host's filesystem utilization has exceeded 90%. A full disk can cause application failures and data loss. Check the root cause for the specific host and free up disk space.`,
503
+ // The formula already scales the [0, 1] ratio to percent, so 90 == 90%.
504
+ value: 90,
505
+ incidentTitle: `[Host] High Filesystem Usage (>90%)${hostTitleSuffix(args)}`,
506
+ incidentDescription: `This mount stayed above 90% utilization for the whole evaluation window. A full disk causes application failures and data loss. The mount and device are named above. NOTE that read-only pseudo-filesystems — snap squashfs loop mounts under /snap, macOS devfs — sit at 100% by design and can never recover; if this names one of those, it is not actionable and the mount should be excluded from the collector's filesystem scraper.`,
362
507
  criteriaName: "High Filesystem - Usage > 90%",
363
508
  criteriaDescription:
364
- "Triggers when any host filesystem exceeds 90% utilization over the monitoring window.",
509
+ "Triggers when a host filesystem exceeds 90% utilization for every sample in the monitoring window.",
365
510
  }),
366
511
  onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
367
512
  onlineMonitorStatusId: args.onlineMonitorStatusId,
368
513
  metricAlias,
369
514
  filterType: FilterType.LessThanOrEqualTo,
370
- value: 0.9,
515
+ value: 90,
371
516
  }),
372
517
  });
373
518
  },
@@ -377,7 +522,7 @@ const highLoadAverageTemplate: HostAlertTemplate = {
377
522
  id: "host-high-load-average",
378
523
  name: "High Load Average (1m)",
379
524
  description:
380
- "Alert when the host's 1-minute load average exceeds 4, indicating sustained CPU contention.",
525
+ "Alert when the host's 1-minute load average stays above 4. The threshold is an absolute run-queue length and is NOT normalized by core count.",
381
526
  category: "Resource",
382
527
  severity: "Warning",
383
528
  getMonitorStep: (args: HostAlertTemplateArgs): MonitorStep => {
@@ -397,13 +542,19 @@ const highLoadAverageTemplate: HostAlertTemplate = {
397
542
  alertSeverityId: args.defaultAlertSeverityId,
398
543
  monitorName: args.monitorName,
399
544
  metricAlias,
545
+ /*
546
+ * A raw run-queue length, NOT a ratio and NOT normalized by core
547
+ * count. Normalizing would need `system.cpu.logical.count`, which
548
+ * only the standalone collector config enables today, so the
549
+ * threshold stays absolute and the copy below says so.
550
+ */
400
551
  filterType: FilterType.GreaterThan,
401
552
  value: 4,
402
- incidentTitle: `[Host] High Load Average (1m > 4) - ${args.monitorName}`,
403
- incidentDescription: `A monitored host's 1-minute load average has exceeded 4. A sustained high load average indicates CPU contention or runaway processes. Compare against the host's core count and check the root cause.`,
553
+ incidentTitle: `[Host] High Load Average (1m > 4)${hostTitleSuffix(args)}`,
554
+ incidentDescription: `This host's 1-minute load average stayed above 4 for the whole evaluation window, which indicates CPU contention or runaway processes. NOTE the threshold is an absolute run-queue length and is NOT normalized by core count: 4 is deep saturation on a 2-core host and routine on a 32-core one, so raise it on large hosts.`,
404
555
  criteriaName: "High Load - 1m Average > 4",
405
556
  criteriaDescription:
406
- "Triggers when the host's 1-minute load average exceeds 4 over the monitoring window.",
557
+ "Triggers when the host's 1-minute load average exceeds 4 for every sample in the monitoring window.",
407
558
  }),
408
559
  onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
409
560
  onlineMonitorStatusId: args.onlineMonitorStatusId,
@@ -419,7 +570,7 @@ const highProcessCountTemplate: HostAlertTemplate = {
419
570
  id: "host-high-processes",
420
571
  name: "High Process Count",
421
572
  description:
422
- "Alert when the host has an unusually high number of processes, which may indicate a fork bomb or resource leak.",
573
+ "Alert when the host's largest process-state bucket (running, sleeping, idle, ...) exceeds 2000 processes, which may indicate a fork bomb or resource leak. Linux only.",
423
574
  category: "Host",
424
575
  severity: "Warning",
425
576
  getMonitorStep: (args: HostAlertTemplateArgs): MonitorStep => {
@@ -431,6 +582,26 @@ const highProcessCountTemplate: HostAlertTemplate = {
431
582
  metricName: "system.processes.count",
432
583
  metricAlias,
433
584
  rollingTime: RollingTime.Past5Minutes,
585
+ /*
586
+ * `system.processes.count` is partitioned by process status
587
+ * (running / sleeping / blocked / idle / ...) — one datapoint per
588
+ * status, which is why ingest SUMS every datapoint to derive
589
+ * `host.processCount` and why the host Overview tile has to filter
590
+ * down to a single status. This query is ungrouped and unfiltered,
591
+ * so `Max` compares the LARGEST SINGLE STATUS BUCKET, not the
592
+ * host's total process count.
593
+ *
594
+ * `Max` is kept deliberately. `Sum` is not the fix: the query
595
+ * aggregates within a time bucket, so it would add every status
596
+ * AND every scrape inside that bucket together. Grouping by status
597
+ * would need a per-status threshold nobody has evidence for, and
598
+ * would break the `groupByAttributeKeys: []` contract pinned in
599
+ * TemplateGroupByKeys.test.ts. On Linux the largest bucket tracks
600
+ * the total closely enough to stay a usable "far too many
601
+ * processes" signal — so the QUERY stays as it is and the COPY
602
+ * below stops claiming a total nobody could reconcile with a
603
+ * process listing.
604
+ */
434
605
  aggregationType: MetricsAggregationType.Max,
435
606
  }),
436
607
  offlineCriteriaInstance: buildHostOfflineCriteriaInstance({
@@ -441,10 +612,11 @@ const highProcessCountTemplate: HostAlertTemplate = {
441
612
  metricAlias,
442
613
  filterType: FilterType.GreaterThan,
443
614
  value: 2000,
444
- incidentTitle: `[Host] High Process Count (>2000) - ${args.monitorName}`,
445
- incidentDescription: `A monitored host has an unusually high number of processes (>2000). This may indicate a fork bomb, resource leak, or misconfigured application. Check the host for runaway processes.`,
615
+ incidentTitle: `[Host] High Process Count (>2000)${hostTitleSuffix(args)}`,
616
+ incidentDescription: `The largest single process-state bucket on this host (running, sleeping, idle, ...) held more than 2000 processes for every sample in the evaluation window. This is NOT the host's total process count, so it will not match the total a process listing reports. Check the host for runaway or unreaped processes. The metric comes from the hostmetrics processes scraper, which reports on Linux only.`,
446
617
  criteriaName: "High Processes - Count > 2000",
447
- criteriaDescription: "Triggers when host process count exceeds 2000.",
618
+ criteriaDescription:
619
+ "Triggers when the largest single process-state bucket exceeds 2000 processes for every sample in the monitoring window.",
448
620
  }),
449
621
  onlineCriteriaInstance: buildHostOnlineCriteriaInstance({
450
622
  onlineMonitorStatusId: args.onlineMonitorStatusId,