@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
@@ -21,6 +21,8 @@ import MonitorType from "../../Types/Monitor/MonitorType";
21
21
  import {
22
22
  AutoImportRuleRunResult,
23
23
  MAX_MATCHED_IP_SAMPLE,
24
+ MAX_RUN_FAILURE_REASON_LENGTH,
25
+ MAX_RUN_FAILURE_REASONS,
24
26
  } from "../../Types/NetworkAutomation/RuleRunResult";
25
27
  import AutoImportRuleMatcher, {
26
28
  AutoImportHostEvaluation,
@@ -31,6 +33,7 @@ import {
31
33
  buildNetworkDeviceFromDiscoveredHost,
32
34
  } from "../../Utils/NetworkDiscovery/DiscoveredDeviceBuilder";
33
35
  import { normalizeDiscoveredHosts } from "../../Utils/NetworkDiscovery/DiscoveredHostUtil";
36
+ import { DISCOVERY_SCAN_IMPORTABLE_STATUSES } from "../../Utils/NetworkDiscovery/DiscoveryScanStatus";
34
37
  import { NetworkDeviceMonitoringMethodUtil } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
35
38
  import NetworkDeviceMonitorTemplateUtil from "../../Utils/Monitor/NetworkDeviceMonitorTemplateUtil";
36
39
  import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
@@ -41,7 +44,8 @@ import logger, { LogAttributes } from "../Utils/Logger";
41
44
 
42
45
  /*
43
46
  * The engine behind network device auto-import rules (issue #3378): reads a
44
- * completed discovery scan's results, asks the project's rules which hosts
47
+ * discovery scan's results finished or still arriving from a running sweep,
48
+ * see DISCOVERY_SCAN_IMPORTABLE_STATUSES — asks the project's rules which hosts
45
49
  * import, and creates the Network Devices the manual Review dialog would
46
50
  * have — through the same builder, so a rule-imported host and a
47
51
  * hand-imported host are the same device. Site assignment, owners and labels
@@ -116,6 +120,26 @@ export const MAX_MONITORS_PER_AUTO_IMPORT_RUN: number = 500;
116
120
  // Scans one manual "Run Now" will read, oldest results last.
117
121
  export const MAX_SCANS_PER_AUTO_IMPORT_RULE_RUN: number = 100;
118
122
 
123
+ /*
124
+ * How many monitor creates may fail IDENTICALLY, back to back with no success
125
+ * between them, before the run stops attempting any more.
126
+ *
127
+ * A monitor create fails for one of two kinds of reason. Per host — this
128
+ * device's name collides, this one raced another writer — where the next host
129
+ * is unaffected and trying it is right. Or systemic: the template's criteria
130
+ * name a monitor status that no longer exists, the plan's monitor limit is
131
+ * reached, the database is refusing writes. Those fail for the FIRST device
132
+ * and for all 500 after it, and the old engine could not tell the difference:
133
+ * it spent the whole per-run monitor budget re-proving one broken thing, then
134
+ * reported "Stopped at the run cap — run again to continue", which is an
135
+ * instruction to do it all again. That is OneUptime/oneuptime#3643.
136
+ *
137
+ * Ten consecutive failures carrying the SAME message, with no create
138
+ * succeeding in between, is not a run of bad luck. Any success resets it, so a
139
+ * genuinely per-host fault never trips this.
140
+ */
141
+ export const MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES: number = 10;
142
+
119
143
  /*
120
144
  * Results older than this are stamped processed WITHOUT importing. A late
121
145
  * result can land on a reaper-Failed scan hours after its sweep ran (the
@@ -159,6 +183,28 @@ export interface ExistingMonitorProvisioningState {
159
183
  autoProvisionedKeys: Set<string>;
160
184
  manuallyMonitoredDeviceIds: Set<string>;
161
185
  attemptedProvisioningKeys: Set<string>;
186
+ /*
187
+ * Monitor template ids this run has already proved it cannot resolve —
188
+ * deleted, moved to another project, or no longer of type Network Device.
189
+ * That is a property of the RULE, settled the first time a host needs the
190
+ * template, and re-deciding it per host costs one wasted monitor budget slot
191
+ * and one log line per device in the estate.
192
+ */
193
+ unresolvableTemplateIds: Set<string>;
194
+ /*
195
+ * Consecutive monitor creates that failed with the same message and no
196
+ * success since — see MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES.
197
+ */
198
+ consecutiveCreateFailures: number;
199
+ lastCreateFailureReason: string;
200
+ /*
201
+ * Whether this run has EVER provisioned a monitor (or lost a race to
202
+ * somebody who did). One success is proof the create pipeline works, which
203
+ * is what disarms the systemic-failure guard for good.
204
+ */
205
+ hasProvisionedAnyMonitor: boolean;
206
+ // Set once this run gives up on provisioning monitors at all.
207
+ isProvisioningHalted: boolean;
162
208
  }
