@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 MonitorStepDockerMonitor from "./MonitorStepDockerMonitor";
8
11
  import RollingTime from "../RollingTime/RollingTime";
9
12
  import MetricsAggregationType from "../Metrics/MetricsAggregationType";
@@ -30,6 +33,33 @@ export interface DockerAlertTemplate {
30
33
  getMonitorStep: (args: DockerAlertTemplateArgs) => MonitorStep;
31
34
  }
32
35
 
36
+ /*
37
+ * What an incident/alert title says after the condition.
38
+ *
39
+ * Titles used to end in `- ${args.monitorName}`, and for a monitor created
40
+ * from the Recommendations page that name is ALREADY
41
+ * "<resource> - <template name>"
42
+ * (MonitorRecommendationUtil.getMonitorName), so the rendered title stated
43
+ * the same fact twice:
44
+ *
45
+ * "[Docker] High CPU Usage (>80%) - docker-host-01 - High Container CPU Usage"
46
+ *
47
+ * SeriesContextEnricher then appends the container identity on top of that,
48
+ * which pushes the one thing that differs between two alerts — WHICH
49
+ * container — off the end of a phone notification.
50
+ *
51
+ * The host is the half worth keeping, and it is the half the alert email
52
+ * never renders otherwise (the email shows the alert title, the affected
53
+ * SERIES, severity, root cause and description — never the monitor's own
54
+ * name), so name it directly. Guarded because the in-form template picker
55
+ * can build a step before a host is chosen (DockerMonitorStepForm passes
56
+ * `hostIdentifier || ""`), and a title ending in a bare dash reads like a
57
+ * bug.
58
+ */
59
+ function dockerTitleSuffix(args: DockerAlertTemplateArgs): string {
60
+ return args.hostIdentifier ? ` - ${args.hostIdentifier}` : "";
61
+ }
62
+
33
63
  /*
34
64
  * Filter contract: the Docker agent stamps container identity as OTLP
35
65
  * RESOURCE attributes, so ClickHouse stores them `resource.`-prefixed:
@@ -41,9 +71,16 @@ export interface DockerAlertTemplate {
41
71
  * independently — one incident per container instead of one incident for
42
72
  * the whole host, where the busiest container silences every other one.
43
73
  *
44
- * NOTE: this is `resource.`-prefixed, unlike Docker Swarm, whose
45
- * docker_stats receiver keeps container identity in DATAPOINT labels
46
- * (plain `container.name`).
74
+ * The Docker SWARM agent runs the SAME docker_stats receiver with no
75
+ * attribute-moving transform (DockerSwarmAgent/otel-collector-config.yaml:
76
+ * receivers `[docker_stats]`, processors `[memory_limiter, resource,
77
+ * batch]`, where `resource` only upserts `docker.swarm.cluster.name` and
78
+ * `oneuptime.agent.version`), so Swarm container identity is stored
79
+ * `resource.`-prefixed too. DockerSwarmAlertTemplates.ts groups by the bare
80
+ * `container.name`; that key matches no stored attribute, and
81
+ * aggregatePerSeriesFromRawMetrics labels a missing key "" — collapsing
82
+ * every Swarm container into ONE series with an empty label. Do not copy
83
+ * that spelling.
47
84
  */
48
85
 
