@oneuptime/common 12.0.33 → 13.0.0

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 (877) 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/GlobalConfig.ts +12 -12
  6. package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
  7. package/Models/DatabaseModels/InventoryItem.ts +44 -1
  8. package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
  9. package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
  10. package/Models/DatabaseModels/NetworkDevice.ts +126 -0
  11. package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +77 -3
  12. package/Models/DatabaseModels/RumApplication.ts +6 -6
  13. package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
  14. package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
  15. package/Models/DatabaseModels/TeamCustomField.ts +77 -3
  16. package/Models/DatabaseModels/TeamMember.ts +0 -9
  17. package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
  18. package/Models/DatabaseModels/TeamPermission.ts +3 -24
  19. package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
  20. package/Models/DatabaseModels/UserTelegram.ts +0 -4
  21. package/Scripts/benchmark-fanin-capacity.js +181 -0
  22. package/Server/API/TelemetryAPI.ts +1284 -164
  23. package/Server/API/UserNotificationSettingAPI.ts +55 -0
  24. package/Server/API/UserTelegramAPI.ts +48 -4
  25. package/Server/EnvironmentConfig.ts +82 -18
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.ts +25 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  32. package/Server/Infrastructure/QueueWorker.ts +20 -14
  33. package/Server/Infrastructure/Redis.ts +8 -8
  34. package/Server/Infrastructure/Semaphore.ts +2 -0
  35. package/Server/Infrastructure/Status.ts +10 -4
  36. package/Server/Middleware/TelemetryIngest.ts +453 -7
  37. package/Server/Services/AccessTokenService.ts +1 -0
  38. package/Server/Services/AlertCustomFieldService.ts +98 -0
  39. package/Server/Services/AlertService.ts +37 -0
  40. package/Server/Services/ApiKeyPermissionService.ts +461 -29
  41. package/Server/Services/CustomFieldMappingService.ts +879 -0
  42. package/Server/Services/DatabaseService.ts +65 -13
  43. package/Server/Services/GlobalConfigService.ts +194 -0
  44. package/Server/Services/IncidentCustomFieldService.ts +98 -0
  45. package/Server/Services/IncidentService.ts +35 -0
  46. package/Server/Services/InventoryItemService.ts +31 -1
  47. package/Server/Services/MetricService.ts +194 -0
  48. package/Server/Services/MonitorService.ts +32 -0
  49. package/Server/Services/MonitorTemplateService.ts +140 -19
  50. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +427 -66
  51. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +87 -2
  52. package/Server/Services/NetworkDeviceService.ts +69 -0
  53. package/Server/Services/ProjectService.ts +22 -0
  54. package/Server/Services/RoutineEmailSettingsService.ts +73 -0
  55. package/Server/Services/RumSessionReplayViewService.ts +104 -24
  56. package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
  57. package/Server/Services/ScheduledMaintenanceService.ts +32 -0
  58. package/Server/Services/TeamMemberService.ts +78 -0
  59. package/Server/Services/TeamPermissionService.ts +235 -3
  60. package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
  61. package/Server/Services/UserNotificationRuleService.ts +76 -25
  62. package/Server/Services/UserNotificationSettingService.ts +34 -6
  63. package/Server/Services/UserTelegramService.ts +326 -5
  64. package/Server/Types/Database/Permissions/ReadPermission.ts +45 -5
  65. package/Server/Types/Database/QueryHelper.ts +2 -0
  66. package/Server/Types/Database/QueryUtil.ts +56 -0
  67. package/Server/Types/Markdown.ts +93 -1
  68. package/Server/Utils/APIKey/AccessPermission.ts +5 -2
  69. package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
  70. package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
  71. package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
  72. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +82 -17
  73. package/Server/Utils/DataSource/EgressGuard.ts +177 -8
  74. package/Server/Utils/EmailRollup/EmailRollupConstants.ts +38 -5
  75. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +67 -5
  76. package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +2 -2
  77. package/Server/Utils/FrontendEnvironment.ts +40 -0
  78. package/Server/Utils/LogRedaction.ts +20 -0
  79. package/Server/Utils/Logger.ts +11 -0
  80. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +394 -86
  81. package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
  82. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +31 -5
  83. package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
  84. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +312 -52
  85. package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +82 -9
  86. package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +16 -7
  87. package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +29 -17
  88. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +107 -48
  89. package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
  90. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +29 -0
  91. package/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.ts +158 -0
  92. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +27 -0
  93. package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -0
  94. package/Server/Utils/SSRFProtection.ts +217 -10
  95. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
  96. package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
  97. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
  98. package/Server/Utils/StartServer.ts +2 -17
  99. package/Server/Utils/TelegramVerificationToken.ts +185 -0
  100. package/Server/Utils/Telemetry/EntityRegistry.ts +11 -1
  101. package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
  102. package/Server/Utils/Telemetry/TelemetryEntity.ts +83 -9
  103. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
  104. package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
  105. package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
  106. package/Server/Utils/VM/VMAPI.ts +1 -0
  107. package/Server/Utils/VM/VMRunner.ts +975 -95
  108. package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
  109. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +32 -0
  110. package/Tests/App/Dashboard/AdoptedDeviceDrawer.test.tsx +374 -0
  111. package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
  112. package/Tests/App/Dashboard/DashboardLabelVariables.test.tsx +580 -0
  113. package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +438 -0
  114. package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +5 -2
  115. package/Tests/App/Dashboard/DeviceAttachmentCard.test.tsx +273 -0
  116. package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +505 -0
  117. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +468 -0
  118. package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +163 -0
  119. package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +401 -0
  120. package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +232 -0
  121. package/Tests/App/Dashboard/InventoryItems.test.tsx +201 -0
  122. package/Tests/App/Dashboard/InventoryTypeAndStatusFacets.test.tsx +798 -0
  123. package/Tests/App/Dashboard/NetworkTopologyLiveView.test.tsx +320 -0
  124. package/Tests/App/Dashboard/NetworkTopologyToolbar.test.tsx +275 -0
  125. package/Tests/App/Dashboard/OnCallCalendarFeedEmptyState.test.tsx +975 -0
  126. package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +63 -0
  127. package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +626 -0
  128. package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +348 -0
  129. package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +331 -0
  130. package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +603 -0
  131. package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +324 -0
  132. package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +13 -4
  133. package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
  134. package/Tests/App/StatusPage/StatusPageOidcOrigin.test.tsx +223 -0
  135. package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
  136. package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
  137. package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
  138. package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
  139. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
  140. package/Tests/Models/InventoryItemStatus.test.ts +147 -0
  141. package/Tests/Models/NetworkDeviceMacAddressColumn.test.ts +294 -0
  142. package/Tests/ResponsiveVisibility.test.ts +115 -0
  143. package/Tests/ResponsiveVisibility.ts +183 -0
  144. package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +129 -0
  145. package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
  146. package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
  147. package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
  148. package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
  149. package/Tests/Server/EnvironmentConfigValkey.test.ts +227 -0
  150. package/Tests/Server/Infrastructure/Postgres/AddMacAddressToNetworkDeviceMigration.test.ts +365 -0
  151. package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +241 -0
  152. package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
  153. package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
  154. package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
  155. package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
  156. package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +265 -0
  157. package/Tests/Server/Middleware/HttpMetricsMiddleware.test.ts +382 -0
  158. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
  159. package/Tests/Server/Middleware/SCIMAuthorization.test.ts +525 -0
  160. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
  161. package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
  162. package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
  163. package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
  164. package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
  165. package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
  166. package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
  167. package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +291 -56
  168. package/Tests/Server/Services/DatabaseServiceSortTiebreaker.test.ts +151 -0
  169. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
  170. package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
  171. package/Tests/Server/Services/InventoryItemManualCreate.test.ts +105 -0
  172. package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +178 -0
  173. package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
  174. package/Tests/Server/Services/MonitorTemplateServiceCustomFieldSync.test.ts +502 -0
  175. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1351 -74
  176. package/Tests/Server/Services/NetworkDeviceDiscoveryScanRegistration.test.ts +520 -0
  177. package/Tests/Server/Services/NetworkDeviceMacAddressNormalization.test.ts +572 -0
  178. package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
  179. package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
  180. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
  181. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
  182. package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
  183. package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
  184. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -0
  185. package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +141 -0
  186. package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +18 -10
  187. package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
  188. package/Tests/Server/Types/Database/InventoryStatusPostgres.test.ts +368 -0
  189. package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +261 -14
  190. package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroups.test.ts +169 -0
  191. package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroupsPostgres.test.ts +297 -0
  192. package/Tests/Server/Types/Markdown.test.ts +194 -1
  193. package/Tests/Server/Types/Workflow/Components/IncomingWebhookUtils.test.ts +279 -0
  194. package/Tests/Server/Types/Workflow/Components/TextToJson.test.ts +212 -0
  195. package/Tests/Server/Utils/AI/SRE/Insights/FixRouting.test.ts +497 -0
  196. package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
  197. package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
  198. package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
  199. package/Tests/Server/Utils/CustomField/CustomFieldMappingRegistry.test.ts +436 -0
  200. package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
  201. package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +214 -0
  202. package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
  203. package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
  204. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +2 -2
  205. package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
  206. package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +10 -3
  207. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +77 -1
  208. package/Tests/Server/Utils/EventLoop.test.ts +359 -0
  209. package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
  210. package/Tests/Server/Utils/JsonWebToken.test.ts +30 -0
  211. package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
  212. package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
  213. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +242 -0
  214. package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +590 -0
  215. package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +29 -0
  216. package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
  217. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +30 -6
  218. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +246 -0
  219. package/Tests/Server/Utils/Monitor/MonitorCriteriaEmailEvalLogAgreement.test.ts +280 -0
  220. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +659 -8
  221. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +570 -0
  222. package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilderUnits.test.ts +30 -5
  223. package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageBuilderUnits.test.ts +68 -21
  224. package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +36 -19
  225. package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
  226. package/Tests/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.test.ts +573 -0
  227. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +317 -0
  228. package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
  229. package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
  230. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
  231. package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
  232. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
  233. package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
  234. package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
  235. package/Tests/Server/Utils/Telemetry/ContextSpanProcessor.test.ts +281 -0
  236. package/Tests/Server/Utils/Telemetry/InventoryDuplicateIdentity.test.ts +316 -0
  237. package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
  238. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +111 -8
  239. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
  240. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
  241. package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
  242. package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
  243. package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
  244. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
  245. package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
  246. package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
  247. package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
  248. package/Tests/Types/Database/IncludesAnyOfGroups.test.ts +106 -0
  249. package/Tests/Types/JSONFunctions.test.ts +300 -0
  250. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
  251. package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
  252. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
  253. package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
  254. package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
  255. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
  256. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
  257. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
  258. package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +190 -21
  259. package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
  260. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
  261. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
  262. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
  263. package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
  264. package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
  265. package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
  266. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
  267. package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
  268. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
  269. package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -0
  270. package/Tests/Types/NetworkAutomation/AutoImportRunMerge.test.ts +235 -0
  271. package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +66 -0
  272. package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +309 -1
  273. package/Tests/Types/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
  274. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
  275. package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
  276. package/Tests/Types/Telemetry/InventoryLiveness.test.ts +99 -0
  277. package/Tests/Types/WebsiteRequest.test.ts +285 -3
  278. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
  279. package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
  280. package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
  281. package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
  282. package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +160 -0
  283. package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
  284. package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
  285. package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
  286. package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
  287. package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
  288. package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
  289. package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
  290. package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
  291. package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
  292. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +28 -12
  293. package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
  294. package/Tests/UI/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
  295. package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
  296. package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
  297. package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
  298. package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
  299. package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
  300. package/Tests/UI/ReactRouterSingletonBuild.test.ts +133 -0
  301. package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
  302. package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
  303. package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
  304. package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
  305. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
  306. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
  307. package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
  308. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
  309. package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
  310. package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
  311. package/Tests/UI/Rum/ReplayHeader.test.tsx +719 -0
  312. package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
  313. package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
  314. package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
  315. package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +514 -0
  316. package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
  317. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
  318. package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
  319. package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
  320. package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
  321. package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
  322. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
  323. package/Tests/UI/Rum/ReplayTimeFormat.test.ts +94 -0
  324. package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
  325. package/Tests/UI/Rum/ReplayUi.test.tsx +559 -0
  326. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
  327. package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
  328. package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
  329. package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
  330. package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
  331. package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
  332. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +5 -0
  333. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +1 -0
  334. package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
  335. package/Tests/Utils/API.test.ts +308 -0
  336. package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +11 -1
  337. package/Tests/Utils/Dashboard/LabelVariable.test.ts +257 -0
  338. package/Tests/Utils/Dashboard/VariableUrlState.test.ts +144 -14
  339. package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
  340. package/Tests/Utils/MetricUnitUtil.test.ts +81 -0
  341. package/Tests/Utils/Monitor/DeviceMacLearningUtil.test.ts +497 -0
  342. package/Tests/Utils/Monitor/MetricValueFormatter.test.ts +546 -0
  343. package/Tests/Utils/Monitor/MonitorTemplateCustomFieldUtil.test.ts +218 -0
  344. package/Tests/Utils/Monitor/NetworkTopologyEndpointAdoption.test.ts +1755 -0
  345. package/Tests/Utils/NetworkAutomation/AutoImportRunChain.test.ts +320 -0
  346. package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -0
  347. package/Tests/Utils/Rum/ChunkMath.test.ts +83 -0
  348. package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
  349. package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
  350. package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
  351. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
  352. package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
  353. package/Tests/Utils/ValueFormatter.test.ts +148 -0
  354. package/Types/BaseDatabase/IncludesAnyOfGroups.ts +77 -0
  355. package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
  356. package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
  357. package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
  358. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
  359. package/Types/Dashboard/DashboardComponents/DashboardMonitorListComponent.ts +1 -0
  360. package/Types/Dashboard/DashboardVariable.ts +8 -0
  361. package/Types/Icon/IconProp.ts +1 -0
  362. package/Types/JSON.ts +4 -0
  363. package/Types/JSONFunctions.ts +205 -43
  364. package/Types/Monitor/CephAlertTemplates.ts +157 -195
  365. package/Types/Monitor/DockerAlertTemplates.ts +338 -128
  366. package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
  367. package/Types/Monitor/HostAlertTemplates.ts +302 -130
  368. package/Types/Monitor/IotAlertTemplates.ts +112 -104
  369. package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
  370. package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
  371. package/Types/Monitor/PodmanAlertTemplates.ts +116 -163
  372. package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
  373. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
  374. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
  375. package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
  376. package/Types/Monitor/RumAlertTemplates.ts +46 -7
  377. package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
  378. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
  379. package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
  380. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +13 -0
  381. package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
  382. package/Types/NetworkAutomation/RuleRunResult.ts +402 -13
  383. package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -0
  384. package/Types/Rum/SessionReplay.ts +209 -0
  385. package/Types/Rum/SessionReplayApi.ts +722 -0
  386. package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
  387. package/Types/Rum/SessionReplayConsentMode.ts +11 -7
  388. package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
  389. package/Types/Rum/SessionReplayHealth.ts +238 -0
  390. package/Types/SerializableObjectDictionary.ts +4 -0
  391. package/Types/Telemetry/InventoryLiveness.ts +56 -0
  392. package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
  393. package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
  394. package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
  395. package/Types/WebsiteRequest.ts +85 -3
  396. package/UI/Components/CSVFileUpload/CSVFileUpload.tsx +9 -2
  397. package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
  398. package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
  399. package/UI/Components/Charts/Line/LineChart.tsx +13 -2
  400. package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
  401. package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
  402. package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
  403. package/UI/Components/Charts/Utils/XAxis.ts +217 -0
  404. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +189 -46
  405. package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
  406. package/UI/Components/Dashboard/DashboardVariableControl.tsx +285 -0
  407. package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
  408. package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
  409. package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
  410. package/UI/Components/Header/Header.tsx +25 -9
  411. package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
  412. package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
  413. package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
  414. package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
  415. package/UI/Components/Icon/Icon.tsx +11 -0
  416. package/UI/Components/JSONTable/JSONTable.tsx +2 -2
  417. package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
  418. package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
  419. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
  420. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
  421. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
  422. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
  423. package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
  424. package/UI/Components/ModelTable/Column.ts +15 -0
  425. package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
  426. package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
  427. package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
  428. package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
  429. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
  430. package/UI/Components/StatusPage/ResourceGroupSection.tsx +40 -0
  431. package/UI/Components/Table/CellClassName.ts +81 -0
  432. package/UI/Components/Table/TableRow.tsx +20 -14
  433. package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
  434. package/UI/Components/Table/Types/Column.ts +36 -0
  435. package/UI/Components/Tooltip/Tooltip.tsx +11 -1
  436. package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
  437. package/UI/Components/Workflow/NodePlacement.ts +57 -0
  438. package/UI/Components/Workflow/Workflow.tsx +47 -18
  439. package/UI/Config.ts +15 -33
  440. package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
  441. package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
  442. package/UI/Utils/Telemetry/Telemetry.ts +10 -8
  443. package/UI/esbuild-config.js +6 -0
  444. package/Utils/API.ts +129 -3
  445. package/Utils/Dashboard/Components/DashboardMonitorListComponent.ts +12 -1
  446. package/Utils/Dashboard/LabelVariable.ts +152 -0
  447. package/Utils/Dashboard/VariableUrlState.ts +27 -5
  448. package/Utils/HTTPResponseBodyReader.ts +221 -0
  449. package/Utils/MetricUnitUtil.ts +34 -0
  450. package/Utils/Monitor/DeviceMacLearningUtil.ts +177 -0
  451. package/Utils/Monitor/MetricValueFormatter.ts +342 -0
  452. package/Utils/Monitor/MonitorTemplateCustomFieldUtil.ts +124 -0
  453. package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +7 -2
  454. package/Utils/Monitor/NetworkTopologyUtil.ts +693 -0
  455. package/Utils/NetworkAutomation/AutoImportRunChain.ts +138 -0
  456. package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -0
  457. package/Utils/Rum/ChunkMath.ts +106 -0
  458. package/Utils/Rum/SessionReplayHealth.ts +732 -0
  459. package/Utils/Rum/SessionReplayStringMap.ts +226 -0
  460. package/Utils/Schema/ModelSchema.ts +1 -0
  461. package/Utils/StatusPage/ResourceSearch.ts +290 -0
  462. package/Utils/Telemetry/OriginAllowList.ts +355 -0
  463. package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
  464. package/Utils/ValueFormatter.ts +35 -1
  465. package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
  466. package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
  467. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
  468. package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
  469. package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
  470. package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
  471. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
  472. package/build/dist/Models/DatabaseModels/ApiKeyPermission.js.map +1 -1
  473. package/build/dist/Models/DatabaseModels/GlobalConfig.js +12 -12
  474. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  475. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +79 -3
  476. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  477. package/build/dist/Models/DatabaseModels/InventoryItem.js +34 -1
  478. package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -1
  479. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +79 -3
  480. package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -1
  481. package/build/dist/Models/DatabaseModels/MonitorCustomField.js +79 -3
  482. package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
  483. package/build/dist/Models/DatabaseModels/NetworkDevice.js +128 -0
  484. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  485. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +79 -3
  486. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
  487. package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
  488. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  489. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
  490. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
  491. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
  492. package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
  493. package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
  494. package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
  495. package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
  496. package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
  497. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
  498. package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
  499. package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
  500. package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
  501. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
  502. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
  503. package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
  504. package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
  505. package/build/dist/Server/API/TelemetryAPI.js +769 -109
  506. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  507. package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
  508. package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
  509. package/build/dist/Server/API/UserTelegramAPI.js +28 -6
  510. package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
  511. package/build/dist/Server/EnvironmentConfig.js +73 -14
  512. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  513. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
  514. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
  515. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
  516. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
  517. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
  518. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
  519. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
  520. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
  521. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js +14 -0
  522. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js.map +1 -0
  523. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  524. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  525. package/build/dist/Server/Infrastructure/QueueWorker.js +19 -7
  526. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  527. package/build/dist/Server/Infrastructure/Redis.js +8 -8
  528. package/build/dist/Server/Infrastructure/Redis.js.map +1 -1
  529. package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
  530. package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
  531. package/build/dist/Server/Infrastructure/Status.js +10 -4
  532. package/build/dist/Server/Infrastructure/Status.js.map +1 -1
  533. package/build/dist/Server/Middleware/TelemetryIngest.js +315 -8
  534. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  535. package/build/dist/Server/Services/AccessTokenService.js +1 -0
  536. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  537. package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
  538. package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
  539. package/build/dist/Server/Services/AlertService.js +34 -0
  540. package/build/dist/Server/Services/AlertService.js.map +1 -1
  541. package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
  542. package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
  543. package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
  544. package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
  545. package/build/dist/Server/Services/DatabaseService.js +58 -13
  546. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  547. package/build/dist/Server/Services/GlobalConfigService.js +133 -0
  548. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  549. package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
  550. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  551. package/build/dist/Server/Services/IncidentService.js +32 -0
  552. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  553. package/build/dist/Server/Services/InventoryItemService.js +28 -1
  554. package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
  555. package/build/dist/Server/Services/MetricService.js +163 -0
  556. package/build/dist/Server/Services/MetricService.js.map +1 -1
  557. package/build/dist/Server/Services/MonitorService.js +29 -0
  558. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  559. package/build/dist/Server/Services/MonitorTemplateService.js +116 -17
  560. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  561. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +349 -64
  562. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  563. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +65 -0
  564. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  565. package/build/dist/Server/Services/NetworkDeviceService.js +54 -0
  566. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  567. package/build/dist/Server/Services/ProjectService.js +22 -0
  568. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  569. package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
  570. package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
  571. package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
  572. package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
  573. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
  574. package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
  575. package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
  576. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  577. package/build/dist/Server/Services/TeamMemberService.js +62 -2
  578. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  579. package/build/dist/Server/Services/TeamPermissionService.js +166 -3
  580. package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
  581. package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
  582. package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
  583. package/build/dist/Server/Services/UserNotificationRuleService.js +60 -25
  584. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  585. package/build/dist/Server/Services/UserNotificationSettingService.js +26 -6
  586. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  587. package/build/dist/Server/Services/UserTelegramService.js +257 -4
  588. package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
  589. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +29 -4
  590. package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
  591. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  592. package/build/dist/Server/Types/Database/QueryUtil.js +36 -0
  593. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  594. package/build/dist/Server/Types/Markdown.js +75 -0
  595. package/build/dist/Server/Types/Markdown.js.map +1 -1
  596. package/build/dist/Server/Utils/APIKey/AccessPermission.js +2 -2
  597. package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
  598. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
  599. package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
  600. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
  601. package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
  602. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
  603. package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
  604. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +53 -18
  605. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
  606. package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
  607. package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
  608. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +38 -5
  609. package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -1
  610. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +54 -3
  611. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
  612. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +2 -2
  613. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
  614. package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
  615. package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
  616. package/build/dist/Server/Utils/LogRedaction.js +20 -0
  617. package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
  618. package/build/dist/Server/Utils/Logger.js +10 -0
  619. package/build/dist/Server/Utils/Logger.js.map +1 -1
  620. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +323 -81
  621. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  622. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +20 -4
  623. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
  624. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +29 -5
  625. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  626. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +29 -6
  627. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  628. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +254 -48
  629. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  630. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +58 -9
  631. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
  632. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +9 -3
  633. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -1
  634. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +26 -12
  635. package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -1
  636. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +74 -33
  637. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  638. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
  639. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  640. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +22 -0
  641. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  642. package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js +114 -0
  643. package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js.map +1 -0
  644. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +25 -0
  645. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  646. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js +237 -0
  647. package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
  648. package/build/dist/Server/Utils/SSRFProtection.js +136 -9
  649. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  650. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
  651. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
  652. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
  653. package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
  654. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
  655. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  656. package/build/dist/Server/Utils/StartServer.js +3 -14
  657. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  658. package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
  659. package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
  660. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +9 -1
  661. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  662. package/build/dist/Server/Utils/Telemetry/PinServiceName.js +163 -0
  663. package/build/dist/Server/Utils/Telemetry/PinServiceName.js.map +1 -0
  664. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +70 -13
  665. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  666. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +28 -15
  667. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
  668. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
  669. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
  670. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
  671. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
  672. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  673. package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
  674. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  675. package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js +54 -0
  676. package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js.map +1 -0
  677. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +60 -0
  678. package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
  679. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
  680. package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
  681. package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
  682. package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
  683. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
  684. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  685. package/build/dist/Types/Dashboard/DashboardVariable.js +1 -0
  686. package/build/dist/Types/Dashboard/DashboardVariable.js.map +1 -1
  687. package/build/dist/Types/Icon/IconProp.js +1 -0
  688. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  689. package/build/dist/Types/JSON.js +1 -0
  690. package/build/dist/Types/JSON.js.map +1 -1
  691. package/build/dist/Types/JSONFunctions.js +131 -37
  692. package/build/dist/Types/JSONFunctions.js.map +1 -1
  693. package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
  694. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
  695. package/build/dist/Types/Monitor/DockerAlertTemplates.js +286 -121
  696. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  697. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
  698. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
  699. package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
  700. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  701. package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
  702. package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
  703. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
  704. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  705. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
  706. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
  707. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +104 -153
  708. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  709. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
  710. package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
  711. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
  712. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  713. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
  714. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  715. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
  716. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
  717. package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
  718. package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
  719. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
  720. package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
  721. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
  722. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
  723. package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
  724. package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -1
  725. package/build/dist/Types/Monitor/UptimeHistoryLabels.js +17 -0
  726. package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
  727. package/build/dist/Types/NetworkAutomation/RuleRunResult.js +291 -6
  728. package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
  729. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
  730. package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
  731. package/build/dist/Types/Rum/SessionReplay.js +117 -0
  732. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  733. package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
  734. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
  735. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
  736. package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
  737. package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
  738. package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
  739. package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
  740. package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
  741. package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
  742. package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
  743. package/build/dist/Types/SerializableObjectDictionary.js +4 -0
  744. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  745. package/build/dist/Types/Telemetry/InventoryLiveness.js +37 -0
  746. package/build/dist/Types/Telemetry/InventoryLiveness.js.map +1 -0
  747. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
  748. package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
  749. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
  750. package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
  751. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
  752. package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js.map +1 -0
  753. package/build/dist/Types/WebsiteRequest.js +55 -3
  754. package/build/dist/Types/WebsiteRequest.js.map +1 -1
  755. package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js +7 -0
  756. package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js.map +1 -1
  757. package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
  758. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  759. package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
  760. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  761. package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
  762. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  763. package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
  764. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
  765. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
  766. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
  767. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  768. package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
  769. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  770. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +89 -8
  771. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  772. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
  773. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
  774. package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +137 -0
  775. package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -0
  776. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +112 -7
  777. package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
  778. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
  779. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  780. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
  781. package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
  782. package/build/dist/UI/Components/Header/Header.js +2 -3
  783. package/build/dist/UI/Components/Header/Header.js.map +1 -1
  784. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
  785. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
  786. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
  787. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
  788. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
  789. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
  790. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
  791. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
  792. package/build/dist/UI/Components/Icon/Icon.js +5 -0
  793. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  794. package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
  795. package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
  796. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
  797. package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
  798. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js +34 -0
  799. package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
  800. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
  801. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
  802. package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
  803. package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
  804. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
  805. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
  806. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +38 -0
  807. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  808. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +22 -1
  809. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
  810. package/build/dist/UI/Components/Table/CellClassName.js +55 -0
  811. package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
  812. package/build/dist/UI/Components/Table/TableRow.js +16 -13
  813. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  814. package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
  815. package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
  816. package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
  817. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  818. package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
  819. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  820. package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
  821. package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
  822. package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
  823. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  824. package/build/dist/UI/Config.js +10 -20
  825. package/build/dist/UI/Config.js.map +1 -1
  826. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
  827. package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
  828. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js +14 -0
  829. package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
  830. package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
  831. package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
  832. package/build/dist/Utils/API.js +67 -5
  833. package/build/dist/Utils/API.js.map +1 -1
  834. package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js +9 -1
  835. package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js.map +1 -1
  836. package/build/dist/Utils/Dashboard/LabelVariable.js +96 -0
  837. package/build/dist/Utils/Dashboard/LabelVariable.js.map +1 -0
  838. package/build/dist/Utils/Dashboard/VariableUrlState.js +19 -4
  839. package/build/dist/Utils/Dashboard/VariableUrlState.js.map +1 -1
  840. package/build/dist/Utils/HTTPResponseBodyReader.js +157 -0
  841. package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
  842. package/build/dist/Utils/MetricUnitUtil.js +26 -0
  843. package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
  844. package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js +112 -0
  845. package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js.map +1 -0
  846. package/build/dist/Utils/Monitor/MetricValueFormatter.js +276 -0
  847. package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -0
  848. package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js +101 -0
  849. package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js.map +1 -0
  850. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +7 -2
  851. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -1
  852. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +484 -0
  853. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  854. package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js +59 -0
  855. package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js.map +1 -0
  856. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
  857. package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
  858. package/build/dist/Utils/Rum/ChunkMath.js +76 -0
  859. package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
  860. package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
  861. package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
  862. package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
  863. package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
  864. package/build/dist/Utils/Schema/ModelSchema.js +1 -0
  865. package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
  866. package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
  867. package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
  868. package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
  869. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
  870. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
  871. package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
  872. package/build/dist/Utils/ValueFormatter.js +32 -1
  873. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  874. package/jest.config.json +2 -0
  875. package/package.json +1 -1
  876. package/test-setup.sh +9 -9
  877. package/tsconfig.json +51 -11