163
209
 
164
210
  export type ExistingMonitorsByProjectId = Map<
@@ -182,24 +228,32 @@ export type ImportAttemptBudgetsByProjectId = Map<string, ImportAttemptBudget>;
182
228
 
183
229
  class NetworkDeviceAutoImportRuleEngineServiceClass {
184
230
  /**
185
- * The automatic path: apply the project's enabled rules to one Completed
186
- * scan, then stamp the scan's autoImportProcessedAt marker.
231
+ * The automatic path: apply the project's enabled rules to one scan's
232
+ * stored results, then stamp the scan's autoImportProcessedAt marker.
233
+ *
234
+ * The scan may still be SWEEPING — see
235
+ * DISCOVERY_SCAN_IMPORTABLE_STATUSES. Its partial results are as real as
236
+ * a finished scan's (the probe found those hosts; it simply has more of the
237
+ * range to cover), and waiting for the whole sweep is what left 527
238
+ * discovered switches unimportable for a day in OneUptime issue #3599. The
239
+ * name is kept because it is the automatic path's identity across the
240
+ * worker, its tests and its logs.
187
241
  *
188
242
  * Returns null when there was nothing to do (scan gone, superseded,
189
243
  * already processed, no import rules, or results too old) and the run's
190
244
  * counters otherwise. Throws only on unexpected failures — the caller
191
245
  * (the worker sweep) isolates those per scan.
192
246
  *
193
- * The marker protocol, and why every stamp is a compare-and-set on
194
- * (status, completedAt): the ingest endpoint clears the marker in the same
195
- * write that stores new results, so "marker is NULL" always means "the
196
- * results now on the row have not been processed". If new results land
197
- * while this pass is reading the old ones, the CAS misses, the marker
198
- * stays NULL, and the next tick processes the new upload — the stamp can
199
- * never retire results it did not see, and the jsonb write-back can never
200
- * clobber a newer host list. A truncated pass that created something
201
- * stamps nothing on purpose: the NULL marker is what makes the next tick
202
- * resume. (A truncated pass where every create FAILED stamps anyway — see
247
+ * The marker protocol, and why every stamp is a compare-and-set on the run
248
+ * state this pass read: the ingest endpoint clears the marker in the same
249
+ * write that stores new results partial uploads included so "marker is
250
+ * NULL" always means "the results now on the row have not been processed".
251
+ * If new results land while this pass is reading the old ones, the CAS
252
+ * misses, the marker stays NULL, and the next tick processes the new upload
253
+ * — the stamp can never retire results it did not see, and the jsonb
254
+ * write-back can never clobber a newer host list. A truncated pass that
255
+ * created something stamps nothing on purpose: the NULL marker is what
256
+ * makes the next tick resume. (A truncated pass where every create FAILED stamps anyway — see
203
257
  * the zero-progress note at the stamp below.)
204
258
  */
205
259
  @CaptureSpan()
@@ -213,19 +267,32 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
213
267
  await NetworkDeviceDiscoveryScanService.findOneBy({
214
268
  query: {
215
269
  _id: data.scanId,
216
- status: "Completed",
270
+ status: QueryHelper.any(DISCOVERY_SCAN_IMPORTABLE_STATUSES),
217
271
  },
218
272
  select: {
219
273
  _id: true,
220
274
  projectId: true,
221
275
  status: true,
222
276
  completedAt: true,
277
+ /*
278
+ * The two counters a running scan's partial uploads move. They are
279
+ * not read for anything; they are the version token stampScan's
280
+ * compare-and-set uses to tell "the results I evaluated" from "the
281
+ * results that landed while I was evaluating".
282
+ */
283
+ scannedHostCount: true,
284
+ respondedHostCount: true,
223
285
  autoImportProcessedAt: true,
224
286
  discoveredDevices: true,
225
287
  ...AUTO_IMPORT_SCAN_CREDENTIAL_SELECT,
226
288
  },
227
289
  props: {
228
290
  isRoot: true,
291
+ /*
292
+ * Keep the stored payload for stampScan; the engine checks live
293
+ * inventory itself before evaluating these hosts.
294
+ */
295
+ ignoreHooks: true,
229
296
  },
230
297
  });
231
298
 
@@ -538,11 +605,21 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
538
605
  await NetworkDeviceDiscoveryScanService.findBy({
539
606
  query: {
540
607
  projectId: data.projectId,
541
- status: "Completed",
608
+ /*
609
+ * A scan that is still sweeping counts too: its partial results are
610
+ * already on the row, and "Run Now found 25 hosts while 527 sat in
611
+ * the Devices list" was exactly the report (OneUptime issue #3599).
612
+ */
613
+ status: QueryHelper.any(DISCOVERY_SCAN_IMPORTABLE_STATUSES),
542
614
  },
543
615
  select: {
544
616
  _id: true,
545
617
  },
618
+ /*
619
+ * Newest results first. An in-progress scan has no completedAt, and
620
+ * Postgres orders NULLs first under DESC — which is the right place
621
+ * for it: its results are the freshest the project has.
622
+ */
546
623
  sort: {
547
624
  completedAt: SortOrder.Descending,
548
625
  },
@@ -558,23 +635,28 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
558
635
  scanStubs.pop();
559
636
  }
560
637
 
561
- for (const scanStub of scanStubs) {
638
+ for (let index: number = 0; index < scanStubs.length; index++) {
639
+ const scanStub: NetworkDeviceDiscoveryScan = scanStubs[index]!;
562
640
  const scan: NetworkDeviceDiscoveryScan | null =
563
641
  await NetworkDeviceDiscoveryScanService.findOneBy({
564
642
  query: {
565
643
  _id: scanStub.id!,
566
644
  projectId: data.projectId,
567
- status: "Completed",
645
+ status: QueryHelper.any(DISCOVERY_SCAN_IMPORTABLE_STATUSES),
568
646
  },
569
647
  select: {
570
648
  _id: true,
571
649
  projectId: true,
572
650
  status: true,
573
651
  completedAt: true,
652
+ // The version token stampScan's compare-and-set uses; see there.
653
+ scannedHostCount: true,
654
+ respondedHostCount: true,
574
655
  discoveredDevices: true,
575
656
  ...AUTO_IMPORT_SCAN_CREDENTIAL_SELECT,
576
657
  },
577
- props: { isRoot: true },
658
+ // Preserve the raw scan rows for the compare-and-set write-back.
659
+ props: { isRoot: true, ignoreHooks: true },
578
660
  });
579
661
 
580
662
  // Re-queued or deleted since the stub query — nothing to evaluate.
@@ -608,8 +690,15 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
608
690
  });
609
691
  }
610
692
 
611
- // The device cap is shared across the whole run, dry or real.
693
+ /*
694
+ * The caps are shared across the whole run, dry or real. Stop OPENING
695
+ * further scans once they are spent — each one is a multi-megabyte
696
+ * jsonb read whose hosts this pass could not act on anyway — but say
697
+ * that scans were left unread, so the pending counters below are
698
+ * reported as a floor rather than as the estate's total.
699
+ */
612
700
  if (result.isTruncated) {
701
+ result.hasUnevaluatedScans = index < scanStubs.length - 1;
613
702
  break;
614
703
  }
615
704
 
@@ -647,18 +736,69 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
647
736
  monitorsSkippedAlreadyExisting: 0,
648
737
  monitorsSkippedUnsupportedHost: 0,
649
738
  monitorsFailed: 0,
739
+ deviceFailureReasons: [],
740
+ monitorFailureReasons: [],
741
+ monitorProvisioningHalted: false,
650
742
  isTruncated: false,
743
+ hostsPendingImport: 0,
744
+ monitorsPendingCreation: 0,
745
+ hasUnevaluatedScans: false,
651
746
  hasMoreScans: false,
652
747
  isDryRun: isDryRun,
653
748
  matchedIpAddressSample: [],
654
749
  };