49
86
  export function buildDockerMonitorStep(args: {
@@ -103,59 +140,12 @@ export function buildDockerOfflineCriteriaInstance(args: {
103
140
  incidentDescription?: string;
104
141
  criteriaName?: string;
105
142
  criteriaDescription?: string;
143
+ metricAggregationType?: EvaluateOverTimeType | undefined;
106
144
  }): MonitorCriteriaInstance {
107
- const instance: MonitorCriteriaInstance = new MonitorCriteriaInstance();
108
-
109
- const incidentTitle: string =
110
- args.incidentTitle || `${args.monitorName} - Alert Triggered`;
111
- const incidentDescription: string =
112
- args.incidentDescription ||
113
- `${args.monitorName} has triggered an alert condition. See root cause for detailed Docker container information.`;
114
-
115
- instance.data = {
116
- id: ObjectID.generate().toString(),
117
- monitorStatusId: args.offlineMonitorStatusId,
118
- filterCondition: FilterCondition.Any,
119
- filters: [
120
- {
121
- checkOn: CheckOn.MetricValue,
122
- filterType: args.filterType,
123
- metricMonitorOptions: {
124
- metricAggregationType: EvaluateOverTimeType.AnyValue,
125
- metricAlias: args.metricAlias,
126
- },
127
- value: args.value,
128
- },
129
- ],
130
- incidents: [
131
- {
132
- title: incidentTitle,
133
- description: incidentDescription,
134
- incidentSeverityId: args.incidentSeverityId,
135
- autoResolveIncident: true,
136
- id: ObjectID.generate().toString(),
137
- onCallPolicyIds: [],
138
- },
139
- ],
140
- alerts: [
141
- {
142
- title: incidentTitle,
143
- description: incidentDescription,
144
- alertSeverityId: args.alertSeverityId,
145
- autoResolveAlert: true,
146
- id: ObjectID.generate().toString(),
147
- onCallPolicyIds: [],
148
- },
149
- ],
150
- changeMonitorStatus: true,
151
- createIncidents: true,
152
- createAlerts: true,
153
- name: args.criteriaName || `${args.monitorName} - Unhealthy`,
154
- description:
155
- args.criteriaDescription || `Criteria for detecting unhealthy state.`,
156
- };
157
-
158
- return instance;
145
+ return buildUnhealthyCriteriaInstance({
146
+ ...args,
147
+ resourceNoun: "container",
148
+ });
159
149
  }
160
150
 
161
151
  export function buildDockerOnlineCriteriaInstance(args: {
@@ -163,34 +153,12 @@ export function buildDockerOnlineCriteriaInstance(args: {
163
153
  metricAlias: string;
164
154
  filterType: FilterType;
165
155
  value: number;
156
+ recoveryValue?: number | undefined;
157
+ marginFraction?: number | undefined;
158
+ isBinaryMetric?: boolean | undefined;
159
+ metricAggregationType?: EvaluateOverTimeType | undefined;
166
160
  }): MonitorCriteriaInstance {
167
- const instance: MonitorCriteriaInstance = new MonitorCriteriaInstance();
168
-
169
- instance.data = {
170
- id: ObjectID.generate().toString(),
171
- monitorStatusId: args.onlineMonitorStatusId,
172
- filterCondition: FilterCondition.Any,
173
- filters: [
174
- {
175
- checkOn: CheckOn.MetricValue,
176
- filterType: args.filterType,
177
- metricMonitorOptions: {
178
- metricAggregationType: EvaluateOverTimeType.AnyValue,
179
- metricAlias: args.metricAlias,
180
- },
181
- value: args.value,
182
- },
183
- ],
184
- incidents: [],
185
- alerts: [],
186
- changeMonitorStatus: true,
187
- createIncidents: false,
188
- createAlerts: false,
189
- name: "Healthy",
190
- description: "Criteria for healthy state.",
191
- };
192
-
193
- return instance;
161
+ return buildHealthyCriteriaInstance(args);
194
162
  }
195
163
 
196
164
  export function buildDockerMonitorConfig(args: {
@@ -234,13 +202,167 @@ export function buildDockerMonitorConfig(args: {
234
202
  };
235
203
  }
236
204
 
205
+ /*
206
+ * Two queries over the SAME cumulative counter, differenced per bucket.
207
+ *
208
+ * Some Docker signals are monotonic LIFETIME counters, not levels.
209
+ * `container.cpu.throttling_data.throttled_time` is the total nanoseconds
210
+ * the cgroup has ever been throttled; `container.restarts` is Docker's
211
+ * lifetime RestartCount. Thresholding either one directly has two failure
212
+ * modes, and BOTH shipped:
213
+ *
214
+ * - it fires on history. A container throttled once an hour ago, or that
215
+ * crash-looped last week, still reports a non-zero lifetime total
216
+ * forever — so "> 0" / "> 5" is true for essentially every container
217
+ * that has ever had a bad day. Sustained evaluation makes this worse,
218
+ * not better: every per-minute bucket of a lifetime counter breaches.
219
+ * - it can never recover. A monotonic counter cannot come back down, so
220
+ * the complementary healthy comparison ("= 0", "<= 4.5") is unreachable
221
+ * by construction. The alert stays open until a human closes it, and
222
+ * the next evaluation reopens it.
223
+ *
224
+ * The alerting path has no rate operator. `transformAsRate` on
225
+ * MetricQueryConfigData is CHART-only (MetricCharts.tsx is its only reader;
226
+ * monitorDocker never looks at it), and `transformValue` is a function, so
227
+ * it cannot survive the JSON round-trip a monitor step takes through
228
+ * Postgres. Nothing between ingest and alerting differences a cumulative
229
+ * OTLP sum either — OtelMetricsIngestService only RECORDS
230
+ * `aggregationTemporality`/`isMonotonic` so the browser can suggest a rate
231
+ * view. So the delta has to be built from what the worker does honour: two
232
+ * queries over the same metric, one Max and one Min, plus a formula
233
+ * subtracting them. `aggregatePerSeriesFromRawMetrics` buckets rows per
234
+ * (series, minute) using EACH query's own aggregation, so `max - min` is
235
+ * the counter's increase WITHIN each minute, and the criteria's
236
+ * `EvaluateOverTimeType.Sum` totals those increases across the window.
237
+ *
238
+ * READ THE THRESHOLD AGAINST THE AGENT'S SCRAPE INTERVAL. Two consequences:
239
+ *
240
+ * 1. The delta only sees growth BETWEEN samples inside one bucket. The
241
+ * shipped agent scrapes every 30s
242
+ * (DockerAgent/otel-collector-config.yaml), giving exactly two samples
243
+ * per one-minute bucket, so roughly HALF the window's growth is
244
+ * counted. That is not a rounding error — every threshold below is
245
+ * effectively "about twice this much real activity". It only ever
246
+ * UNDERCOUNTS, so ordinary data cannot manufacture a breach. Do not
247
+ * raise a threshold to "compensate"; it is already compensated for.
248
+ * 2. At a scrape interval of 60s or slower each bucket holds a single
249
+ * sample, `max - min` is identically 0, and every template built on
250
+ * this helper stops alerting entirely, silently. Anyone raising
251
+ * `collection_interval` past 30s has to revisit these.
252
+ *
253
+ * It CAN spike on a counter RESET. A container restart recreates the
254
+ * cgroup, so a bucket straddling the restart sees [large, small] and
255
+ * reports the whole pre-restart lifetime total as one minute of growth — a
256
+ * spurious alert that clears itself once that minute leaves the rolling
257
+ * window. Prometheus-style reset detection would need consecutive raw
258
+ * samples the worker never exposes, so this is accepted rather than fixed.
259
+ * It is bounded, unlike the permanent alert it replaces.
260
+ *
261
+ * If the formula fails to evaluate, appendFormulaResults pushes an empty
262
+ * result and NEITHER criteria fires (NoDataPolicy.Ignore): the monitor
263
+ * holds its previous status rather than flipping.
264
+ */
265
+ export function buildDockerDeltaMonitorConfig(args: {
266
+ hostIdentifier: string;
267
+ metricName: string;
268
+ maxAlias: string;
269
+ minAlias: string;
270
+ resultAlias: string;
271
+ resultLegend: string;
272
+ /*
273
+ * A LABEL only, and only safe because MetricResultUnitConverter converts
274
+ * QUERY results and never formula results, and MetricMonitorCriteria
275
+ * defaults `thresholdUnit` to the formula's own `legendUnit` — so sample
276
+ * and threshold units match and no conversion runs. Leave it undefined
277
+ * for a dimensionless count.
278
+ */
279
+ resultLegendUnit?: string | undefined;
280
+ /*
281
+ * Applied to the raw delta INSIDE the formula, e.g. 1000000 to express a
282
+ * nanosecond counter's growth in milliseconds. Scaled in the formula
283
+ * rather than via `legendUnit` for exactly the reason above: a formula's
284
+ * legendUnit converts nothing.
285
+ */
286
+ scaleDivisor?: number | undefined;
287
+ rollingTime: RollingTime;
288
+ groupByAttributeKey?: string | undefined;
289
+ }): MonitorStepDockerMonitor {
290
+ const buildQueryConfig: (
291
+ alias: string,
292
+ aggregationType: MetricsAggregationType,
293
+ ) => any = (alias: string, aggregationType: MetricsAggregationType): any => {
294
+ return {
295
+ metricAliasData: {
296
+ metricVariable: alias,
297
+ title: alias,
298
+ description: alias,
299
+ legend: alias,
300
+ // Unset so MetricResultUnitConverter passes the raw value through.
301
+ legendUnit: undefined,
302
+ },
303
+ metricQueryData: {
304
+ filterData: {
305
+ metricName: args.metricName,
306
+ attributes: {},
307
+ aggegationType: aggregationType,
308
+ aggregateBy: {},
309
+ },
310
+ /*
311
+ * Both halves MUST group identically. buildSeriesBreakdown joins
312
+ * the two queries by series fingerprint, so a key only one side
313
+ * carries splits them into fingerprints that never meet, the
314
+ * formula evaluates against an empty operand, and the monitor
315
+ * silently stops alerting.
316
+ */
317
+ ...(args.groupByAttributeKey
318
+ ? { groupByAttributeKeys: [args.groupByAttributeKey] }
319
+ : {}),
320
+ },
321
+ };
322
+ };
323
+
324
+ const expression: string = args.scaleDivisor
325
+ ? `(${args.maxAlias} - ${args.minAlias}) / ${args.scaleDivisor}`
326
+ : `${args.maxAlias} - ${args.minAlias}`;
327
+
328
+ return {
329
+ hostIdentifier: args.hostIdentifier,
330
+ containerFilters: {},
331
+ metricViewConfig: {
332
+ /*
333
+ * The Max query is FIRST so `queryConfigs[0]` still describes the
334
+ * underlying metric, the way it does for a single-query template.
335
+ */
336
+ queryConfigs: [
337
+ buildQueryConfig(args.maxAlias, MetricsAggregationType.Max),
338
+ buildQueryConfig(args.minAlias, MetricsAggregationType.Min),
339
+ ],
340
+ formulaConfigs: [
341
+ {
342
+ metricAliasData: {
343
+ metricVariable: args.resultAlias,
344
+ title: args.resultLegend,
345
+ description: args.resultLegend,
346
+ legend: args.resultLegend,
347
+ legendUnit: args.resultLegendUnit,
348
+ },
349
+ metricFormulaData: {
350
+ metricFormula: expression,
351
+ },
352
+ },
353
+ ],
354
+ },
355
+ rollingTime: args.rollingTime,
356
+ };
357
+ }
358
+
237
359
  // --- Template Definitions ---
238
360
 
239
361
  const highCpuTemplate: DockerAlertTemplate = {
240
362
  id: "docker-high-cpu",
241
363
  name: "High Container CPU Usage",
242
364
  description:
243
- "Alert when container CPU usage exceeds 80% sustained. One alert per container.",
365
+ "Alert when a container's CPU usage stays above 80% of ONE CPU core for the whole window. This is the same number `docker stats` prints, so 100% is one full core and a container spread across several cores reads above 100. One alert per container.",
244
366
  category: "Resource",
245
367
  severity: "Warning",
246
368
  getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
@@ -268,11 +390,11 @@ const highCpuTemplate: DockerAlertTemplate = {
268
390
  metricAlias,
269
391
  filterType: FilterType.GreaterThan,
270
392
  value: 80,
271
- incidentTitle: `[Docker] High CPU Usage (>80%) - ${args.monitorName}`,
272
- incidentDescription: `A Docker container's CPU usage has exceeded 80%. Sustained high CPU usage can cause performance degradation and throttling. Check the root cause for the specific container and host details.`,
273
- criteriaName: "High CPU - Usage > 80%",
393
+ incidentTitle: `[Docker] High CPU Usage (>80% of one core)${dockerTitleSuffix(args)}`,
394
+ incidentDescription: `A Docker container's CPU usage stayed above 80% of a single CPU core for the whole evaluation window. \`container.cpu.utilization\` is the figure \`docker stats\` reports: 100% is one full core, NOT 100% of the host, so a container using two cores reads 200. On a multi-core host this threshold is therefore an absolute CPU budget rather than a share of the machine — raise it if this container is meant to use more than one core. Check the root cause for the container and the observed values.`,
395
+ criteriaName: "High CPU - Usage > 80% of one core",
274
396
  criteriaDescription:
275
- "Triggers when any container's CPU usage exceeds 80% over the monitoring window.",
397
+ "Triggers when a container's CPU usage stays above 80% of one CPU core across the monitoring window.",
276
398
  }),
277
399
  onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
278
400
  onlineMonitorStatusId: args.onlineMonitorStatusId,
@@ -288,7 +410,7 @@ const highMemoryTemplate: DockerAlertTemplate = {
288
410
  id: "docker-high-memory",
289
411
  name: "High Container Memory Usage",
290
412
  description:
291
- "Alert when container memory usage exceeds 85% of its limit. One alert per container.",
413
+ "Alert when container memory usage stays above 85% of its memory limit — or of HOST memory, when the container was started without a limit. One alert per container.",
292
414
  category: "Resource",
293
415
  severity: "Warning",
294
416
  getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
@@ -316,11 +438,11 @@ const highMemoryTemplate: DockerAlertTemplate = {
316
438
  metricAlias,
317
439
  filterType: FilterType.GreaterThan,
318
440
  value: 85,
319
- incidentTitle: `[Docker] High Memory Usage (>85%) - ${args.monitorName}`,
320
- incidentDescription: `A Docker container's memory usage has exceeded 85% of its limit. High memory usage can lead to OOM kills and container restarts. Check the root cause for the specific container and host details.`,
441
+ incidentTitle: `[Docker] High Memory Usage (>85%)${dockerTitleSuffix(args)}`,
442
+ incidentDescription: `A Docker container's memory usage stayed above 85% for the whole evaluation window. \`container.memory.percent\` divides by the container's memory limit when one is set and by the HOST's total memory when it is not, so check whether this container was started with \`--memory\` before treating this as an impending OOM kill: an unlimited container at 86% is using 86% of the machine and will not be OOM-killed for hitting a limit that does not exist. Check the root cause for the container and the observed values.`,
321
443
  criteriaName: "High Memory - Usage > 85%",
322
444
  criteriaDescription:
323
- "Triggers when any container's memory usage exceeds 85% over the monitoring window.",
445
+ "Triggers when a container's memory usage stays above 85% of its limit (or of host memory when unlimited) across the monitoring window.",
324
446
  }),
325
447
  onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
326
448
  onlineMonitorStatusId: args.onlineMonitorStatusId,
@@ -336,19 +458,44 @@ const containerRestartLoopTemplate: DockerAlertTemplate = {
336
458
  id: "docker-restart-loop",
337
459
  name: "Container Restart Loop",
338
460
  description:
339
- "Alert when a container has restarted more than 5 times, indicating a crash loop. One alert per container.",
461
+ "Alert when a container's restart count climbs by more than 3 within fifteen minutes, indicating a crash loop. One alert per container.",
340
462
  category: "Container",
341
463
  severity: "Critical",
342
464
  getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
343
465
  const metricAlias: string = "container_restarts";
344
466
 
345
467
  return buildDockerMonitorStep({
346
- dockerMonitor: buildDockerMonitorConfig({
468
+ /*
469
+ * `container.restarts` is Docker's LIFETIME RestartCount, not a
470
+ * windowed count, and nothing in the pipeline deltas it. Comparing it
471
+ * to a constant asks "has this container ever crash-looped" — true
472
+ * forever once true, and unrecoverable against a counter that only
473
+ * goes up. The loop signal is how much the counter GREW. See
474
+ * buildDockerDeltaMonitorConfig.
475
+ */
476
+ dockerMonitor: buildDockerDeltaMonitorConfig({
347
477
  hostIdentifier: args.hostIdentifier,
348
478
  metricName: "container.restarts",
349
- metricAlias,
350
- rollingTime: RollingTime.Past5Minutes,
351
- aggregationType: MetricsAggregationType.Max,
479
+ maxAlias: "container_restarts_max",
480
+ minAlias: "container_restarts_min",
481
+ resultAlias: metricAlias,
482
+ resultLegend: "Container Restarts (in window)",
483
+ /*
484
+ * Deliberately no resultLegendUnit: a restart count is
485
+ * dimensionless, and MetricMonitorCriteria reads a formula's
486
+ * legendUnit as the sample unit to convert from.
487
+ */
488
+ /*
489
+ * Fifteen minutes, not five. The per-minute Max-minus-Min delta is
490
+ * a LOWER BOUND: the agent scrapes every 30s and buckets are one
491
+ * minute, so an isolated restart is only counted when it lands
492
+ * between the two samples of the SAME minute — roughly half are
493
+ * missed. Bursts inside one 30s gap are counted in full, and
494
+ * Docker's restart backoff (doubling, capped at 60s) puts a real
495
+ * crash loop at ~20 restarts per fifteen minutes, so the threshold
496
+ * below still clears with room to spare.
497
+ */
498
+ rollingTime: RollingTime.Past15Minutes,
352
499
  groupByAttributeKey: "resource.container.name",
353
500
  }),
354
501
  offlineCriteriaInstance: buildDockerOfflineCriteriaInstance({
@@ -358,18 +505,35 @@ const containerRestartLoopTemplate: DockerAlertTemplate = {
358
505
  monitorName: args.monitorName,
359
506
  metricAlias,
360
507
  filterType: FilterType.GreaterThan,
361
- value: 5,
362
- incidentTitle: `[Docker] Container Restart Loop Detected - ${args.monitorName}`,
363
- incidentDescription: `A Docker container is repeatedly crashing and restarting. The container restart count has exceeded 5. This indicates a crash loop that needs immediate attention. Check the root cause for the specific container, exit code, and logs.`,
364
- criteriaName: "Restart Loop - Restarts > 5",
508
+ value: 3,
509
+ /*
510
+ * Sum over the window, not the sustained AllValues default: each
511
+ * sample is ONE MINUTE'S restart increment, and most minutes of a
512
+ * crash loop are zero, so "every bucket breached" is unreachable.
513
+ * The window total is the loop count. This is the semantics the
514
+ * docs have always described for this template ("> 3 / Sum" in
515
+ * App/FeatureSet/Docs/Content/en/monitor/docker-monitor.md) and
516
+ * which the code never implemented.
517
+ */
518
+ metricAggregationType: EvaluateOverTimeType.Sum,
519
+ incidentTitle: `[Docker] Container Restart Loop Detected${dockerTitleSuffix(args)}`,
520
+ incidentDescription: `A Docker container restarted more than 3 times in the last fifteen minutes — it is crash-looping, not recovering from a one-off failure. Check the root cause for the specific container, then read that container's logs and its restart policy.`,
521
+ criteriaName: "Restart Loop - Restarts > 3 in 15 min",
365
522
  criteriaDescription:
366
- "Triggers when any container restart count exceeds 5 in the monitoring window.",
523
+ "Triggers when a container's restart counter increases by more than 3 across the monitoring window.",
367
524
  }),
368
525
  onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
369
526
  onlineMonitorStatusId: args.onlineMonitorStatusId,
370
527
  metricAlias,
371
528
  filterType: FilterType.LessThanOrEqualTo,
372
- value: 5,
529
+ value: 3,
530
+ /*
531
+ * Must match the unhealthy side. A pair evaluating the same alias
532
+ * under different window aggregations is not complementary, and the
533
+ * dead band derived from 3 (recover at 2.7) would be measuring a
534
+ * different quantity from the one that fired.
535
+ */
536
+ metricAggregationType: EvaluateOverTimeType.Sum,
373
537
  }),
374
538
  });
375
539
  },
@@ -379,24 +543,30 @@ const highCpuThrottlingTemplate: DockerAlertTemplate = {
379
543
  id: "docker-cpu-throttling",
380
544
  name: "Container CPU Throttling",
381
545
  description:
382
- "Alert when a container is being CPU-throttled, indicating it needs more CPU resources. One alert per container.",
546
+ "Alert when a container accumulates more than a second of CPU throttling in five minutes, meaning it is hitting its CPU limit. One alert per container.",
383
547
  category: "Resource",
384
548
  severity: "Warning",
385
549
  getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
386
550
  const metricAlias: string = "cpu_throttled";
387
551
 
388
552
  return buildDockerMonitorStep({
389
- dockerMonitor: buildDockerMonitorConfig({
553
+ /*
554
+ * throttled_time is a lifetime NANOSECOND counter, so this template
555
+ * alerts on how much it GREW in the window, not on its value. See
556
+ * buildDockerDeltaMonitorConfig for why the value itself is unusable,
557
+ * and for what the delta does and does not see.
558
+ */
559
+ dockerMonitor: buildDockerDeltaMonitorConfig({
390
560
  hostIdentifier: args.hostIdentifier,
391
561
  metricName: "container.cpu.throttling_data.throttled_time",
392
- metricAlias,
562
+ maxAlias: "cpu_throttled_max",
563
+ minAlias: "cpu_throttled_min",
564
+ resultAlias: metricAlias,
565
+ resultLegend: "CPU Throttled Time",
566
+ resultLegendUnit: "ms",
567
+ // The counter is nanoseconds; report the growth in milliseconds.
568
+ scaleDivisor: 1000000,
393
569
  rollingTime: RollingTime.Past5Minutes,
394
- /*
395
- * Max WITHIN each container's series, so throttled time is never
396
- * summed across containers — grouping by container name attributes
397
- * the throttling to the container that actually suffered it.
398
- */
399
- aggregationType: MetricsAggregationType.Max,
400
570
  groupByAttributeKey: "resource.container.name",
401
571
  }),
402
572
  offlineCriteriaInstance: buildDockerOfflineCriteriaInstance({
@@ -406,18 +576,36 @@ const highCpuThrottlingTemplate: DockerAlertTemplate = {
406
576
  monitorName: args.monitorName,
407
577
  metricAlias,
408
578
  filterType: FilterType.GreaterThan,
409
- value: 0,
410
- incidentTitle: `[Docker] CPU Throttling Detected - ${args.monitorName}`,
411
- incidentDescription: `A Docker container is being CPU-throttled. This means the container is hitting its CPU limit and performance is degraded. Consider increasing the CPU limit or optimizing the application.`,
412
- criteriaName: "CPU Throttling - Throttled Time > 0",
579
+ value: 1000,
580
+ /*
581
+ * Sum, not the AllValues default. Each sample here is ONE MINUTE'S
582
+ * growth, so "how much throttling in the window" is their total.
583
+ * AllValues would instead demand a full second of throttling in
584
+ * every single minute — a much rarer event than the one this
585
+ * template is named for, so the default would quietly disable it.
586
+ * Note the threshold is MEASURED, not real, throttling: at the
587
+ * agent's 30s scrape roughly half is captured, so 1000 ms here is
588
+ * about two seconds of actual throttling per five minutes.
589
+ */
590
+ metricAggregationType: EvaluateOverTimeType.Sum,
591
+ incidentTitle: `[Docker] CPU Throttling Detected${dockerTitleSuffix(args)}`,
592
+ incidentDescription: `A Docker container accumulated more than 1000 ms of CPU throttling in the last 5 minutes. The container is hitting its CPU limit and the kernel's CFS quota is stalling it — throttling is silent, so it surfaces as latency rather than as an error. Consider raising the container's CPU limit or reducing its work. Check the root cause for the container and the throttled time observed.`,
593
+ criteriaName: "CPU Throttling - Throttled Time > 1000 ms per 5 min",
413
594
  criteriaDescription:
414
- "Triggers when any container reports CPU throttling.",
595
+ "Triggers when a container's CPU throttled time grows by more than 1000 ms over the monitoring window.",
415
596
  }),
416
597
  onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
417
598
  onlineMonitorStatusId: args.onlineMonitorStatusId,
418
599
  metricAlias,
419
- filterType: FilterType.EqualTo,
420
- value: 0,
600
+ filterType: FilterType.LessThanOrEqualTo,
601
+ value: 1000,
602
+ /*
603
+ * Must match the unhealthy side. A pair evaluating the same alias
604
+ * under different window aggregations is not complementary, and the
605
+ * dead band derived from 1000 (recover at 900) would be measuring a
606
+ * different quantity from the one that fired.
607
+ */
608
+ metricAggregationType: EvaluateOverTimeType.Sum,
421
609
  }),
422
610
  });
423
611
  },
@@ -427,7 +615,7 @@ const highProcessCountTemplate: DockerAlertTemplate = {
427
615
  id: "docker-high-pids",
428
616
  name: "High Container Process Count",
429
617
  description:
430
- "Alert when a container has an unusually high number of processes, which may indicate a fork bomb or resource leak. One alert per container.",
618
+ "Alert when a container's task count (processes PLUS threads) stays above 2000, which may indicate a fork bomb, a thread leak, or an unbounded worker pool. One alert per container.",
431
619
  category: "Container",
432
620
  severity: "Warning",
433
621
  getMonitorStep: (args: DockerAlertTemplateArgs): MonitorStep => {
@@ -449,23 +637,45 @@ const highProcessCountTemplate: DockerAlertTemplate = {
449
637
  monitorName: args.monitorName,
450
638
  metricAlias,
451
639
  filterType: FilterType.GreaterThan,
452
- value: 500,
453
- incidentTitle: `[Docker] High Process Count (>500) - ${args.monitorName}`,
454
- incidentDescription: `A Docker container has an unusually high number of processes (>500). This may indicate a fork bomb, resource leak, or misconfigured application. Check the container for runaway processes.`,
455
- criteriaName: "High PIDs - Count > 500",
640
+ value: 2000,
641
+ incidentTitle: `[Docker] High Process/Thread Count (>2000)${dockerTitleSuffix(args)}`,
642
+ incidentDescription: `A Docker container held more than 2000 tasks for the whole evaluation window. \`container.pids.count\` reads the cgroup pids controller, which counts TASKS — kernel threads as well as processes — so a JVM, an nginx with a large worker pool, or a Go binary sits far above its process count. Sustained above 2000 usually means a fork bomb, a thread leak, or a pool sized without a ceiling. Check the root cause for the container and the observed counts.`,
643
+ criteriaName: "High PIDs - Task Count > 2000",
456
644
  criteriaDescription:
457
- "Triggers when container process count exceeds 500.",
645
+ "Triggers when a container's task (process + thread) count stays above 2000 across the monitoring window.",
458
646
  }),
459
647
  onlineCriteriaInstance: buildDockerOnlineCriteriaInstance({
460
648
  onlineMonitorStatusId: args.onlineMonitorStatusId,
461
649
  metricAlias,
462
650
  filterType: FilterType.LessThanOrEqualTo,
463
- value: 500,
651
+ value: 2000,
464
652
  }),
465
653
  });
466
654
  },
467
655
  };
468
656
 
657
+ /*
658
+ * KNOWN INERT — do not copy this shape, and do not assume it gives adopters
659
+ * container-down coverage.
660
+ *
661
+ * `container.uptime` is seconds-since-start from the docker_stats receiver,
662
+ * which only scrapes RUNNING containers, so the value is a positive double
663
+ * and `= 0` is unreachable. Absence cannot substitute either: a stopped
664
+ * container emits no datapoint, so it produces no series, and
665
+ * MonitorCriteriaEvaluator discards a grouped criteria whose per-series
666
+ * match list is empty — `onNoDataPolicy: Trigger` would be inert too. The
667
+ * worker's only absent-series injectors are host- and IoT-device-scoped
668
+ * (injectExpectedAbsentHostSeries / injectExpectedAbsentIoTDeviceSeries,
669
+ * gated by HostAbsenceSeries.getHostAbsenceGroupByKey).
670
+ *
671
+ * Real per-container down detection needs an absent-CONTAINER injector in
672
+ * App/FeatureSet/Workers/Jobs/TelemetryMonitor/MonitorTelemetryMonitor.ts.
673
+ * Until that exists this template cannot fire. Removing it is the honest
674
+ * alternative, but that also touches TemplateGroupByKeys.test.ts and six
675
+ * localised docs tables, so it is deliberately left for a follow-up rather
676
+ * than half-done here. PodmanAlertTemplates and DockerSwarmAlertTemplates
677
+ * carry the identical inert design.
678
+ */
469
679
  const containerUptimeTemplate: DockerAlertTemplate = {
470
680
  id: "docker-container-down",
471
681
  name: "Container Down (Low Uptime)",
@@ -493,7 +703,7 @@ const containerUptimeTemplate: DockerAlertTemplate = {
493
703
  metricAlias,
494
704
  filterType: FilterType.EqualTo,
495
705
  value: 0,
496
- incidentTitle: `[Docker] Container Down - ${args.monitorName}`,
706
+ incidentTitle: `[Docker] Container Down${dockerTitleSuffix(args)}`,
497
707
  incidentDescription: `A Docker container has stopped running. The container uptime is zero, indicating it has crashed, been stopped, or been removed. Check the container status and logs for details.`,
498
708
  criteriaName: "Container Down - Uptime = 0",
499
709
  criteriaDescription: "Triggers when container uptime drops to zero.",