@@ -5,9 +5,11 @@ import {
5
5
  getKubernetesAlertTemplateById,
6
6
  } from "../../../Types/Monitor/KubernetesAlertTemplates";
7
7
  import MonitorStep from "../../../Types/Monitor/MonitorStep";
8
+ import { hasRecoveryDeadBand } from "./Utils/RecommendationCriteriaAssertions";
8
9
  import MonitorStepKubernetesMonitor from "../../../Types/Monitor/MonitorStepKubernetesMonitor";
9
10
  import MetricsAggregationType from "../../../Types/Metrics/MetricsAggregationType";
10
11
  import { FilterType } from "../../../Types/Monitor/CriteriaFilter";
12
+ import RollingTime from "../../../Types/RollingTime/RollingTime";
11
13
  import ObjectID from "../../../Types/ObjectID";
12
14
 
13
15
  /*
@@ -19,9 +21,18 @@ import ObjectID from "../../../Types/ObjectID";
19
21
  * name (`resource.k8s.node.name`), not the bare `k8s.node.name`.
20
22
  * OneUptime stamps OTel resource attributes with a `resource.` prefix
21
23
  * at ingest, so the bare key would match nothing and collapse every
22
- * node into one mislabeled series. The key differs per template — the
23
- * HPA template groups per HPA and the pod-limit templates per pod —
24
- * so each case carries its own expected key.
24
+ * node into one mislabeled series. The key SET differs per template —
25
+ * the HPA template groups per namespace+HPA and the pod-limit
26
+ * templates per namespace+pod — so each case carries its own
27
+ * expected set, and both queries must carry exactly that set or the
28
+ * formula's fingerprint join silently finds nothing.
29
+ *
30
+ * Namespace is in those sets because a Kubernetes object name is
31
+ * unique only within a namespace, and because the set is also what
32
+ * the resulting alert can NAME (see SeriesLabelDisplay). Node is
33
+ * deliberately NOT: kubeletstats always carries it but the
34
+ * k8s_cluster side only gets it from the best-effort k8sattributes
35
+ * processor, and a key only one side carries breaks the join.
25
36
  *
26
37
  * 2. The aggregation differs by numerator shape:
27
38
  * - Request utilization sums MANY container series per node, and both
@@ -31,9 +42,13 @@ import ObjectID from "../../../Types/ObjectID";
31
42
  * (kubeletstats) and denominator (k8s_cluster) come from different
32
43
  * receivers, so `Avg` on both sides gives the correct per-minute
33
44
  * ratio regardless of each receiver's scrape count.
34
- * - The saturation templates are all `Avg` see the pod-memory
35
- * template's note in KubernetesAlertTemplates.ts for the
36
- * multi-container trade-off that choice accepts.
45
+ * - The HPA saturation ratio is `Avg` (one series per HPA on both
46
+ * sides). The two POD-LIMIT saturation templates are no longer
47
+ * ratios at all they read the kubeletstats receiver's own
48
+ * `k8s.pod.*_limit_utilization` family, which divides by the SUM
49
+ * of a pod's container limits instead of the mean a hand-built
50
+ * ratio against `k8s.container.*_limit` produced. They are
51
+ * covered by SINGLE_QUERY_SATURATION below.
37
52
  *
38
53
  * 3. The criteria reference the FORMULA alias (the computed percentage),
39
54
  * not a raw query alias.
@@ -53,7 +68,19 @@ interface RatioTemplateCase {
53
68
  resultAlias: string;
54
69
  aggregation: MetricsAggregationType;
55
70
  threshold: number;
56
- groupBy: string;
71
+ /*
72
+ * The full group-by key SET, in order. Both queries must carry exactly
73
+ * this, or the two halves of the ratio hash to fingerprints that never
74
+ * meet and the formula silently evaluates against an empty operand.
75
+ */
76
+ groupBy: Array<string>;
77
+ /*
78
+ * Only set when the template overrides the builder's default
79
+ * `(num / den) * 100`. Node disk usage is the one case: kubeletstats
80
+ * gives no node capacity series this repo ingests, so the percentage
81
+ * is `used / (used + available)`.
82
+ */
83
+ formula?: string | undefined;
57
84
  }