655
750
  }
656
751
 
752
+ /*
753
+ * Keep the reason a create failed, so the run can say WHY it created
754
+ * nothing instead of pointing at server logs the operator of a self-hosted
755
+ * install may not be able to read. Deduplicated (500 identical failures are
756
+ * one reason) and capped, in both count and length, because this string
757
+ * ends up in a modal.
758
+ */
759
+ private recordFailureReason(reasons: Array<string>, error: unknown): void {
760
+ const message: string = this.describeError(error);
761
+
762
+ if (!message) {
763
+ return;
764
+ }
765
+
766
+ const trimmed: string = message.substring(0, MAX_RUN_FAILURE_REASON_LENGTH);
767
+
768
+ if (reasons.includes(trimmed)) {
769
+ return;
770
+ }
771
+
772
+ if (reasons.length >= MAX_RUN_FAILURE_REASONS) {
773
+ return;
774
+ }
775
+
776
+ reasons.push(trimmed);
777
+ }
778
+
779
+ /*
780
+ * The message an operator should see. Exception extends Error, so one arm
781
+ * covers both; anything else is stringified rather than dropped, because a
782
+ * thrown non-Error is exactly the case where the reason matters most.
783
+ */
784
+ private describeError(error: unknown): string {
785
+ if (error instanceof Error) {
786
+ return (error.message || "").replace(/\s+/g, " ").trim();
787
+ }
788
+
789
+ return String(error).replace(/\s+/g, " ").trim();
790
+ }
791
+
657
792
  private emptyExistingMonitorProvisioningState(): ExistingMonitorProvisioningState {
658
793
  return {
659
794
  autoProvisionedKeys: new Set(),
660
795
  manuallyMonitoredDeviceIds: new Set(),
661
796
  attemptedProvisioningKeys: new Set(),
797
+ unresolvableTemplateIds: new Set(),
798
+ consecutiveCreateFailures: 0,
799
+ lastCreateFailureReason: "",
800
+ hasProvisionedAnyMonitor: false,
801
+ isProvisioningHalted: false,
662
802
  };
663
803
  }
664
804
 
@@ -1077,6 +1217,18 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1077
1217
 
1078
1218
  const createdIpAddresses: Array<string> = [];
1079
1219
 
1220
+ /*
1221
+ * What this pass counted as still-to-do, deduplicated.
1222
+ *
1223
+ * A stored result can list the same address twice (duplicate rows are
1224
+ * normal enough that normalisation preserves them and the import path
1225
+ * treats the second as already-registered), so counting rows rather than
1226
+ * distinct work would report a remainder larger than the work that
1227
+ * actually remains — in a number whose whole purpose is to be trusted.
1228
+ */
1229
+ const pendingImportAddresses: Set<string> = new Set<string>();
1230
+ const pendingProvisioningKeys: Set<string> = new Set<string>();
1231
+
1080
1232
  for (const host of hosts) {
1081
1233
  /*
1082
1234
  * The address becomes the device's varchar(100) hostname, on which
@@ -1149,22 +1301,13 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1149
1301
  let deviceWasCreated: boolean = false;
1150
1302
 
1151
1303
  /*
1152
- * The frozen isAlreadyRegistered flag AND the live set: the flag is a
1153
- * point-in-time answer from the last upload, the set covers devices
1154
- * created since including by this very run, which is what collapses
1155
- * duplicate rows and overlapping scans into one device.
1304
+ * Current inventory is authoritative. The stored isAlreadyRegistered
1305
+ * flag can outlive a deleted device and must not veto re-importing it.
1306
+ * The map also includes devices created during this run, keeping
1307
+ * duplicate rows and overlapping scans idempotent.
1156
1308
  */
1157
- if (host.isAlreadyRegistered || networkDevice) {
1309
+ if (networkDevice) {
1158
1310
  result.hostsSkippedAlreadyRegistered++;
1159
-
1160
- /*
1161
- * A stale scan can claim a deleted device is still registered. With
1162
- * no live row there is neither a safe binding nor enough intent to
1163
- * recreate it from old data, so preserve the established skip.
1164
- */
1165
- if (!networkDevice) {
1166
- continue;
1167
- }
1168
1311
  }
1169
1312
 
1170
1313
  if (result.matchedIpAddressSample.length < MAX_MATCHED_IP_SAMPLE) {
@@ -1175,8 +1318,25 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1175
1318
 
1176
1319
  if (!networkDevice) {
1177
1320
  if (data.attempts.deviceCount >= MAX_DEVICES_PER_AUTO_IMPORT_RUN) {
1321
+ /*
1322
+ * Budget spent — stop WRITING, keep COUNTING. The rest of this
1323
+ * loop is pure matching over a jsonb array that is already in
1324
+ * memory against addresses primeExistingDevices already resolved,
1325
+ * so finishing the scan costs nothing the cap exists to prevent,
1326
+ * and it is the difference between "imported 500" and "imported
1327
+ * 500 of 909, 409 still to go". A run that stopped mid-count
1328
+ * reported the truncated numbers as if they were the estate,
1329
+ * which is what OneUptime issue #3642 experienced as the
1330
+ * remainder being silently dropped.
1331
+ */
1178
1332
  result.isTruncated = true;
1179
- break;
1333
+
1334
+ if (!pendingImportAddresses.has(host.ipAddress)) {
1335
+ pendingImportAddresses.add(host.ipAddress);
1336
+ result.hostsPendingImport++;
1337
+ }
1338
+
1339
+ continue;
1180
1340
  }
1181
1341
 
1182
1342
  if (data.isDryRun) {
@@ -1231,8 +1391,8 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1231
1391
  continue;
1232
1392
  }
1233
1393
 
1234
- const monitorsWereTruncated: boolean = await this.ensureMonitorsForDevice(
1235
- {
1394
+ const monitorsLeftPending: Array<string> =
1395
+ await this.ensureMonitorsForDevice({
1236
1396
  projectId: scan.projectId,
1237
1397
  host: host,
1238
1398
  networkDevice: networkDevice,
@@ -1242,18 +1402,45 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1242
1402
  result: result,
1243
1403
  attempts: data.attempts,
1244
1404
  isDryRun: data.isDryRun,
1245
- },
1246
- );
1405
+ });
1247
1406
 
1248
- if (monitorsWereTruncated) {
1407
+ /*
1408
+ * Same protocol as the device cap above: the monitor budget stops the
1409
+ * creates, not the accounting. It also has its OWN cap, so an estate
1410
+ * that is fully imported but unmonitored — the shape of issue #3642 —
1411
+ * runs out of monitor budget with nothing pending on the device side,
1412
+ * and the operator needs to be told how many devices are still
1413
+ * waiting for a monitor.
1414
+ */
1415
+ for (const templateId of monitorsLeftPending) {
1249
1416
  result.isTruncated = true;
1250
- break;
1417
+
1418
+ const pendingKey: string =
1419
+ NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(
1420
+ networkDevice.id!,
1421
+ templateId,
1422
+ );
1423
+
1424
+ if (!pendingProvisioningKeys.has(pendingKey)) {
1425
+ pendingProvisioningKeys.add(pendingKey);
1426
+ result.monitorsPendingCreation++;
1427
+ }
1251
1428
  }
1252
1429
  }
1253
1430
 
1254
1431
  return createdIpAddresses;
1255
1432
  }
1256
1433
 
1434
+ /*
1435
+ * Reconcile one device against the templates the matched rules selected.
1436
+ *
1437
+ * Returns the template ids the run's budget left UNATTEMPTED — empty when
1438
+ * every requested monitor was settled, whether created, failed, or skipped
1439
+ * because monitoring already existed. A non-empty answer is what makes the
1440
+ * run report itself truncated; the ids (rather than a bare count) are what
1441
+ * let the caller count one device's leftover work once, however many
1442
+ * duplicate rows the scan lists that host under.
1443
+ */
1257
1444
  private async ensureMonitorsForDevice(data: {
1258
1445
  projectId: ObjectID;
1259
1446
  host: DiscoveredNetworkDevice;
@@ -1264,7 +1451,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1264
1451
  result: AutoImportRuleRunResult;
1265
1452
  attempts: ImportAttemptBudget;
1266
1453
  isDryRun: boolean;
1267
- }): Promise<boolean> {
1454
+ }): Promise<Array<string>> {
1268
1455
  /*
1269
1456
  * A Network Device monitor is fed by the device's polls, and nothing
1270
1457
  * polls a monitor-backed device — its bound monitor's status IS its
@@ -1281,7 +1468,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1281
1468
  )
1282
1469
  ) {
1283
1470
  data.result.monitorsSkippedUnsupportedHost += data.templateIds.length;
1284
- return false;
1471
+ return [];
1285
1472
  }
1286
1473
 
1287
1474
  if (!data.networkDevice.id) {
@@ -1290,7 +1477,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1290
1477
  `Auto-import: cannot provision monitor(s) for ${data.host.ipAddress} because the Network Device has no id.`,
1291
1478
  { projectId: data.projectId.toString() } as LogAttributes,
1292
1479
  );
1293
- return false;
1480
+ return [];
1294
1481
  }
1295
1482
 
1296
1483
  const networkDeviceId: ObjectID = data.networkDevice.id;
@@ -1323,25 +1510,76 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1323
1510
  }
1324
1511
 
1325
1512
  if (pendingTemplateIds.length === 0) {
1326
- return false;
1513
+ return [];
1327
1514
  }
1328
1515
 
1516
+ /*
1517
+ * The project-wide snapshot already knows this device is monitored by
1518
+ * hand, and that answer outranks any failure below: a device nobody was
1519
+ * going to provision cannot be a monitor this run failed to create. Read
1520
+ * from memory, so it stays ahead of the systemic verdicts.
1521
+ */
1329
1522
  if (
1330
1523
  data.existingMonitors.manuallyMonitoredDeviceIds.has(
1331
1524
  networkDeviceIdString,
1332
1525
  )
1333
1526
  ) {
1334
1527
  data.result.monitorsSkippedAlreadyExisting += pendingTemplateIds.length;
1335
- return false;
1528
+ return [];
1529
+ }
1530
+
1531
+ /*
1532
+ * Everything below here costs the run something — a monitor budget slot, a
1533
+ * per-device search of the unindexed monitor step payload, a create round
1534
+ * trip. None of it is worth spending on work this run has already proved
1535
+ * cannot succeed, so the two systemic verdicts are settled next: a
1536
+ * template this run could not load, and a create pipeline that has failed
1537
+ * identically for every device it tried.
1538
+ *
1539
+ * Both still COUNT the monitors that are missing. "0 created, and here is
1540
+ * why" is the answer; quietly reporting fewer missing monitors than there
1541
+ * are would trade one confusing dialog for another.
1542
+ */
1543
+ const resolvableTemplateIds: Array<string> = [];
1544
+
1545
+ for (const templateId of pendingTemplateIds) {
1546
+ if (
1547
+ !data.existingMonitors.isProvisioningHalted &&
1548
+ !data.existingMonitors.unresolvableTemplateIds.has(templateId)
1549
+ ) {
1550
+ resolvableTemplateIds.push(templateId);
1551
+ continue;
1552
+ }
1553
+
1554
+ /*
1555
+ * Counted once and then settled. Marking the (device, template) key
1556
+ * attempted is what keeps a host carried by two overlapping scans in the
1557
+ * same run from being counted as two missing monitors — the same
1558
+ * bookkeeping a real attempt does, for the same reason.
1559
+ */
1560
+ data.existingMonitors.attemptedProvisioningKeys.add(
1561
+ NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(
1562
+ networkDeviceId,
1563
+ templateId,
1564
+ ),
1565
+ );
1566
+ data.result.monitorsFailed++;
1567
+ data.result.monitorProvisioningHalted = true;
1568
+ }
1569
+
1570
+ if (resolvableTemplateIds.length === 0) {
1571
+ return [];
1336
1572
  }
1337
1573
 
1338
1574
  /*
1339
1575
  * Do not run the unindexed JSON race-check after this run's monitor-work
1340
1576
  * budget is already exhausted. The device remains unreconciled and the
1341
- * truncated marker protocol brings it back on the next bounded pass.
1577
+ * truncated marker protocol brings it back on the next bounded pass
1578
+ * counted, so the operator is told how many devices are still waiting
1579
+ * rather than left to infer it from a total that stopped early.
1342
1580
  */
1343
1581
  if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
1344
- return true;
1582
+ return resolvableTemplateIds;
1345
1583
  }
1346
1584
 
1347
1585
  if (!data.isDryRun) {
@@ -1357,43 +1595,74 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1357
1595
  networkDeviceIdString,
1358
1596
  )
1359
1597
  ) {
1360
- data.result.monitorsSkippedAlreadyExisting += pendingTemplateIds.length;
1361
- return false;
1598
+ data.result.monitorsSkippedAlreadyExisting +=
1599
+ resolvableTemplateIds.length;
1600
+ return [];
1362
1601
  }
1363
1602
 
1364
- for (const templateId of pendingTemplateIds) {
1603
+ for (let index: number = 0; index < resolvableTemplateIds.length; index++) {
1604
+ const templateId: string = resolvableTemplateIds[index]!;
1365
1605
  const key: string =
1366
1606
  NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(
1367
1607
  networkDeviceId,
1368
1608
  templateId,
1369
1609
  );
1370
1610
 
1611
+ /*
1612
+ * A create earlier in THIS device's loop can be the one that trips the
1613
+ * systemic verdict. The rest of its templates are then in exactly the
1614
+ * position of every device after it.
1615
+ */
1616
+ if (data.existingMonitors.isProvisioningHalted) {
1617
+ data.existingMonitors.attemptedProvisioningKeys.add(key);
1618
+ data.result.monitorsFailed++;
1619
+ data.result.monitorProvisioningHalted = true;
1620
+ continue;
1621
+ }
1622
+
1371
1623
  /* The race-check may have found this key after the initial snapshot. */
1372
1624
  if (data.existingMonitors.autoProvisionedKeys.has(key)) {
1373
1625
  data.result.monitorsSkippedAlreadyExisting++;
1374
1626
  continue;
1375
1627
  }
1376
1628
 
1629
+ /*
1630
+ * Budget spent mid-device. Everything from here on is untouched, so
1631
+ * that is exactly what is left pending for this device.
1632
+ */
1377
1633
  if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
1378
- return true;
1634
+ return resolvableTemplateIds.slice(index);
1379
1635
  }
1380
1636
 
1381
1637
  data.attempts.monitorCount++;
1382
1638
  data.existingMonitors.attemptedProvisioningKeys.add(key);
1383
1639
 
1384
1640
  /*
1385
- * Invalid or concurrently deleted templates are failed attempts too.
1386
- * Count them inside the same cap before looking up the cached template;
1387
- * otherwise one stale rule could walk and log an unbounded estate in a
1388
- * single API request or worker tick.
1641
+ * A template the run could not load is a fault in the RULE, not in this
1642
+ * host: the rule points at a template that has been deleted, moved to
1643
+ * another project, or changed to a different monitor type since the rule
1644
+ * was saved (the rule form validates all three, but only at save time).
1645
+ * It will be just as unloadable for every other device, so the verdict is
1646
+ * recorded once and every later host short-circuits above — instead of
1647
+ * spending the run's whole monitor budget re-proving it, which is what
1648
+ * turned this into "500 monitors failed, stopped at the run cap, run
1649
+ * again to continue" in issue #3643.
1389
1650
  */
1390
1651
  const template: MonitorTemplate | undefined =
1391
1652
  data.monitorTemplates.get(templateId);
1392
1653
 
1393
1654
  if (!template) {
1655
+ data.existingMonitors.unresolvableTemplateIds.add(templateId);
1394
1656
  data.result.monitorsFailed++;
1657
+ data.result.monitorProvisioningHalted = true;
1658
+ this.recordFailureReason(
1659
+ data.result.monitorFailureReasons,
1660
+ new Error(
1661
+ "This rule's Monitor Template could not be loaded. It may have been deleted, moved to another project, or changed to a monitor type other than Network Device. Edit the rule and select a Network Device Monitor Template.",
1662
+ ),
1663
+ );
1395
1664
  logger.error(
1396
- `Auto-import: Network Device monitor template ${templateId} is missing, deleted, or not valid for project ${data.projectId.toString()}.`,
1665
+ `Auto-import: Network Device monitor template ${templateId} is missing, deleted, or not valid for project ${data.projectId.toString()}. No monitors will be provisioned from it for the rest of this run.`,
1397
1666
  { projectId: data.projectId.toString() } as LogAttributes,
1398
1667
  );
1399
1668
  continue;
@@ -1421,6 +1690,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1421
1690
 
1422
1691
  data.existingMonitors.autoProvisionedKeys.add(key);
1423
1692
  data.result.monitorsCreated++;
1693
+ this.recordMonitorCreateSuccess(data.existingMonitors);
1424
1694
  } catch (error) {
1425
1695
  /*
1426
1696
  * The partial unique index is the final race backstop. If another
@@ -1452,19 +1722,87 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1452
1722
 
1453
1723
  if (data.existingMonitors.autoProvisionedKeys.has(key)) {
1454
1724
  data.result.monitorsSkippedAlreadyExisting++;
1725
+ /*
1726
+ * Losing this race proves the create pipeline works — somebody
1727
+ * else just used it — so it is not evidence of a systemic fault.
1728
+ */
1729
+ this.recordMonitorCreateSuccess(data.existingMonitors);
1455
1730
  continue;
1456
1731
  }
1457
1732
  }
1458
1733
 
1459
1734
  data.result.monitorsFailed++;
1735
+ this.recordFailureReason(data.result.monitorFailureReasons, error);
1460
1736
  logger.error(
1461
1737
  `Auto-import: could not create monitor from template ${templateId} for Network Device ${networkDeviceId.toString()} (${data.host.ipAddress}): ${error}`,
1462
1738
  { projectId: data.projectId.toString() } as LogAttributes,
1463
1739
  );
1740
+ this.recordMonitorCreateFailure({
1741
+ state: data.existingMonitors,
1742
+ result: data.result,
1743
+ projectId: data.projectId,
1744
+ error: error,
1745
+ });
1464
1746
  }