58
85
 
59
86
  const RATIO_TEMPLATES: Array<RatioTemplateCase> = [
@@ -67,7 +94,7 @@ const RATIO_TEMPLATES: Array<RatioTemplateCase> = [
67
94
  resultAlias: "node_cpu_request_utilization",
68
95
  aggregation: MetricsAggregationType.Sum,
69
96
  threshold: 90,
70
- groupBy: "resource.k8s.node.name",
97
+ groupBy: ["resource.k8s.node.name"],
71
98
  },
72
99
  {
73
100
  id: "k8s-node-memory-request-utilization",
@@ -78,7 +105,26 @@ const RATIO_TEMPLATES: Array<RatioTemplateCase> = [
78
105
  resultAlias: "node_memory_request_utilization",
79
106
  aggregation: MetricsAggregationType.Sum,
80
107
  threshold: 90,
81
- groupBy: "resource.k8s.node.name",
108
+ groupBy: ["resource.k8s.node.name"],
109
+ },
110
+ /*
111
+ * Node disk fill — Avg/Avg, and the ONE template with a non-default
112
+ * formula. `k8s.node.filesystem.usage` is bytes, so comparing it to 90
113
+ * fired on every node forever; the percentage is built from the
114
+ * companion `k8s.node.filesystem.available` on the same kubeletstats
115
+ * node scrape.
116
+ */
117
+ {
118
+ id: "k8s-high-disk-usage",
119
+ numerator: "k8s.node.filesystem.usage",
120
+ denominator: "k8s.node.filesystem.available",
121
+ numAlias: "used_disk",
122
+ denAlias: "avail_disk",
123
+ resultAlias: "disk_usage",
124
+ aggregation: MetricsAggregationType.Avg,
125
+ threshold: 90,
126
+ groupBy: ["resource.k8s.node.name"],
127
+ formula: "(used_disk / (used_disk + avail_disk)) * 100",
82
128
  },
83
129
  // Usage utilization — Avg/Avg (one series per node, cross-receiver).
84
130
  {
@@ -90,7 +136,7 @@ const RATIO_TEMPLATES: Array<RatioTemplateCase> = [
90
136
  resultAlias: "node_cpu_utilization",
91
137
  aggregation: MetricsAggregationType.Avg,
92
138
  threshold: 90,
93
- groupBy: "resource.k8s.node.name",
139
+ groupBy: ["resource.k8s.node.name"],
94
140
  },
95
141
  {
96
142
  id: "k8s-high-memory",
@@ -101,17 +147,19 @@ const RATIO_TEMPLATES: Array<RatioTemplateCase> = [
101
147
  resultAlias: "node_memory_utilization",
102
148
  aggregation: MetricsAggregationType.Avg,
103
149
  threshold: 85,
104
- groupBy: "resource.k8s.node.name",
150
+ groupBy: ["resource.k8s.node.name"],
105
151
  },
106
152
  /*
107
- * Autoscaling / limit saturation — Avg/Avg, and NOT keyed on the node.
153
+ * Autoscaling saturation — Avg/Avg, and NOT keyed on the node.
108
154
  *
109
- * The HPA ratio groups per HPA object; the two pod-limit ratios group
110
- * per pod. Locking the group-by key here is the point of these cases:
111
- * these were the first ratio templates in this file not keyed on
112
- * `resource.k8s.node.name`, so a copy-paste of the node key would
113
- * silently collapse every HPA (or every pod) into one mislabeled
155
+ * The HPA ratio groups per namespace+HPA object. Locking the group-by
156
+ * set here is the point of this case: it was the first ratio template in
157
+ * this file not keyed on `resource.k8s.node.name`, so a copy-paste of
158
+ * the node key would silently collapse every HPA into one mislabeled
114
159
  * series that still renders and still alerts.
160
+ *
161
+ * The two POD-LIMIT saturation templates used to live here as ratios.
162
+ * They are single-query now — see SINGLE_QUERY_SATURATION.
115
163
  */
116
164
  {
117
165
  id: "k8s-hpa-at-max-replicas",
@@ -122,29 +170,51 @@ const RATIO_TEMPLATES: Array<RatioTemplateCase> = [
122
170
  resultAlias: "hpa_replica_saturation",
123
171
  aggregation: MetricsAggregationType.Avg,
124
172
  threshold: 90,
125
- groupBy: "resource.k8s.hpa.name",
173
+ groupBy: ["resource.k8s.namespace.name", "resource.k8s.hpa.name"],
126
174
  },
175
+ ];
176
+
177
+ /*
178
+ * The two container-limit saturation templates, which read the
179
+ * kubeletstats receiver's OWN saturation family instead of rebuilding it.
180
+ *
181
+ * They were ratios of `k8s.pod.<x>.usage` (kubeletstats, one series per
182
+ * POD) over `k8s.container.<x>_limit` (k8s_cluster, one series per
183
+ * CONTAINER) joined by series fingerprint across two independent scrape
184
+ * cycles. That had two defects this table exists to keep fixed:
185
+ *
186
+ * - `Avg` over a per-container denominator takes the MEAN container
187
+ * limit, not their sum, so every pod with a sidecar over-reported its
188
+ * saturation by roughly its container count.
189
+ * - a cross-receiver fingerprint join fails SILENTLY: the formula
190
+ * evaluates against an empty operand and the monitor simply stops
191
+ * alerting.
192
+ */
193
+ interface SingleQuerySaturationCase {
194
+ id: string;
195
+ metricName: string;
196
+ metricAlias: string;
197
+ aggregation: MetricsAggregationType;
198
+ threshold: number;
199
+ groupBy: Array<string>;
200
+ }
201
+
202
+ const SINGLE_QUERY_SATURATION: Array<SingleQuerySaturationCase> = [
127
203
  {
128
204
  id: "k8s-pod-memory-limit-saturation",
129
- numerator: "k8s.pod.memory.usage",
130
- denominator: "k8s.container.memory_limit",
131
- numAlias: "used_mem",
132
- denAlias: "limit_mem",
133
- resultAlias: "pod_memory_limit_saturation",
134
- aggregation: MetricsAggregationType.Avg,
205
+ metricName: "k8s.pod.memory_limit_utilization",
206
+ metricAlias: "pod_memory_limit_saturation",
207
+ aggregation: MetricsAggregationType.Max,
135
208
  threshold: 90,
136
- groupBy: "resource.k8s.pod.name",
209
+ groupBy: ["resource.k8s.namespace.name", "resource.k8s.pod.name"],
137
210
  },
138
211
  {
139
212
  id: "k8s-pod-cpu-limit-saturation",
140
- numerator: "k8s.pod.cpu.utilization",
141
- denominator: "k8s.container.cpu_limit",
142
- numAlias: "used_cpu",
143
- denAlias: "limit_cpu",
144
- resultAlias: "pod_cpu_limit_saturation",
145
- aggregation: MetricsAggregationType.Avg,
213
+ metricName: "k8s.pod.cpu_limit_utilization",
214
+ metricAlias: "pod_cpu_limit_saturation",
215
+ aggregation: MetricsAggregationType.Max,
146
216
  threshold: 90,
147
- groupBy: "resource.k8s.pod.name",
217
+ groupBy: ["resource.k8s.namespace.name", "resource.k8s.pod.name"],
148
218
  },
149
219
  ];
150
220
 
@@ -225,19 +295,21 @@ describe("KubernetesAlertTemplates - per-series ratio templates", () => {
225
295
  * Decision (1): group by the resource-prefixed attribute on BOTH
226
296
  * queries so the per-series fingerprints line up for the formula join.
227
297
  */
228
- expect(numerator.metricQueryData.groupByAttributeKeys).toEqual([
298
+ expect(numerator.metricQueryData.groupByAttributeKeys).toEqual(
229
299
  tc.groupBy,
230
- ]);
231
- expect(denominator.metricQueryData.groupByAttributeKeys).toEqual([
300
+ );
301
+ expect(denominator.metricQueryData.groupByAttributeKeys).toEqual(
232
302
  tc.groupBy,
233
- ]);
303
+ );
234
304
 
235
- // The `resource.` prefix is load-bearing — a bare OTel key matches nothing.
236
- expect(tc.groupBy.startsWith("resource.")).toBe(true);
305
+ for (const key of tc.groupBy) {
306
+ // The `resource.` prefix is load-bearing — a bare OTel key matches nothing.
307
+ expect(key.startsWith("resource.")).toBe(true);
308
+ }
237
309
 
238
310
  // Formula divides numerator by denominator and scales to a percentage.
239
311
  expect(formulaConfigs[0].metricFormulaData.metricFormula).toBe(
240
- `(${tc.numAlias} / ${tc.denAlias}) * 100`,
312
+ tc.formula || `(${tc.numAlias} / ${tc.denAlias}) * 100`,
241
313
  );
242
314
 
243
315
  /*
@@ -268,7 +340,7 @@ describe("KubernetesAlertTemplates - per-series ratio templates", () => {
268
340
  };
269
341
 
270
342
  test.each(RATIO_TEMPLATES)(
271
- "$id unhealthy/healthy criteria partition the range at $threshold",
343
+ "$id unhealthy/healthy criteria leave a recovery dead band around $threshold",
272
344
  (tc: RatioTemplateCase) => {
273
345
  const template: KubernetesAlertTemplate | undefined =
274
346
  getKubernetesAlertTemplateById(tc.id);
@@ -281,11 +353,30 @@ describe("KubernetesAlertTemplates - per-series ratio templates", () => {
281
353
  const offlineFilter: any = offline.data.filters[0];
282
354
  const onlineFilter: any = online.data.filters[0];
283
355
 
284
- // Same metric, same threshold only the comparison direction differs.
356
+ // Same metric; the comparison direction AND the threshold differ.
285
357
  expect(onlineFilter.metricMonitorOptions.metricAlias).toBe(
286
358
  tc.resultAlias,
287
359
  );
288
- expect(onlineFilter.value).toBe(tc.threshold);
360
+ /*
361
+ * The healthy criteria recovers at a threshold strictly INSIDE the
362
+ * firing one, so a metric hovering at the boundary cannot satisfy
363
+ * both on consecutive evaluations. This assertion used to be
364
+ * `expect(onlineFilter.value).toBe(tc.threshold)` — the two criteria
365
+ * exactly partitioned the range, which is the flapping configuration
366
+ * this suite existed to lock in.
367
+ */
368
+ expect(
369
+ hasRecoveryDeadBand(
370
+ {
371
+ filterType: offlineFilter.filterType,
372
+ value: offlineFilter.value as number,
373
+ },
374
+ {
375
+ filterType: onlineFilter.filterType,
376
+ value: onlineFilter.value as number,
377
+ },
378
+ ),
379
+ ).toBe(true);
289
380
 
290
381
  expect(COMPLEMENT_OF[offlineFilter.filterType]).toBe(
291
382
  onlineFilter.filterType,
@@ -358,4 +449,507 @@ describe("KubernetesAlertTemplates - autoscaling & limit saturation", () => {
358
449
 
359
450
  expect(new Set(ids).size).toBe(ids.length);
360
451
  });
452
+
453
+ test.each(SINGLE_QUERY_SATURATION)(
454
+ "$id reads the receiver's own saturation metric, not a hand-built ratio",
455
+ (tc: SingleQuerySaturationCase) => {
456
+ const monitor: MonitorStepKubernetesMonitor = getKubernetesMonitor(
457
+ getStep(tc.id),
458
+ );
459
+
460
+ const queryConfigs: Array<any> = monitor.metricViewConfig
461
+ .queryConfigs as Array<any>;
462
+ const formulaConfigs: Array<any> = monitor.metricViewConfig
463
+ .formulaConfigs as Array<any>;
464
+
465
+ /*
466
+ * ONE query and NO formula. A second query here means someone
467
+ * reintroduced the cross-receiver ratio, whose fingerprint join
468
+ * fails silently and whose Avg denominator is the MEAN of a pod's
469
+ * container limits rather than their sum.
470
+ */
471
+ expect(queryConfigs).toHaveLength(1);
472
+ expect(formulaConfigs).toHaveLength(0);
473
+
474
+ const [query] = queryConfigs;
475
+
476
+ expect(query.metricQueryData.filterData.metricName).toBe(tc.metricName);
477
+ expect(query.metricQueryData.filterData.aggegationType).toBe(
478
+ tc.aggregation,
479
+ );
480
+ expect(query.metricQueryData.groupByAttributeKeys).toEqual(tc.groupBy);
481
+
482
+ /*
483
+ * THE assertion that keeps this template alerting at all.
484
+ *
485
+ * kubeletstats reports the `*_limit_utilization` family with UCUM
486
+ * unit "1" — a 0-1 fraction. MetricUnitUtil puts "1" in the percent
487
+ * family with `toCanonical: 100`, and MetricResultUnitConverter
488
+ * (invoked on the monitor path before the criteria are compared)
489
+ * only rescales when the alias declares a display unit. Drop this
490
+ * "%" and the values stay in [0, 1], the "> 90" threshold below is
491
+ * never reachable, and the monitor goes SILENT rather than loud.
492
+ */
493
+ expect(query.metricAliasData.legendUnit).toBe("%");
494
+
495
+ const [offline, online] = getCriteriaInstances(tc.id);
496
+ const offlineFilter: any = offline.data.filters[0];
497
+ const onlineFilter: any = online.data.filters[0];
498
+
499
+ // The criteria compare the query alias — there is no formula alias now.
500
+ expect(offlineFilter.metricMonitorOptions.metricAlias).toBe(
501
+ tc.metricAlias,
502
+ );
503
+ expect(onlineFilter.metricMonitorOptions.metricAlias).toBe(
504
+ tc.metricAlias,
505
+ );
506
+ expect(offlineFilter.value).toBe(tc.threshold);
507
+
508
+ /*
509
+ * Dead-band coverage these two ids used to get from RATIO_TEMPLATES.
510
+ * Removing them from that table must not quietly drop it.
511
+ */
512
+ expect(
513
+ hasRecoveryDeadBand(
514
+ {
515
+ filterType: offlineFilter.filterType,
516
+ value: offlineFilter.value as number,
517
+ },
518
+ {
519
+ filterType: onlineFilter.filterType,
520
+ value: onlineFilter.value as number,
521
+ },
522
+ ),
523
+ ).toBe(true);
524
+ },
525
+ );
526
+
527
+ test("the memory saturation alert does not promise an OOMKill the metric cannot support", () => {
528
+ /*
529
+ * `k8s.pod.memory_limit_utilization` divides the kubelet's pod memory
530
+ * figure, which INCLUDES reclaimable page cache, by the pod's limit.
531
+ * The kubelet's kill decision is on working set, so a file-heavy
532
+ * workload can sit at 95% here indefinitely without ever being
533
+ * OOMKilled. The old copy asserted the opposite as a certainty.
534
+ */
535
+ const description: string = getIncidentDescription(
536
+ "k8s-pod-memory-limit-saturation",
537
+ );
538
+
539
+ expect(description).not.toContain(
540
+ "OOMKills a container the moment it crosses its limit",
541
+ );
542
+ expect(description).not.toContain("immediately preceding a restart");
543
+ });
544
+ });
545
+
546
+ /*
547
+ * ---------------------------------------------------------------------
548
+ * Regression guards for template/metric mismatches.
549
+ *
550
+ * Every test below is named for a specific shipped defect. Each one fails
551
+ * if that defect is reintroduced, not merely if a value changes.
552
+ * ---------------------------------------------------------------------
553
+ */
554
+
555
+ function getStep(id: string): MonitorStep {
556
+ const template: KubernetesAlertTemplate | undefined =
557
+ getKubernetesAlertTemplateById(id);
558
+
559
+ if (!template) {
560
+ throw new Error(`Kubernetes alert template ${id} is not registered`);
561
+ }
562
+
563
+ return template.getMonitorStep(buildArgs());
564
+ }
565
+
566
+ function getCriteriaInstances(id: string): Array<any> {
567
+ return getStep(id).data?.monitorCriteria.data
568
+ ?.monitorCriteriaInstanceArray as Array<any>;
569
+ }
570
+
571
+ function getIncidentDescription(id: string): string {
572
+ const [offline] = getCriteriaInstances(id);
573
+
574
+ return offline.data.incidents[0].description as string;
575
+ }
576
+
577
+ function getQueryConfigs(id: string): Array<any> {
578
+ return getKubernetesMonitor(getStep(id)).metricViewConfig
579
+ .queryConfigs as Array<any>;
580
+ }
581
+
582
+ describe("KubernetesAlertTemplates - metric/criteria agreement", () => {
583
+ /*
584
+ * BUG: k8s-high-disk-usage handed `k8s.node.filesystem.usage` — declared
585
+ * `unit: "bytes"` in KubernetesMetricCatalog, and never converted, since
586
+ * the query carried no legendUnit — straight to a `> 90` comparison. So
587
+ * "more than 90 BYTES used" was true for every node on its very first
588
+ * evaluation, and the healthy criterion ("90 bytes or less") was
589
+ * unreachable: a permanently red monitor with an incident that could
590
+ * never resolve.
591
+ */
592
+ test("k8s-high-disk-usage never compares raw bytes to a percentage threshold", () => {
593
+ const monitor: MonitorStepKubernetesMonitor = getKubernetesMonitor(
594
+ getStep("k8s-high-disk-usage"),
595
+ );
596
+
597
+ const queryConfigs: Array<any> = monitor.metricViewConfig
598
+ .queryConfigs as Array<any>;
599
+ const formulaConfigs: Array<any> = monitor.metricViewConfig
600
+ .formulaConfigs as Array<any>;
601
+
602
+ // A percentage has to be COMPUTED — there is no ready-made series.
603
+ expect(queryConfigs).toHaveLength(2);
604
+ expect(formulaConfigs).toHaveLength(1);
605
+
606
+ /*
607
+ * There is no `k8s.node.filesystem.capacity` anywhere in this repo, so
608
+ * the denominator is `usage + available` — the same figure `df`
609
+ * reports as Use%, and the same one the cluster dashboard charts.
610
+ */
611
+ expect(formulaConfigs[0].metricFormulaData.metricFormula).toBe(
612
+ "(used_disk / (used_disk + avail_disk)) * 100",
613
+ );
614
+ expect(formulaConfigs[0].metricAliasData.legendUnit).toBe("%");
615
+
616
+ const [offline, online] = getCriteriaInstances("k8s-high-disk-usage");
617
+
618
+ /*
619
+ * The threshold must be compared against the FORMULA's alias. Pointing
620
+ * it at a raw query alias is exactly how the bytes-vs-90 comparison
621
+ * happened.
622
+ */
623
+ for (const filter of [offline.data.filters[0], online.data.filters[0]]) {
624
+ expect(filter.metricMonitorOptions.metricAlias).toBe("disk_usage");
625
+ expect(
626
+ queryConfigs.map((q: any) => {
627
+ return q.metricAliasData.metricVariable;
628
+ }),
629
+ ).not.toContain(filter.metricMonitorOptions.metricAlias);
630
+ }
631
+ });
632
+
633
+ /*
634
+ * BUG: k8s-pod-pending filtered on `attributes: { "resource.k8s.pod.phase":
635
+ * "Pending" }`. Nothing emits that attribute — not the k8s_cluster
636
+ * receiver, not the agent's k8sattributes processor, not the ingest path
637
+ * — and the worker copies the map verbatim into the ClickHouse
638
+ * predicate. The query matched ZERO rows forever: the monitor never
639
+ * fired, never resolved, and never reported that it was watching
640
+ * nothing.
641
+ */
642
+ describe("k8s-pod-pending", () => {
643
+ test("carries no attribute filter", () => {
644
+ const [query] = getQueryConfigs("k8s-pod-pending");
645
+
646
+ expect(query.metricQueryData.filterData.attributes).toEqual({});
647
+ });
648
+
649
+ test("selects the Pending phase by VALUE, not by a label that does not exist", () => {
650
+ /*
651
+ * `k8s.pod.phase` encodes the phase in the value: 1 = Pending,
652
+ * 2 = Running, 3 = Succeeded, 4 = Failed, 5 = Unknown.
653
+ */
654
+ const [offline, online] = getCriteriaInstances("k8s-pod-pending");
655
+ const offlineFilter: any = offline.data.filters[0];
656
+ const onlineFilter: any = online.data.filters[0];
657
+
658
+ expect(offlineFilter.metricMonitorOptions.metricAlias).toBe(
659
+ "min_pod_phase",
660
+ );
661
+ expect(offlineFilter.filterType).toBe(FilterType.EqualTo);
662
+ expect(offlineFilter.value).toBe(1);
663
+
664
+ /*
665
+ * NotEqualTo, not GreaterThan. An equality comparison gets NO
666
+ * recovery dead band (getRecoveryThreshold returns undefined), so
667
+ * the recovery value stays exactly 1. GreaterThan would complement
668
+ * to LessThanOrEqualTo and derive 1.1 — a fractional edge on a
669
+ * metric whose values are an enum.
670
+ */
671
+ expect(onlineFilter.metricMonitorOptions.metricAlias).toBe(
672
+ "min_pod_phase",
673
+ );
674
+ expect(onlineFilter.filterType).toBe(FilterType.NotEqualTo);
675
+ expect(onlineFilter.value).toBe(1);
676
+ });
677
+
678
+ test("aggregates with Min, not Sum", () => {
679
+ /*
680
+ * Pending is the LOWEST phase code, so a cluster-wide Min is exactly
681
+ * 1 when at least one pod is Pending. `Sum` also walked into the
682
+ * trap DashboardTemplates.ts documents: a per-resource gauge
683
+ * re-emitted every scrape sums to (pods x scrapes).
684
+ */
685
+ const [query] = getQueryConfigs("k8s-pod-pending");
686
+
687
+ expect(query.metricQueryData.filterData.aggegationType).toBe(
688
+ MetricsAggregationType.Min,
689
+ );
690
+ expect(query.metricQueryData.filterData.metricName).toBe("k8s.pod.phase");
691
+ });
692
+ });
693
+
694
+ /*
695
+ * BUG: k8s-apiserver-throttling summed `apiserver_dropped_requests_total`,
696
+ * a cumulative Prometheus counter, against `> 0`. Nothing in the shipped
697
+ * pipeline converts counters to deltas (no cumulativetodelta processor,
698
+ * no Rate/Delta member on AggregationType or on
699
+ * CompareCriteria.reduceWindow), so every sample was the API server's
700
+ * LIFETIME total. One throttled request since the process started pinned
701
+ * the monitor Offline forever.
702
+ */
703
+ test("k8s-apiserver-throttling does not alert on a cumulative counter", () => {
704
+ const [query] = getQueryConfigs("k8s-apiserver-throttling");
705
+ const metricName: string = query.metricQueryData.filterData
706
+ .metricName as string;
707
+
708
+ expect(metricName).toBe("apiserver_current_inflight_requests");
709
+ expect(metricName.endsWith("_total")).toBe(false);
710
+ expect(query.metricQueryData.filterData.aggegationType).toBe(
711
+ MetricsAggregationType.Max,
712
+ );
713
+
714
+ const [offline, online] = getCriteriaInstances("k8s-apiserver-throttling");
715
+ const offlineFilter: any = offline.data.filters[0];
716
+ const onlineFilter: any = online.data.filters[0];
717
+
718
+ /*
719
+ * GreaterThanOrEqualTo, not GreaterThan. This gauge counts ADMITTED
720
+ * concurrency, so it is bounded above by the API server's own
721
+ * admission limit and saturates AT it. 200 is the default
722
+ * --max-mutating-requests-inflight exactly, so "> 200" would ask the
723
+ * mutating queue to exceed its own ceiling and never fire.
724
+ */
725
+ expect(offlineFilter.filterType).toBe(FilterType.GreaterThanOrEqualTo);
726
+ expect(offlineFilter.value).toBe(200);
727
+ expect(onlineFilter.filterType).toBe(FilterType.LessThan);
728
+ // 10% dead band inside the firing threshold.
729
+ expect(onlineFilter.value).toBe(180);
730
+ });
731
+
732
+ /*
733
+ * Generalisation of the counter bug above: nothing in the query path can
734
+ * differentiate a monotonic counter, so a `_total` series compared
735
+ * against a fixed threshold can never satisfy its own recovery
736
+ * criterion. If a future template needs one, it needs a Rate/Delta
737
+ * aggregation first.
738
+ */
739
+ test("no template thresholds a cumulative `_total` counter", () => {
740
+ for (const template of getAllKubernetesAlertTemplates()) {
741
+ for (const query of getQueryConfigs(template.id)) {
742
+ const metricName: string = query.metricQueryData.filterData
743
+ .metricName as string;
744
+
745
+ expect(`${template.id}:${metricName}`).not.toMatch(/_total$/);
746
+ }
747
+ }
748
+ });
749
+
750
+ /*
751
+ * BUG: every template's query attributes are copied verbatim into the
752
+ * ClickHouse predicate, so an attribute key nothing stamps silently
753
+ * reduces the query to zero rows. No template needs one today; a future
754
+ * one must add its key here deliberately, having checked the agent
755
+ * actually emits it.
756
+ */
757
+ test("no template filters on an attribute the agent does not stamp", () => {
758
+ const ALLOWED_ATTRIBUTE_KEYS: Set<string> = new Set<string>();
759
+
760
+ for (const template of getAllKubernetesAlertTemplates()) {
761
+ for (const query of getQueryConfigs(template.id)) {
762
+ const attributes: Record<string, string> =
763
+ query.metricQueryData.filterData.attributes || {};
764
+
765
+ for (const key of Object.keys(attributes)) {
766
+ expect(`${template.id} filters on ${key}`).toBe(
767
+ ALLOWED_ATTRIBUTE_KEYS.has(key)
768
+ ? `${template.id} filters on ${key}`
769
+ : "an attribute key on the allowlist",
770
+ );
771
+ }
772
+ }
773
+ }
774
+ });
775
+
776
+ /*
777
+ * BUG: k8s-crashloopbackoff's criteria copy said restarts "exceeds 5 in
778
+ * the monitoring window". `k8s.container.restarts` is
779
+ * containerStatus.restartCount — monotonic for the pod object's life —
780
+ * and `Max` over a monotonic series is just the counter, so no per-window
781
+ * count is computed anywhere.
782
+ */
783
+ test("k8s-crashloopbackoff does not claim a per-window restart count", () => {
784
+ const [offline] = getCriteriaInstances("k8s-crashloopbackoff");
785
+ const [query] = getQueryConfigs("k8s-crashloopbackoff");
786
+
787
+ // The configuration that makes the old wording false is still in place.
788
+ expect(query.metricQueryData.filterData.metricName).toBe(
789
+ "k8s.container.restarts",
790
+ );
791
+ expect(query.metricQueryData.filterData.aggegationType).toBe(
792
+ MetricsAggregationType.Max,
793
+ );
794
+
795
+ expect(offline.data.description).not.toContain("in the monitoring window");
796
+ expect(offline.data.description).toContain("cumulative");
797
+ });
798
+
799
+ /*
800
+ * BUG: k8s-daemonset-unavailable queries
801
+ * `k8s.daemonset.misscheduled_nodes` — which KubernetesMetricCatalog
802
+ * defines as "nodes running a daemon pod that should NOT be running one"
803
+ * — while its name, alias, description, incident title and criteria name
804
+ * all said "unavailable", i.e. the opposite condition. An engineer paged
805
+ * for a stale node selector went looking for a missing DaemonSet.
806
+ *
807
+ * The `id` deliberately keeps the old word: it is the stable key the
808
+ * recommendation diff matches on.
809
+ */
810
+ test("the DaemonSet template's copy matches the metric it queries", () => {
811
+ const template: KubernetesAlertTemplate | undefined =
812
+ getKubernetesAlertTemplateById("k8s-daemonset-unavailable");
813
+ const [query] = getQueryConfigs("k8s-daemonset-unavailable");
814
+ const [offline] = getCriteriaInstances("k8s-daemonset-unavailable");
815
+
816
+ expect(query.metricQueryData.filterData.metricName).toBe(
817
+ "k8s.daemonset.misscheduled_nodes",
818
+ );
819
+
820
+ for (const text of [
821
+ template!.name,
822
+ template!.description,
823
+ offline.data.incidents[0].title as string,
824
+ offline.data.name as string,
825
+ ]) {
826
+ expect(text.toLowerCase()).not.toContain("unavailable");
827
+ }
828
+
829
+ // And the alias no longer misnames the value either.
830
+ expect(query.metricAliasData.metricVariable).toBe("misscheduled_nodes");
831
+ expect(offline.data.filters[0].metricMonitorOptions.metricAlias).toBe(
832
+ "misscheduled_nodes",
833
+ );
834
+ });
835
+
836
+ /*
837
+ * BUG: the three control-plane templates are offered in the picker but
838
+ * collect nothing on a default agent install — the chart's prometheus
839
+ * receiver and all three scrape jobs are wrapped in
840
+ * `{{- if .Values.controlPlane.enabled }}`, and values.yaml ships
841
+ * `controlPlane: { enabled: false }`. A one-click monitor that is never
842
+ * Met, with no indication it is inert.
843
+ */
844
+ test("every ControlPlane template says it needs the control-plane scrape", () => {
845
+ const controlPlaneTemplates: Array<KubernetesAlertTemplate> =
846
+ getAllKubernetesAlertTemplates().filter((t: KubernetesAlertTemplate) => {
847
+ return t.category === "ControlPlane";
848
+ });
849
+
850
+ expect(controlPlaneTemplates.length).toBeGreaterThan(0);
851
+
852
+ for (const template of controlPlaneTemplates) {
853
+ expect(template.description).toContain("controlPlane.enabled");
854
+ }
855
+ });
856
+
857
+ /*
858
+ * The recommendation card renders `template.description` as raw JSX
859
+ * text, not markdown (KubernetesTemplatePicker), so a code span would
860
+ * show up as literal backticks.
861
+ */
862
+ test("no template description uses markdown code spans", () => {
863
+ for (const template of getAllKubernetesAlertTemplates()) {
864
+ expect(`${template.id}: ${template.description}`).not.toContain("`");
865
+ }
866
+ });
867
+ });
868
+
869
+ /*
870
+ * The rolling window is load-bearing now that the FIRE side defaults to
871
+ * EvaluateOverTimeType.AllValues: every per-minute bucket in the window
872
+ * must breach, so the window IS the "how long has this been true" knob.
873
+ * Nothing else guards these, and shortening one silently reintroduces the
874
+ * page-on-every-deploy behaviour.
875
+ */
876
+ describe("KubernetesAlertTemplates - deliberate rolling windows", () => {
877
+ const ROLLING_WINDOWS: Array<{
878
+ id: string;
879
+ window: RollingTime;
880
+ why: string;
881
+ }> = [
882
+ {
883
+ id: "k8s-deployment-replica-mismatch",
884
+ window: RollingTime.Past15Minutes,
885
+ why: "must outlast a normal rolling update, or it pages once per deploy",
886
+ },
887
+ {
888
+ id: "k8s-pod-pending",
889
+ window: RollingTime.Past15Minutes,
890
+ why: "must outlast normal scheduling; a few seconds Pending is not stuck",
891
+ },
892
+ {
893
+ id: "k8s-etcd-no-leader",
894
+ window: RollingTime.Past1Minute,
895
+ why: "a single lost leader is itself the incident",
896
+ },
897
+ ];
898
+
899
+ test.each(ROLLING_WINDOWS)(
900
+ "$id watches $window because $why",
901
+ (tc: { id: string; window: RollingTime; why: string }) => {
902
+ expect(getKubernetesMonitor(getStep(tc.id)).rollingTime).toBe(tc.window);
903
+ },
904
+ );
905
+ });
906
+
907
+ /*
908
+ * BUG: eleven incident descriptions said "Check the root cause for the
909
+ * specific <thing>". On a GROUPED monitor that is false. A per-series
910
+ * match's rootCause is nothing but the concatenated compare lines
911
+ * (MonitorCriteriaEvaluator.collectPerSeriesMatches sets
912
+ * `rootCause: rootCauseLines.join("\n")`); the RICH root cause carrying the
913
+ * pod/node/container table is only written to the SCALAR response, which
914
+ * is used when there is NO series match. The identity the sentence
915
+ * promised is in the alert one field lower, under the "Affected resource"
916
+ * and "Start here" headings SeriesContextEnricher appends to the
917
+ * description — so the reader was being sent to the wrong row of the
918
+ * email.
919
+ */
920
+ describe("KubernetesAlertTemplates - grouped alerts point at the right field", () => {
921
+ function isGrouped(id: string): boolean {
922
+ return getQueryConfigs(id).some((query: any) => {
923
+ return (query.metricQueryData.groupByAttributeKeys || []).length > 0;
924
+ });
925
+ }
926
+
927
+ test("at least one template is grouped (guards the guard)", () => {
928
+ expect(
929
+ getAllKubernetesAlertTemplates().filter((t: KubernetesAlertTemplate) => {
930
+ return isGrouped(t.id);
931
+ }).length,
932
+ ).toBeGreaterThan(5);
933
+ });
934
+
935
+ test("no grouped template sends the reader to the root cause for identity", () => {
936
+ for (const template of getAllKubernetesAlertTemplates()) {
937
+ if (!isGrouped(template.id)) {
938
+ continue;
939
+ }
940
+
941
+ for (const instance of getCriteriaInstances(template.id)) {
942
+ for (const alert of instance.data?.alerts || []) {
943
+ expect(`${template.id}: ${alert.description}`).not.toMatch(
944
+ /root cause/i,
945
+ );
946
+ }
947
+ for (const incident of instance.data?.incidents || []) {
948
+ expect(`${template.id}: ${incident.description}`).not.toMatch(
949
+ /root cause/i,
950
+ );
951
+ }
952
+ }
953
+ }
954
+ });
361
955
  });