1465
1747
  }
1466
1748
 
1467
- return false;
1749
+ return [];
1750
+ }
1751
+
1752
+ /*
1753
+ * A create succeeded (or lost a race to another writer, which proves the
1754
+ * same thing): whatever the last failures were, they were not systemic, and
1755
+ * this run has now seen the create pipeline work at least once.
1756
+ */
1757
+ private recordMonitorCreateSuccess(
1758
+ state: ExistingMonitorProvisioningState,
1759
+ ): void {
1760
+ state.consecutiveCreateFailures = 0;
1761
+ state.lastCreateFailureReason = "";
1762
+ state.hasProvisionedAnyMonitor = true;
1763
+ }
1764
+
1765
+ /*
1766
+ * Decide whether one monitor create failure is this host's problem or the
1767
+ * whole run's. The bar is deliberately high, because giving up early on a
1768
+ * per-host fault would silently cost an estate its monitors — the failure
1769
+ * this fix exists to make visible. All three must hold: the run has never
1770
+ * created a monitor, the last MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES
1771
+ * attempts all failed, and they all failed with the SAME message.
1772
+ */
1773
+ private recordMonitorCreateFailure(data: {
1774
+ state: ExistingMonitorProvisioningState;
1775
+ result: AutoImportRuleRunResult;
1776
+ projectId: ObjectID;
1777
+ error: unknown;
1778
+ }): void {
1779
+ const reason: string = this.describeError(data.error);
1780
+
1781
+ if (reason && reason === data.state.lastCreateFailureReason) {
1782
+ data.state.consecutiveCreateFailures++;
1783
+ } else {
1784
+ data.state.lastCreateFailureReason = reason;
1785
+ data.state.consecutiveCreateFailures = 1;
1786
+ }
1787
+
1788
+ if (data.state.hasProvisionedAnyMonitor) {
1789
+ return;
1790
+ }
1791
+
1792
+ if (
1793
+ data.state.consecutiveCreateFailures <
1794
+ MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES
1795
+ ) {
1796
+ return;
1797
+ }
1798
+
1799
+ data.state.isProvisioningHalted = true;
1800
+ data.result.monitorProvisioningHalted = true;
1801
+
1802
+ logger.error(
1803
+ `Auto-import: ${MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES} Network Device monitor creates failed identically for project ${data.projectId.toString()} with none succeeding ("${reason}"). Treating this as a systemic failure and provisioning no further monitors this run.`,
1804
+ { projectId: data.projectId.toString() } as LogAttributes,
1805
+ );
1468
1806
  }
1469
1807
 
1470
1808
  /*
@@ -1549,6 +1887,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1549
1887
  createdDevice = await attemptCreate(buildFallbackDeviceName(data.host));
1550
1888
  } catch (secondError) {
1551
1889
  data.result.devicesFailed++;
1890
+ this.recordFailureReason(data.result.deviceFailureReasons, secondError);
1552
1891
  logger.error(
1553
1892
  `Auto-import: could not create a device for ${data.host.ipAddress} (scan ${data.scan.id?.toString()}): ${firstError} / retry: ${secondError}`,
1554
1893
  { projectId: data.projectId.toString() } as LogAttributes,
@@ -1566,20 +1905,20 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1566
1905
  /*
1567
1906
  * The one write this engine makes to the scan row: retire the consumed
1568
1907
  * hosts in the stored jsonb (so the Review dialog stops offering them) and
1569
- * stamp the processed marker — in a single hook-free compare-and-set on
1570
- * (status, completedAt), for the reasons on processCompletedScan. The
1908
+ * stamp the processed marker — in a single hook-free compare-and-set on the
1909
+ * run state that was read, for the reasons on processCompletedScan. The
1571
1910
  * claim endpoint's hook-free contract is why this must never go through
1572
1911
  * updateOneById: the scan service deliberately has no update-success hooks
1573
1912
  * to piggyback on, and this write must not fire the full pipeline on every
1574
1913
  * worker tick.
1575
1914
  *
1576
1915
  * The CAS defends against exactly one concurrent writer — the ingest
1577
- * endpoint, which rewrites completedAt with every upload. It cannot
1578
- * defend against another ENGINE write (which changes neither status nor
1579
- * completedAt), and does not need to: every path that reaches this method
1580
- * holds the sweep lock (the worker for its whole sweep, Run Now for a
1581
- * real run; dry runs never write), so the full-array replace below always
1582
- * has the row's only engine writer. Weaken that invariant and this
1916
+ * endpoint, which rewrites completedAt with a final upload and the host
1917
+ * counters with a partial one. It cannot defend against another ENGINE
1918
+ * write (which changes none of those columns), and does not need to: every
1919
+ * path that reaches this method holds the sweep lock (the worker for its
1920
+ * whole sweep, Run Now for a real run; dry runs never write), so the
1921
+ * full-array replace below always has the row's only engine writer. Weaken that invariant and this
1583
1922
  * becomes last-writer-wins on the isAlreadyRegistered flips.
1584
1923
  */
1585
1924
  private async stampScan(data: {
@@ -1632,8 +1971,30 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
1632
1971
  // Cast: the model's JSON column makes DeepPartial recursion blow up.
1633
1972
  data: payload as unknown as QueryDeepPartialEntity<NetworkDeviceDiscoveryScan>,
1634
1973
  expectedData: {
1635
- status: "Completed",
1974
+ /*
1975
+ * The scan's own status, not the literal "Completed" this used to
1976
+ * pin. A scan that is still sweeping is importable now (issue
1977
+ * #3599), and its status is exactly the thing that changes when its
1978
+ * run ends — so reading it off the row keeps the guard doing what it
1979
+ * always did rather than making an In Progress stamp always miss.
1980
+ */
1981
+ status: data.scan.status ?? null,
1636
1982
  completedAt: data.scan.completedAt || null,
1983
+ /*
1984
+ * The counters a running scan's partial uploads move, so a partial
1985
+ * landing between the read and this write is caught the way a
1986
+ * completion is: the stamp misses, the marker stays NULL, and the
1987
+ * next tick processes the newer host list.
1988
+ *
1989
+ * Not a perfect version token for an in-progress scan — the
1990
+ * ICMP-filtered fallback pass finds hosts without advancing
1991
+ * scannedHostCount, so two partials can carry both counts unchanged.
1992
+ * The consequence is bounded and self-healing: one batch of hosts
1993
+ * waits for the next partial upload (which clears the marker again),
1994
+ * and the run's final result clears it unconditionally.
1995
+ */
1996
+ scannedHostCount: data.scan.scannedHostCount ?? null,
1997
+ respondedHostCount: data.scan.respondedHostCount ?? null,
1637
1998
  } as unknown as QueryDeepPartialEntity<NetworkDeviceDiscoveryScan>,
1638
1999
  });
1639
2000
  }