@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.
- package/Models/AnalyticsModels/RumSession.ts +117 -1
- package/Models/AnalyticsModels/RumSessionChunk.ts +13 -0
- package/Models/DatabaseModels/AlertCustomField.ts +77 -3
- package/Models/DatabaseModels/ApiKeyPermission.ts +3 -27
- package/Models/DatabaseModels/GlobalConfig.ts +12 -12
- package/Models/DatabaseModels/IncidentCustomField.ts +77 -3
- package/Models/DatabaseModels/InventoryItem.ts +44 -1
- package/Models/DatabaseModels/InventoryItemCustomField.ts +77 -3
- package/Models/DatabaseModels/MonitorCustomField.ts +77 -3
- package/Models/DatabaseModels/NetworkDevice.ts +126 -0
- package/Models/DatabaseModels/OnCallDutyPolicyCustomField.ts +77 -3
- package/Models/DatabaseModels/RumApplication.ts +6 -6
- package/Models/DatabaseModels/ScheduledMaintenanceCustomField.ts +77 -3
- package/Models/DatabaseModels/StatusPageCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamMember.ts +0 -9
- package/Models/DatabaseModels/TeamMemberCustomField.ts +77 -3
- package/Models/DatabaseModels/TeamPermission.ts +3 -24
- package/Models/DatabaseModels/TelemetryIngestionKey.ts +260 -0
- package/Models/DatabaseModels/UserTelegram.ts +0 -4
- package/Scripts/benchmark-fanin-capacity.js +181 -0
- package/Server/API/TelemetryAPI.ts +1284 -164
- package/Server/API/UserNotificationSettingAPI.ts +55 -0
- package/Server/API/UserTelegramAPI.ts +48 -4
- package/Server/EnvironmentConfig.ts +82 -18
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.ts +91 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.ts +67 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.ts +139 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.ts +121 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Infrastructure/QueueWorker.ts +20 -14
- package/Server/Infrastructure/Redis.ts +8 -8
- package/Server/Infrastructure/Semaphore.ts +2 -0
- package/Server/Infrastructure/Status.ts +10 -4
- package/Server/Middleware/TelemetryIngest.ts +453 -7
- package/Server/Services/AccessTokenService.ts +1 -0
- package/Server/Services/AlertCustomFieldService.ts +98 -0
- package/Server/Services/AlertService.ts +37 -0
- package/Server/Services/ApiKeyPermissionService.ts +461 -29
- package/Server/Services/CustomFieldMappingService.ts +879 -0
- package/Server/Services/DatabaseService.ts +65 -13
- package/Server/Services/GlobalConfigService.ts +194 -0
- package/Server/Services/IncidentCustomFieldService.ts +98 -0
- package/Server/Services/IncidentService.ts +35 -0
- package/Server/Services/InventoryItemService.ts +31 -1
- package/Server/Services/MetricService.ts +194 -0
- package/Server/Services/MonitorService.ts +32 -0
- package/Server/Services/MonitorTemplateService.ts +140 -19
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +427 -66
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +87 -2
- package/Server/Services/NetworkDeviceService.ts +69 -0
- package/Server/Services/ProjectService.ts +22 -0
- package/Server/Services/RoutineEmailSettingsService.ts +73 -0
- package/Server/Services/RumSessionReplayViewService.ts +104 -24
- package/Server/Services/ScheduledMaintenanceCustomFieldService.ts +98 -0
- package/Server/Services/ScheduledMaintenanceService.ts +32 -0
- package/Server/Services/TeamMemberService.ts +78 -0
- package/Server/Services/TeamPermissionService.ts +235 -3
- package/Server/Services/TelemetryIngestionKeyService.ts +722 -19
- package/Server/Services/UserNotificationRuleService.ts +76 -25
- package/Server/Services/UserNotificationSettingService.ts +34 -6
- package/Server/Services/UserTelegramService.ts +326 -5
- package/Server/Types/Database/Permissions/ReadPermission.ts +45 -5
- package/Server/Types/Database/QueryHelper.ts +2 -0
- package/Server/Types/Database/QueryUtil.ts +56 -0
- package/Server/Types/Markdown.ts +93 -1
- package/Server/Utils/APIKey/AccessPermission.ts +5 -2
- package/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.ts +54 -0
- package/Server/Utils/CustomField/CustomFieldMappingRegistry.ts +415 -0
- package/Server/Utils/CustomField/CustomFieldMappingValidator.ts +335 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +82 -17
- package/Server/Utils/DataSource/EgressGuard.ts +177 -8
- package/Server/Utils/EmailRollup/EmailRollupConstants.ts +38 -5
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +67 -5
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +2 -2
- package/Server/Utils/FrontendEnvironment.ts +40 -0
- package/Server/Utils/LogRedaction.ts +20 -0
- package/Server/Utils/Logger.ts +11 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +394 -86
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +30 -4
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +31 -5
- package/Server/Utils/Monitor/MonitorAlert.ts +29 -6
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +312 -52
- package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +82 -9
- package/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.ts +16 -7
- package/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.ts +29 -17
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +107 -48
- package/Server/Utils/Monitor/MonitorIncident.ts +22 -6
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +29 -0
- package/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.ts +158 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +27 -0
- package/Server/Utils/Monitor/SeriesContextEnricher.ts +304 -0
- package/Server/Utils/SSRFProtection.ts +217 -10
- package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +239 -138
- package/Server/Utils/SessionReplay/SessionReplayHealthCounters.ts +305 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +1430 -289
- package/Server/Utils/StartServer.ts +2 -17
- package/Server/Utils/TelegramVerificationToken.ts +185 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +11 -1
- package/Server/Utils/Telemetry/PinServiceName.ts +197 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +83 -9
- package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +38 -16
- package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +92 -0
- package/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.ts +217 -0
- package/Server/Utils/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +975 -95
- package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +202 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +32 -0
- package/Tests/App/Dashboard/AdoptedDeviceDrawer.test.tsx +374 -0
- package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +404 -0
- package/Tests/App/Dashboard/DashboardLabelVariables.test.tsx +580 -0
- package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +438 -0
- package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +5 -2
- package/Tests/App/Dashboard/DeviceAttachmentCard.test.tsx +273 -0
- package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +505 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +468 -0
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +163 -0
- package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +401 -0
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +232 -0
- package/Tests/App/Dashboard/InventoryItems.test.tsx +201 -0
- package/Tests/App/Dashboard/InventoryTypeAndStatusFacets.test.tsx +798 -0
- package/Tests/App/Dashboard/NetworkTopologyLiveView.test.tsx +320 -0
- package/Tests/App/Dashboard/NetworkTopologyToolbar.test.tsx +275 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedEmptyState.test.tsx +975 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +63 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +626 -0
- package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +348 -0
- package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +331 -0
- package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +603 -0
- package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +324 -0
- package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +13 -4
- package/Tests/App/StatusPage/StatusPageLastUpdated.test.tsx +263 -0
- package/Tests/App/StatusPage/StatusPageOidcOrigin.test.tsx +223 -0
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +753 -0
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +224 -0
- package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +262 -0
- package/Tests/Models/CustomFieldMappingColumns.test.ts +166 -0
- package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +20 -6
- package/Tests/Models/InventoryItemStatus.test.ts +147 -0
- package/Tests/Models/NetworkDeviceMacAddressColumn.test.ts +294 -0
- package/Tests/ResponsiveVisibility.test.ts +115 -0
- package/Tests/ResponsiveVisibility.ts +183 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +129 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +1940 -216
- package/Tests/Server/API/UserNotificationSettingAPI.test.ts +186 -0
- package/Tests/Server/API/UserTelegramAPISecurity.test.ts +231 -0
- package/Tests/Server/EnvironmentConfigFrontendSecurity.test.ts +234 -0
- package/Tests/Server/EnvironmentConfigValkey.test.ts +227 -0
- package/Tests/Server/Infrastructure/Postgres/AddMacAddressToNetworkDeviceMigration.test.ts +365 -0
- package/Tests/Server/Infrastructure/Postgres/CustomFieldValueMappingMigration.test.ts +241 -0
- package/Tests/Server/Infrastructure/Postgres/InventoryItemArchiveMigration.test.ts +41 -0
- package/Tests/Server/Infrastructure/Postgres/SessionReplayRecordEverySessionByDefaultMigration.test.ts +169 -0
- package/Tests/Server/Infrastructure/QueueWorkerTimeout.test.ts +210 -0
- package/Tests/Server/Infrastructure/TelemetryExporterDeploymentConfig.test.ts +130 -0
- package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +265 -0
- package/Tests/Server/Middleware/HttpMetricsMiddleware.test.ts +382 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +4 -1
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +525 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +1163 -0
- package/Tests/Server/Middleware/TelemetryIngestTokenLog.test.ts +5 -3
- package/Tests/Server/Services/AddTelemetryIngestionKeyTypeMigration.test.ts +555 -0
- package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +678 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +276 -28
- package/Tests/Server/Services/CustomFieldDropdownOptionsColumnWidth.test.ts +431 -0
- package/Tests/Server/Services/CustomFieldMappingService.test.ts +850 -0
- package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +291 -56
- package/Tests/Server/Services/DatabaseServiceSortTiebreaker.test.ts +151 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +32 -0
- package/Tests/Server/Services/GlobalConfigService.test.ts +414 -1
- package/Tests/Server/Services/InventoryItemManualCreate.test.ts +105 -0
- package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +178 -0
- package/Tests/Server/Services/MetricRawEntityKeyPrune.test.ts +592 -0
- package/Tests/Server/Services/MonitorTemplateServiceCustomFieldSync.test.ts +502 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1351 -74
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanRegistration.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceMacAddressNormalization.test.ts +572 -0
- package/Tests/Server/Services/RoutineEmailSettingsPostgres.test.ts +329 -0
- package/Tests/Server/Services/RumSessionReplayViewService.test.ts +267 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +9 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +9 -0
- package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +834 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +814 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +998 -0
- package/Tests/Server/Services/UserNotificationSettingRollupRouting.test.ts +141 -0
- package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +18 -10
- package/Tests/Server/Services/UserTelegramVerificationSecurity.test.ts +688 -0
- package/Tests/Server/Types/Database/InventoryStatusPostgres.test.ts +368 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +261 -14
- package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroups.test.ts +169 -0
- package/Tests/Server/Types/Database/QueryUtilIncludesAnyOfGroupsPostgres.test.ts +297 -0
- package/Tests/Server/Types/Markdown.test.ts +194 -1
- package/Tests/Server/Types/Workflow/Components/IncomingWebhookUtils.test.ts +279 -0
- package/Tests/Server/Types/Workflow/Components/TextToJson.test.ts +212 -0
- package/Tests/Server/Utils/AI/SRE/Insights/FixRouting.test.ts +497 -0
- package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +383 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +7 -3
- package/Tests/Server/Utils/AnalyticsDatabase/ClusterConfig.test.ts +315 -0
- package/Tests/Server/Utils/CustomField/CustomFieldMappingRegistry.test.ts +436 -0
- package/Tests/Server/Utils/CustomField/CustomFieldMappingValidator.test.ts +437 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +214 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +300 -11
- package/Tests/Server/Utils/EmailRollup/EmailRollupBurstWindow.test.ts +83 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +2 -2
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerPreferences.test.ts +362 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +10 -3
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +77 -1
- package/Tests/Server/Utils/EventLoop.test.ts +359 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +190 -0
- package/Tests/Server/Utils/JsonWebToken.test.ts +30 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +26 -0
- package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +23 -9
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +242 -0
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +590 -0
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +29 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestHeaderCriteria.test.ts +236 -0
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +30 -6
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +246 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEmailEvalLogAgreement.test.ts +280 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +659 -8
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorMetricUnits.test.ts +570 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilderUnits.test.ts +30 -5
- package/Tests/Server/Utils/Monitor/MonitorCriteriaMessageBuilderUnits.test.ts +68 -21
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +36 -19
- package/Tests/Server/Utils/Monitor/MonitorTemplateUtilSeriesContext.test.ts +176 -0
- package/Tests/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.test.ts +573 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +317 -0
- package/Tests/Server/Utils/Monitor/SeriesContextEnricher.test.ts +356 -0
- package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +595 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +198 -1
- package/Tests/Server/Utils/SessionReplay/SessionReplayHealthCounters.test.ts +453 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1378 -0
- package/Tests/Server/Utils/SessionReplayOriginAllowListRefactor.test.ts +420 -0
- package/Tests/Server/Utils/TelegramVerificationToken.test.ts +253 -0
- package/Tests/Server/Utils/Telemetry/ContextSpanProcessor.test.ts +281 -0
- package/Tests/Server/Utils/Telemetry/InventoryDuplicateIdentity.test.ts +316 -0
- package/Tests/Server/Utils/Telemetry/PinServiceName.test.ts +666 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +111 -8
- package/Tests/Server/Utils/Telemetry/TelemetryFanInWriterCapacity.test.ts +458 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +424 -0
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.test.ts +528 -0
- package/Tests/Server/Utils/TelemetryExporterEnvironment.test.ts +56 -0
- package/Tests/Server/Utils/VM/VMRunnerHostBridgeLatency.test.ts +74 -0
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +100 -7
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +1176 -6
- package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +220 -0
- package/Tests/Types/CustomField/CustomFieldValueMapping.test.ts +348 -0
- package/Tests/Types/Database/IncludesAnyOfGroups.test.ts +106 -0
- package/Tests/Types/JSONFunctions.test.ts +300 -0
- package/Tests/Types/Monitor/CephAlertTemplates.test.ts +422 -53
- package/Tests/Types/Monitor/DockerAlertTemplates.test.ts +495 -15
- package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +191 -45
- package/Tests/Types/Monitor/HostAlertTemplates.test.ts +370 -42
- package/Tests/Types/Monitor/IotAlertTemplates.test.ts +375 -20
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +636 -42
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +189 -0
- package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +95 -14
- package/Tests/Types/Monitor/PodmanAlertTemplates.test.ts +190 -21
- package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +352 -22
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +363 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +93 -18
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +259 -0
- package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +476 -0
- package/Tests/Types/Monitor/RumAlertTemplates.test.ts +136 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +661 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +507 -0
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +270 -0
- package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +38 -10
- package/Tests/Types/Monitor/Utils/RecommendationCriteriaAssertions.ts +102 -0
- package/Tests/Types/NetworkAutomation/AutoImportRunMerge.test.ts +235 -0
- package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +66 -0
- package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +309 -1
- package/Tests/Types/NotificationSetting/RoutineEmailEvents.test.ts +47 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +608 -0
- package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +434 -0
- package/Tests/Types/Telemetry/InventoryLiveness.test.ts +99 -0
- package/Tests/Types/WebsiteRequest.test.ts +285 -3
- package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +16 -3
- package/Tests/UI/Components/Charts/ChartTrailingBucketGap.test.ts +691 -0
- package/Tests/UI/Components/ComponentsModal.test.tsx +12 -4
- package/Tests/UI/Components/ComponentsModalUsability.test.tsx +518 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +160 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetailMapping.test.tsx +324 -0
- package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +176 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +484 -0
- package/Tests/UI/Components/HeaderRightRail.test.tsx +157 -0
- package/Tests/UI/Components/IconDropdownItem.test.tsx +102 -0
- package/Tests/UI/Components/JSONTablePrototypePollution.test.tsx +117 -0
- package/Tests/UI/Components/KeyboardShortcutsModal.test.tsx +214 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +561 -0
- package/Tests/UI/Components/MonitorGraphs/UptimeBarDayModal.test.tsx +302 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +28 -12
- package/Tests/UI/Components/ShortcutDialogGuard.test.tsx +74 -0
- package/Tests/UI/Components/StatusPage/ResourceGroupSectionAutoExpand.test.tsx +248 -0
- package/Tests/UI/Components/TableCellWrapping.test.tsx +625 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +205 -0
- package/Tests/UI/Components/Workflow/NodePlacement.test.ts +148 -0
- package/Tests/UI/Components/Workflow/Workflow.test.tsx +981 -0
- package/Tests/UI/ConfigBrowserTelemetry.test.ts +70 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +133 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +1036 -2
- package/Tests/UI/Rum/FidelityNotices.test.ts +187 -0
- package/Tests/UI/Rum/InactivityMap.test.ts +341 -0
- package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +259 -0
- package/Tests/UI/Rum/RecordingHealthCard.test.tsx +855 -0
- package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +594 -0
- package/Tests/UI/Rum/ReplayCard.test.tsx +451 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +536 -0
- package/Tests/UI/Rum/ReplayEngine.test.ts +2503 -0
- package/Tests/UI/Rum/ReplayEngineTypes.test.ts +171 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +719 -0
- package/Tests/UI/Rum/ReplayLink.test.tsx +119 -0
- package/Tests/UI/Rum/ReplayPinControl.test.tsx +408 -0
- package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +152 -0
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +514 -0
- package/Tests/UI/Rum/ReplayRail.test.tsx +1296 -0
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +900 -0
- package/Tests/UI/Rum/ReplayScrubber.test.tsx +763 -147
- package/Tests/UI/Rum/ReplaySignalTypes.test.ts +189 -0
- package/Tests/UI/Rum/ReplaySignals.test.ts +1579 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +396 -473
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +918 -0
- package/Tests/UI/Rum/ReplayTimeFormat.test.ts +94 -0
- package/Tests/UI/Rum/ReplayTimeline.test.tsx +696 -0
- package/Tests/UI/Rum/ReplayUi.test.tsx +559 -0
- package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +499 -0
- package/Tests/UI/Rum/SessionReplaySearchBar.test.tsx +346 -0
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +545 -0
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +991 -0
- package/Tests/UI/Rum/TargetedCapturePanel.test.tsx +254 -0
- package/Tests/UI/Telemetry/BrowserExporterIsolation.test.ts +71 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +5 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +1 -0
- package/Tests/UI/Utils/GlobalKeyboardShortcut.test.ts +344 -0
- package/Tests/Utils/API.test.ts +308 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +11 -1
- package/Tests/Utils/Dashboard/LabelVariable.test.ts +257 -0
- package/Tests/Utils/Dashboard/VariableUrlState.test.ts +144 -14
- package/Tests/Utils/HTTPResponseBodyReader.test.ts +323 -0
- package/Tests/Utils/MetricUnitUtil.test.ts +81 -0
- package/Tests/Utils/Monitor/DeviceMacLearningUtil.test.ts +497 -0
- package/Tests/Utils/Monitor/MetricValueFormatter.test.ts +546 -0
- package/Tests/Utils/Monitor/MonitorTemplateCustomFieldUtil.test.ts +218 -0
- package/Tests/Utils/Monitor/NetworkTopologyEndpointAdoption.test.ts +1755 -0
- package/Tests/Utils/NetworkAutomation/AutoImportRunChain.test.ts +320 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryScanStatus.test.ts +117 -0
- package/Tests/Utils/Rum/ChunkMath.test.ts +83 -0
- package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +993 -0
- package/Tests/Utils/Rum/SessionReplayStringMap.test.ts +245 -0
- package/Tests/Utils/StatusPage/ResourceSearch.test.ts +631 -0
- package/Tests/Utils/Telemetry/OriginAllowList.test.ts +633 -0
- package/Tests/Utils/Uptime/DayUptimeGraphUtil.test.ts +461 -0
- package/Tests/Utils/ValueFormatter.test.ts +148 -0
- package/Types/BaseDatabase/IncludesAnyOfGroups.ts +77 -0
- package/Types/CustomField/CustomFieldMappingCatalog.ts +161 -0
- package/Types/CustomField/CustomFieldMappingSourceResource.ts +19 -0
- package/Types/CustomField/CustomFieldValueMapping.ts +288 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardMonitorListComponent.ts +1 -0
- package/Types/Dashboard/DashboardVariable.ts +8 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/JSON.ts +4 -0
- package/Types/JSONFunctions.ts +205 -43
- package/Types/Monitor/CephAlertTemplates.ts +157 -195
- package/Types/Monitor/DockerAlertTemplates.ts +338 -128
- package/Types/Monitor/DockerSwarmAlertTemplates.ts +95 -112
- package/Types/Monitor/HostAlertTemplates.ts +302 -130
- package/Types/Monitor/IotAlertTemplates.ts +112 -104
- package/Types/Monitor/KubernetesAlertTemplates.ts +415 -224
- package/Types/Monitor/KubernetesMetricCatalog.ts +23 -19
- package/Types/Monitor/PodmanAlertTemplates.ts +116 -163
- package/Types/Monitor/ProxmoxAlertTemplates.ts +217 -99
- package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +98 -6
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +44 -7
- package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +383 -0
- package/Types/Monitor/RumAlertTemplates.ts +46 -7
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +596 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +554 -0
- package/Types/Monitor/ServiceAlertTemplates.ts +98 -11
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +13 -0
- package/Types/Monitor/UptimeHistoryLabels.ts +56 -0
- package/Types/NetworkAutomation/RuleRunResult.ts +402 -13
- package/Types/NotificationSetting/RoutineEmailEvents.ts +30 -0
- package/Types/Rum/SessionReplay.ts +209 -0
- package/Types/Rum/SessionReplayApi.ts +722 -0
- package/Types/Rum/SessionReplayCaptureTrigger.ts +21 -12
- package/Types/Rum/SessionReplayConsentMode.ts +11 -7
- package/Types/Rum/SessionReplayCustomEvents.ts +549 -0
- package/Types/Rum/SessionReplayHealth.ts +238 -0
- package/Types/SerializableObjectDictionary.ts +4 -0
- package/Types/Telemetry/InventoryLiveness.ts +56 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +95 -0
- package/Types/Telemetry/TelemetryIngestionKeyPolicy.ts +75 -0
- package/Types/Telemetry/TelemetryIngestionKeyType.ts +29 -0
- package/Types/WebsiteRequest.ts +85 -3
- package/UI/Components/CSVFileUpload/CSVFileUpload.tsx +9 -2
- package/UI/Components/Charts/Area/AreaChart.tsx +13 -2
- package/UI/Components/Charts/Bar/BarChart.tsx +6 -2
- package/UI/Components/Charts/Line/LineChart.tsx +13 -2
- package/UI/Components/Charts/Types/XAxis/XAxis.ts +29 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +22 -3
- package/UI/Components/Charts/Utils/TimeAnnotation.ts +76 -9
- package/UI/Components/Charts/Utils/XAxis.ts +217 -0
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +189 -46
- package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +216 -0
- package/UI/Components/Dashboard/DashboardVariableControl.tsx +285 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +173 -8
- package/UI/Components/Graphs/UptimeBarTooltip.tsx +22 -278
- package/UI/Components/Graphs/UptimeDaySummary.tsx +327 -0
- package/UI/Components/Header/Header.tsx +25 -9
- package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +10 -1
- package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +6 -1
- package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -1
- package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +6 -1
- package/UI/Components/Icon/Icon.tsx +11 -0
- package/UI/Components/JSONTable/JSONTable.tsx +2 -2
- package/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.tsx +125 -0
- package/UI/Components/KeyboardShortcut/Screenshots/README.md +19 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-command-palette.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog-dark.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-dialog.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-help-menu.png +0 -0
- package/UI/Components/KeyboardShortcut/Screenshots/keyboard-shortcuts-narrow.png +0 -0
- package/UI/Components/ModelTable/Column.ts +15 -0
- package/UI/Components/Monitor/SeriesDebugCommandsViewer.tsx +64 -0
- package/UI/Components/Monitor/SeriesLabelsViewer.tsx +93 -0
- package/UI/Components/MonitorGraphs/Uptime.tsx +14 -2
- package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +63 -10
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +44 -0
- package/UI/Components/StatusPage/ResourceGroupSection.tsx +40 -0
- package/UI/Components/Table/CellClassName.ts +81 -0
- package/UI/Components/Table/TableRow.tsx +20 -14
- package/UI/Components/Table/TableSkeletonRows.tsx +9 -9
- package/UI/Components/Table/Types/Column.ts +36 -0
- package/UI/Components/Tooltip/Tooltip.tsx +11 -1
- package/UI/Components/Workflow/ComponentsModal.tsx +60 -39
- package/UI/Components/Workflow/NodePlacement.ts +57 -0
- package/UI/Components/Workflow/Workflow.tsx +47 -18
- package/UI/Config.ts +15 -33
- package/UI/Utils/GlobalKeyboardShortcut.ts +208 -0
- package/UI/Utils/Telemetry/BrowserTelemetryConfig.ts +28 -0
- package/UI/Utils/Telemetry/Telemetry.ts +10 -8
- package/UI/esbuild-config.js +6 -0
- package/Utils/API.ts +129 -3
- package/Utils/Dashboard/Components/DashboardMonitorListComponent.ts +12 -1
- package/Utils/Dashboard/LabelVariable.ts +152 -0
- package/Utils/Dashboard/VariableUrlState.ts +27 -5
- package/Utils/HTTPResponseBodyReader.ts +221 -0
- package/Utils/MetricUnitUtil.ts +34 -0
- package/Utils/Monitor/DeviceMacLearningUtil.ts +177 -0
- package/Utils/Monitor/MetricValueFormatter.ts +342 -0
- package/Utils/Monitor/MonitorTemplateCustomFieldUtil.ts +124 -0
- package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +7 -2
- package/Utils/Monitor/NetworkTopologyUtil.ts +693 -0
- package/Utils/NetworkAutomation/AutoImportRunChain.ts +138 -0
- package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +77 -0
- package/Utils/Rum/ChunkMath.ts +106 -0
- package/Utils/Rum/SessionReplayHealth.ts +732 -0
- package/Utils/Rum/SessionReplayStringMap.ts +226 -0
- package/Utils/Schema/ModelSchema.ts +1 -0
- package/Utils/StatusPage/ResourceSearch.ts +290 -0
- package/Utils/Telemetry/OriginAllowList.ts +355 -0
- package/Utils/Uptime/DayUptimeGraphUtil.ts +205 -0
- package/Utils/ValueFormatter.ts +35 -1
- package/build/dist/Models/AnalyticsModels/RumSession.js +102 -19
- package/build/dist/Models/AnalyticsModels/RumSession.js.map +1 -1
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js +11 -9
- package/build/dist/Models/AnalyticsModels/RumSessionChunk.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/AlertCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ApiKeyPermission.js +3 -27
- package/build/dist/Models/DatabaseModels/ApiKeyPermission.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +12 -12
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InventoryItem.js +34 -1
- package/build/dist/Models/DatabaseModels/InventoryItem.js.map +1 -1
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/InventoryItemCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/MonitorCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +128 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +6 -6
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/StatusPageCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/TeamCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMember.js +0 -9
- package/build/dist/Models/DatabaseModels/TeamMember.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js +79 -3
- package/build/dist/Models/DatabaseModels/TeamMemberCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamPermission.js +3 -24
- package/build/dist/Models/DatabaseModels/TeamPermission.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +267 -0
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserTelegram.js +0 -4
- package/build/dist/Models/DatabaseModels/UserTelegram.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +769 -109
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationSettingAPI.js +35 -0
- package/build/dist/Server/API/UserNotificationSettingAPI.js.map +1 -0
- package/build/dist/Server/API/UserTelegramAPI.js +28 -6
- package/build/dist/Server/API/UserTelegramAPI.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +73 -14
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js +60 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791300000000-AddTelemetryIngestionKeyType.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js +53 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791400000000-SessionReplayRecordEverySessionByDefault.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js +82 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791500000000-WidenCustomFieldDropdownOptions.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js +46 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791600000000-AddCustomFieldValueMapping.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/QueueWorker.js +19 -7
- package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
- package/build/dist/Server/Infrastructure/Redis.js +8 -8
- package/build/dist/Server/Infrastructure/Redis.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +1 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Infrastructure/Status.js +10 -4
- package/build/dist/Server/Infrastructure/Status.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +315 -8
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AccessTokenService.js +1 -0
- package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
- package/build/dist/Server/Services/AlertCustomFieldService.js +93 -0
- package/build/dist/Server/Services/AlertCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +34 -0
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +331 -28
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/CustomFieldMappingService.js +614 -0
- package/build/dist/Server/Services/CustomFieldMappingService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseService.js +58 -13
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +133 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +93 -0
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +32 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemService.js +28 -1
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
- package/build/dist/Server/Services/MetricService.js +163 -0
- package/build/dist/Server/Services/MetricService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +29 -0
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +116 -17
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +349 -64
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +65 -0
- package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceService.js +54 -0
- package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +22 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RoutineEmailSettingsService.js +69 -0
- package/build/dist/Server/Services/RoutineEmailSettingsService.js.map +1 -0
- package/build/dist/Server/Services/RumSessionReplayViewService.js +86 -24
- package/build/dist/Server/Services/RumSessionReplayViewService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js +93 -0
- package/build/dist/Server/Services/ScheduledMaintenanceCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +29 -0
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +62 -2
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamPermissionService.js +166 -3
- package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +562 -18
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +60 -25
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +26 -6
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserTelegramService.js +257 -4
- package/build/dist/Server/Services/UserTelegramService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js +29 -4
- package/build/dist/Server/Types/Database/Permissions/ReadPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryUtil.js +36 -0
- package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +75 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/APIKey/AccessPermission.js +2 -2
- package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
- package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js +27 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldDefinitionMappingHooks.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js +226 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingRegistry.js.map +1 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js +189 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldMappingValidator.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +53 -18
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +121 -7
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js +38 -5
- package/build/dist/Server/Utils/EmailRollup/EmailRollupConstants.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +54 -3
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +2 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
- package/build/dist/Server/Utils/FrontendEnvironment.js +33 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -0
- package/build/dist/Server/Utils/LogRedaction.js +20 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Logger.js +10 -0
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +323 -81
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +20 -4
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +29 -5
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +29 -6
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +254 -48
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +58 -9
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js +9 -3
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js +26 -12
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaMessageFormatter.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +74 -33
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +22 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js +114 -0
- package/build/dist/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +25 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js +237 -0
- package/build/dist/Server/Utils/Monitor/SeriesContextEnricher.js.map +1 -0
- package/build/dist/Server/Utils/SSRFProtection.js +136 -9
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +174 -89
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js +223 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayHealthCounters.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +945 -164
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +3 -14
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/TelegramVerificationToken.js +129 -0
- package/build/dist/Server/Utils/TelegramVerificationToken.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +9 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/PinServiceName.js +163 -0
- package/build/dist/Server/Utils/Telemetry/PinServiceName.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +70 -13
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +28 -15
- package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +64 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js +171 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyRateLimiter.js.map +1 -0
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +780 -69
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js +54 -0
- package/build/dist/Types/BaseDatabase/IncludesAnyOfGroups.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +60 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js +20 -0
- package/build/dist/Types/CustomField/CustomFieldMappingSourceResource.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldValueMapping.js +141 -0
- package/build/dist/Types/CustomField/CustomFieldValueMapping.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardVariable.js +1 -0
- package/build/dist/Types/Dashboard/DashboardVariable.js.map +1 -1
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/JSON.js +1 -0
- package/build/dist/Types/JSON.js.map +1 -1
- package/build/dist/Types/JSONFunctions.js +131 -37
- package/build/dist/Types/JSONFunctions.js.map +1 -1
- package/build/dist/Types/Monitor/CephAlertTemplates.js +130 -171
- package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/DockerAlertTemplates.js +286 -121
- package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +84 -105
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/HostAlertTemplates.js +250 -122
- package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/IotAlertTemplates.js +81 -81
- package/build/dist/Types/Monitor/IotAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +375 -215
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +19 -19
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js +104 -153
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +156 -91
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +67 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +38 -7
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +261 -0
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -0
- package/build/dist/Types/Monitor/RumAlertTemplates.js +46 -7
- package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +422 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +441 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +79 -15
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/UptimeHistoryLabels.js +17 -0
- package/build/dist/Types/Monitor/UptimeHistoryLabels.js.map +1 -0
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js +291 -6
- package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js +29 -0
- package/build/dist/Types/NotificationSetting/RoutineEmailEvents.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplay.js +117 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js +181 -0
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js +21 -12
- package/build/dist/Types/Rum/SessionReplayCaptureTrigger.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayConsentMode.js +11 -7
- package/build/dist/Types/Rum/SessionReplayConsentMode.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js +172 -0
- package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -0
- package/build/dist/Types/Rum/SessionReplayHealth.js +37 -0
- package/build/dist/Types/Rum/SessionReplayHealth.js.map +1 -0
- package/build/dist/Types/SerializableObjectDictionary.js +4 -0
- package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
- package/build/dist/Types/Telemetry/InventoryLiveness.js +37 -0
- package/build/dist/Types/Telemetry/InventoryLiveness.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +85 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js +15 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyPolicy.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js +30 -0
- package/build/dist/Types/Telemetry/TelemetryIngestionKeyType.js.map +1 -0
- package/build/dist/Types/WebsiteRequest.js +55 -3
- package/build/dist/Types/WebsiteRequest.js.map +1 -1
- package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js +7 -0
- package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js.map +1 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +13 -2
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +6 -2
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js +13 -2
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -3
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +40 -9
- package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +186 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +89 -8
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +118 -0
- package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -0
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +137 -0
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -0
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +112 -7
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +5 -162
- package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js +181 -0
- package/build/dist/UI/Components/Graphs/UptimeDaySummary.js.map +1 -0
- package/build/dist/UI/Components/Header/Header.js +2 -3
- package/build/dist/UI/Components/Header/Header.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +2 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +7 -1
- package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +7 -1
- package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +7 -1
- package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +5 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/JSONTable/JSONTable.js +2 -2
- package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js +35 -0
- package/build/dist/UI/Components/KeyboardShortcut/KeyboardShortcutsModal.js.map +1 -0
- package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js +34 -0
- package/build/dist/UI/Components/Monitor/SeriesDebugCommandsViewer.js.map +1 -0
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +49 -0
- package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -0
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +32 -6
- package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +38 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +22 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -1
- package/build/dist/UI/Components/Table/CellClassName.js +55 -0
- package/build/dist/UI/Components/Table/CellClassName.js.map +1 -0
- package/build/dist/UI/Components/Table/TableRow.js +16 -13
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +9 -8
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +25 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +47 -30
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/NodePlacement.js +37 -0
- package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -0
- package/build/dist/UI/Components/Workflow/Workflow.js +35 -18
- package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
- package/build/dist/UI/Config.js +10 -20
- package/build/dist/UI/Config.js.map +1 -1
- package/build/dist/UI/Utils/GlobalKeyboardShortcut.js +138 -0
- package/build/dist/UI/Utils/GlobalKeyboardShortcut.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js +14 -0
- package/build/dist/UI/Utils/Telemetry/BrowserTelemetryConfig.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/Telemetry.js +7 -5
- package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Utils/API.js +67 -5
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js +9 -1
- package/build/dist/Utils/Dashboard/Components/DashboardMonitorListComponent.js.map +1 -1
- package/build/dist/Utils/Dashboard/LabelVariable.js +96 -0
- package/build/dist/Utils/Dashboard/LabelVariable.js.map +1 -0
- package/build/dist/Utils/Dashboard/VariableUrlState.js +19 -4
- package/build/dist/Utils/Dashboard/VariableUrlState.js.map +1 -1
- package/build/dist/Utils/HTTPResponseBodyReader.js +157 -0
- package/build/dist/Utils/HTTPResponseBodyReader.js.map +1 -0
- package/build/dist/Utils/MetricUnitUtil.js +26 -0
- package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js +112 -0
- package/build/dist/Utils/Monitor/DeviceMacLearningUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MetricValueFormatter.js +276 -0
- package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js +101 -0
- package/build/dist/Utils/Monitor/MonitorTemplateCustomFieldUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +7 -2
- package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +484 -0
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js +59 -0
- package/build/dist/Utils/NetworkAutomation/AutoImportRunChain.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +69 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -0
- package/build/dist/Utils/Rum/ChunkMath.js +76 -0
- package/build/dist/Utils/Rum/ChunkMath.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayHealth.js +534 -0
- package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -0
- package/build/dist/Utils/Rum/SessionReplayStringMap.js +165 -0
- package/build/dist/Utils/Rum/SessionReplayStringMap.js.map +1 -0
- package/build/dist/Utils/Schema/ModelSchema.js +1 -0
- package/build/dist/Utils/Schema/ModelSchema.js.map +1 -1
- package/build/dist/Utils/StatusPage/ResourceSearch.js +200 -0
- package/build/dist/Utils/StatusPage/ResourceSearch.js.map +1 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js +299 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js +147 -0
- package/build/dist/Utils/Uptime/DayUptimeGraphUtil.js.map +1 -0
- package/build/dist/Utils/ValueFormatter.js +32 -1
- package/build/dist/Utils/ValueFormatter.js.map +1 -1
- package/jest.config.json +2 -0
- package/package.json +1 -1
- package/test-setup.sh +9 -9
- package/tsconfig.json +51 -11
|
@@ -18,10 +18,11 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
18
18
|
import OneUptimeDate from "../../Types/Date";
|
|
19
19
|
import SortOrder from "../../Types/BaseDatabase/SortOrder";
|
|
20
20
|
import MonitorType from "../../Types/Monitor/MonitorType";
|
|
21
|
-
import { MAX_MATCHED_IP_SAMPLE, } from "../../Types/NetworkAutomation/RuleRunResult";
|
|
21
|
+
import { MAX_MATCHED_IP_SAMPLE, MAX_RUN_FAILURE_REASON_LENGTH, MAX_RUN_FAILURE_REASONS, } from "../../Types/NetworkAutomation/RuleRunResult";
|
|
22
22
|
import AutoImportRuleMatcher from "../../Utils/NetworkDiscovery/AutoImportRuleMatcher";
|
|
23
23
|
import { buildFallbackDeviceName, buildNetworkDeviceFromDiscoveredHost, } from "../../Utils/NetworkDiscovery/DiscoveredDeviceBuilder";
|
|
24
24
|
import { normalizeDiscoveredHosts } from "../../Utils/NetworkDiscovery/DiscoveredHostUtil";
|
|
25
|
+
import { DISCOVERY_SCAN_IMPORTABLE_STATUSES } from "../../Utils/NetworkDiscovery/DiscoveryScanStatus";
|
|
25
26
|
import { NetworkDeviceMonitoringMethodUtil } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
|
|
26
27
|
import NetworkDeviceMonitorTemplateUtil from "../../Utils/Monitor/NetworkDeviceMonitorTemplateUtil";
|
|
27
28
|
import Semaphore from "../Infrastructure/Semaphore";
|
|
@@ -31,7 +32,8 @@ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
|
31
32
|
import logger from "../Utils/Logger";
|
|
32
33
|
/*
|
|
33
34
|
* The engine behind network device auto-import rules (issue #3378): reads a
|
|
34
|
-
*
|
|
35
|
+
* discovery scan's results — finished or still arriving from a running sweep,
|
|
36
|
+
* see DISCOVERY_SCAN_IMPORTABLE_STATUSES — asks the project's rules which hosts
|
|
35
37
|
* import, and creates the Network Devices the manual Review dialog would
|
|
36
38
|
* have — through the same builder, so a rule-imported host and a
|
|
37
39
|
* hand-imported host are the same device. Site assignment, owners and labels
|
|
@@ -99,6 +101,25 @@ export const MAX_DEVICES_PER_AUTO_IMPORT_RUN = 500;
|
|
|
99
101
|
export const MAX_MONITORS_PER_AUTO_IMPORT_RUN = 500;
|
|
100
102
|
// Scans one manual "Run Now" will read, oldest results last.
|
|
101
103
|
export const MAX_SCANS_PER_AUTO_IMPORT_RULE_RUN = 100;
|
|
104
|
+
/*
|
|
105
|
+
* How many monitor creates may fail IDENTICALLY, back to back with no success
|
|
106
|
+
* between them, before the run stops attempting any more.
|
|
107
|
+
*
|
|
108
|
+
* A monitor create fails for one of two kinds of reason. Per host — this
|
|
109
|
+
* device's name collides, this one raced another writer — where the next host
|
|
110
|
+
* is unaffected and trying it is right. Or systemic: the template's criteria
|
|
111
|
+
* name a monitor status that no longer exists, the plan's monitor limit is
|
|
112
|
+
* reached, the database is refusing writes. Those fail for the FIRST device
|
|
113
|
+
* and for all 500 after it, and the old engine could not tell the difference:
|
|
114
|
+
* it spent the whole per-run monitor budget re-proving one broken thing, then
|
|
115
|
+
* reported "Stopped at the run cap — run again to continue", which is an
|
|
116
|
+
* instruction to do it all again. That is OneUptime/oneuptime#3643.
|
|
117
|
+
*
|
|
118
|
+
* Ten consecutive failures carrying the SAME message, with no create
|
|
119
|
+
* succeeding in between, is not a run of bad luck. Any success resets it, so a
|
|
120
|
+
* genuinely per-host fault never trips this.
|
|
121
|
+
*/
|
|
122
|
+
export const MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES = 10;
|
|
102
123
|
/*
|
|
103
124
|
* Results older than this are stamped processed WITHOUT importing. A late
|
|
104
125
|
* result can land on a reaper-Failed scan hours after its sweep ran (the
|
|
@@ -125,24 +146,32 @@ export const AUTO_IMPORT_SWEEP_LOCK_NAMESPACE = "Workers.Cron";
|
|
|
125
146
|
export const AUTO_IMPORT_SWEEP_LOCK_TIMEOUT_MS = 11 * 60 * 1000;
|
|
126
147
|
class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
127
148
|
/**
|
|
128
|
-
* The automatic path: apply the project's enabled rules to one
|
|
129
|
-
*
|
|
149
|
+
* The automatic path: apply the project's enabled rules to one scan's
|
|
150
|
+
* stored results, then stamp the scan's autoImportProcessedAt marker.
|
|
151
|
+
*
|
|
152
|
+
* The scan may still be SWEEPING — see
|
|
153
|
+
* DISCOVERY_SCAN_IMPORTABLE_STATUSES. Its partial results are as real as
|
|
154
|
+
* a finished scan's (the probe found those hosts; it simply has more of the
|
|
155
|
+
* range to cover), and waiting for the whole sweep is what left 527
|
|
156
|
+
* discovered switches unimportable for a day in OneUptime issue #3599. The
|
|
157
|
+
* name is kept because it is the automatic path's identity across the
|
|
158
|
+
* worker, its tests and its logs.
|
|
130
159
|
*
|
|
131
160
|
* Returns null when there was nothing to do (scan gone, superseded,
|
|
132
161
|
* already processed, no import rules, or results too old) and the run's
|
|
133
162
|
* counters otherwise. Throws only on unexpected failures — the caller
|
|
134
163
|
* (the worker sweep) isolates those per scan.
|
|
135
164
|
*
|
|
136
|
-
* The marker protocol, and why every stamp is a compare-and-set on
|
|
137
|
-
*
|
|
138
|
-
* write that stores new results
|
|
139
|
-
* results now on the row have not been processed".
|
|
140
|
-
* while this pass is reading the old ones, the CAS
|
|
141
|
-
* stays NULL, and the next tick processes the new upload
|
|
142
|
-
* never retire results it did not see, and the jsonb
|
|
143
|
-
* clobber a newer host list. A truncated pass that
|
|
144
|
-
* stamps nothing on purpose: the NULL marker is what
|
|
145
|
-
* resume. (A truncated pass where every create FAILED stamps anyway — see
|
|
165
|
+
* The marker protocol, and why every stamp is a compare-and-set on the run
|
|
166
|
+
* state this pass read: the ingest endpoint clears the marker in the same
|
|
167
|
+
* write that stores new results — partial uploads included — so "marker is
|
|
168
|
+
* NULL" always means "the results now on the row have not been processed".
|
|
169
|
+
* If new results land while this pass is reading the old ones, the CAS
|
|
170
|
+
* misses, the marker stays NULL, and the next tick processes the new upload
|
|
171
|
+
* — the stamp can never retire results it did not see, and the jsonb
|
|
172
|
+
* write-back can never clobber a newer host list. A truncated pass that
|
|
173
|
+
* created something stamps nothing on purpose: the NULL marker is what
|
|
174
|
+
* makes the next tick resume. (A truncated pass where every create FAILED stamps anyway — see
|
|
146
175
|
* the zero-progress note at the stamp below.)
|
|
147
176
|
*/
|
|
148
177
|
async processCompletedScan(data) {
|
|
@@ -150,11 +179,23 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
150
179
|
const scan = await NetworkDeviceDiscoveryScanService.findOneBy({
|
|
151
180
|
query: {
|
|
152
181
|
_id: data.scanId,
|
|
153
|
-
status:
|
|
182
|
+
status: QueryHelper.any(DISCOVERY_SCAN_IMPORTABLE_STATUSES),
|
|
154
183
|
},
|
|
155
|
-
select: Object.assign({ _id: true, projectId: true, status: true, completedAt: true,
|
|
184
|
+
select: Object.assign({ _id: true, projectId: true, status: true, completedAt: true,
|
|
185
|
+
/*
|
|
186
|
+
* The two counters a running scan's partial uploads move. They are
|
|
187
|
+
* not read for anything; they are the version token stampScan's
|
|
188
|
+
* compare-and-set uses to tell "the results I evaluated" from "the
|
|
189
|
+
* results that landed while I was evaluating".
|
|
190
|
+
*/
|
|
191
|
+
scannedHostCount: true, respondedHostCount: true, autoImportProcessedAt: true, discoveredDevices: true }, AUTO_IMPORT_SCAN_CREDENTIAL_SELECT),
|
|
156
192
|
props: {
|
|
157
193
|
isRoot: true,
|
|
194
|
+
/*
|
|
195
|
+
* Keep the stored payload for stampScan; the engine checks live
|
|
196
|
+
* inventory itself before evaluating these hosts.
|
|
197
|
+
*/
|
|
198
|
+
ignoreHooks: true,
|
|
158
199
|
},
|
|
159
200
|
});
|
|
160
201
|
/*
|
|
@@ -384,11 +425,21 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
384
425
|
const scanStubs = await NetworkDeviceDiscoveryScanService.findBy({
|
|
385
426
|
query: {
|
|
386
427
|
projectId: data.projectId,
|
|
387
|
-
|
|
428
|
+
/*
|
|
429
|
+
* A scan that is still sweeping counts too: its partial results are
|
|
430
|
+
* already on the row, and "Run Now found 25 hosts while 527 sat in
|
|
431
|
+
* the Devices list" was exactly the report (OneUptime issue #3599).
|
|
432
|
+
*/
|
|
433
|
+
status: QueryHelper.any(DISCOVERY_SCAN_IMPORTABLE_STATUSES),
|
|
388
434
|
},
|
|
389
435
|
select: {
|
|
390
436
|
_id: true,
|
|
391
437
|
},
|
|
438
|
+
/*
|
|
439
|
+
* Newest results first. An in-progress scan has no completedAt, and
|
|
440
|
+
* Postgres orders NULLs first under DESC — which is the right place
|
|
441
|
+
* for it: its results are the freshest the project has.
|
|
442
|
+
*/
|
|
392
443
|
sort: {
|
|
393
444
|
completedAt: SortOrder.Descending,
|
|
394
445
|
},
|
|
@@ -401,15 +452,19 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
401
452
|
if (result.hasMoreScans) {
|
|
402
453
|
scanStubs.pop();
|
|
403
454
|
}
|
|
404
|
-
for (
|
|
455
|
+
for (let index = 0; index < scanStubs.length; index++) {
|
|
456
|
+
const scanStub = scanStubs[index];
|
|
405
457
|
const scan = await NetworkDeviceDiscoveryScanService.findOneBy({
|
|
406
458
|
query: {
|
|
407
459
|
_id: scanStub.id,
|
|
408
460
|
projectId: data.projectId,
|
|
409
|
-
status:
|
|
461
|
+
status: QueryHelper.any(DISCOVERY_SCAN_IMPORTABLE_STATUSES),
|
|
410
462
|
},
|
|
411
|
-
select: Object.assign({ _id: true, projectId: true, status: true, completedAt: true,
|
|
412
|
-
|
|
463
|
+
select: Object.assign({ _id: true, projectId: true, status: true, completedAt: true,
|
|
464
|
+
// The version token stampScan's compare-and-set uses; see there.
|
|
465
|
+
scannedHostCount: true, respondedHostCount: true, discoveredDevices: true }, AUTO_IMPORT_SCAN_CREDENTIAL_SELECT),
|
|
466
|
+
// Preserve the raw scan rows for the compare-and-set write-back.
|
|
467
|
+
props: { isRoot: true, ignoreHooks: true },
|
|
413
468
|
});
|
|
414
469
|
// Re-queued or deleted since the stub query — nothing to evaluate.
|
|
415
470
|
if (!scan) {
|
|
@@ -439,8 +494,15 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
439
494
|
leaveMarkerUnstamped: true,
|
|
440
495
|
});
|
|
441
496
|
}
|
|
442
|
-
|
|
497
|
+
/*
|
|
498
|
+
* The caps are shared across the whole run, dry or real. Stop OPENING
|
|
499
|
+
* further scans once they are spent — each one is a multi-megabyte
|
|
500
|
+
* jsonb read whose hosts this pass could not act on anyway — but say
|
|
501
|
+
* that scans were left unread, so the pending counters below are
|
|
502
|
+
* reported as a floor rather than as the estate's total.
|
|
503
|
+
*/
|
|
443
504
|
if (result.isTruncated) {
|
|
505
|
+
result.hasUnevaluatedScans = index < scanStubs.length - 1;
|
|
444
506
|
break;
|
|
445
507
|
}
|
|
446
508
|
/*
|
|
@@ -474,17 +536,60 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
474
536
|
monitorsSkippedAlreadyExisting: 0,
|
|
475
537
|
monitorsSkippedUnsupportedHost: 0,
|
|
476
538
|
monitorsFailed: 0,
|
|
539
|
+
deviceFailureReasons: [],
|
|
540
|
+
monitorFailureReasons: [],
|
|
541
|
+
monitorProvisioningHalted: false,
|
|
477
542
|
isTruncated: false,
|
|
543
|
+
hostsPendingImport: 0,
|
|
544
|
+
monitorsPendingCreation: 0,
|
|
545
|
+
hasUnevaluatedScans: false,
|
|
478
546
|
hasMoreScans: false,
|
|
479
547
|
isDryRun: isDryRun,
|
|
480
548
|
matchedIpAddressSample: [],
|
|
481
549
|
};
|
|
482
550
|
}
|
|
551
|
+
/*
|
|
552
|
+
* Keep the reason a create failed, so the run can say WHY it created
|
|
553
|
+
* nothing instead of pointing at server logs the operator of a self-hosted
|
|
554
|
+
* install may not be able to read. Deduplicated (500 identical failures are
|
|
555
|
+
* one reason) and capped, in both count and length, because this string
|
|
556
|
+
* ends up in a modal.
|
|
557
|
+
*/
|
|
558
|
+
recordFailureReason(reasons, error) {
|
|
559
|
+
const message = this.describeError(error);
|
|
560
|
+
if (!message) {
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
const trimmed = message.substring(0, MAX_RUN_FAILURE_REASON_LENGTH);
|
|
564
|
+
if (reasons.includes(trimmed)) {
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
if (reasons.length >= MAX_RUN_FAILURE_REASONS) {
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
reasons.push(trimmed);
|
|
571
|
+
}
|
|
572
|
+
/*
|
|
573
|
+
* The message an operator should see. Exception extends Error, so one arm
|
|
574
|
+
* covers both; anything else is stringified rather than dropped, because a
|
|
575
|
+
* thrown non-Error is exactly the case where the reason matters most.
|
|
576
|
+
*/
|
|
577
|
+
describeError(error) {
|
|
578
|
+
if (error instanceof Error) {
|
|
579
|
+
return (error.message || "").replace(/\s+/g, " ").trim();
|
|
580
|
+
}
|
|
581
|
+
return String(error).replace(/\s+/g, " ").trim();
|
|
582
|
+
}
|
|
483
583
|
emptyExistingMonitorProvisioningState() {
|
|
484
584
|
return {
|
|
485
585
|
autoProvisionedKeys: new Set(),
|
|
486
586
|
manuallyMonitoredDeviceIds: new Set(),
|
|
487
587
|
attemptedProvisioningKeys: new Set(),
|
|
588
|
+
unresolvableTemplateIds: new Set(),
|
|
589
|
+
consecutiveCreateFailures: 0,
|
|
590
|
+
lastCreateFailureReason: "",
|
|
591
|
+
hasProvisionedAnyMonitor: false,
|
|
592
|
+
isProvisioningHalted: false,
|
|
488
593
|
};
|
|
489
594
|
}
|
|
490
595
|
/*
|
|
@@ -796,6 +901,17 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
796
901
|
into: data.existingDevices,
|
|
797
902
|
});
|
|
798
903
|
const createdIpAddresses = [];
|
|
904
|
+
/*
|
|
905
|
+
* What this pass counted as still-to-do, deduplicated.
|
|
906
|
+
*
|
|
907
|
+
* A stored result can list the same address twice (duplicate rows are
|
|
908
|
+
* normal enough that normalisation preserves them and the import path
|
|
909
|
+
* treats the second as already-registered), so counting rows rather than
|
|
910
|
+
* distinct work would report a remainder larger than the work that
|
|
911
|
+
* actually remains — in a number whose whole purpose is to be trusted.
|
|
912
|
+
*/
|
|
913
|
+
const pendingImportAddresses = new Set();
|
|
914
|
+
const pendingProvisioningKeys = new Set();
|
|
799
915
|
for (const host of hosts) {
|
|
800
916
|
/*
|
|
801
917
|
* The address becomes the device's varchar(100) hostname, on which
|
|
@@ -849,21 +965,13 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
849
965
|
let networkDevice = data.existingDevices.get(host.ipAddress);
|
|
850
966
|
let deviceWasCreated = false;
|
|
851
967
|
/*
|
|
852
|
-
*
|
|
853
|
-
*
|
|
854
|
-
*
|
|
855
|
-
* duplicate rows and overlapping scans
|
|
968
|
+
* Current inventory is authoritative. The stored isAlreadyRegistered
|
|
969
|
+
* flag can outlive a deleted device and must not veto re-importing it.
|
|
970
|
+
* The map also includes devices created during this run, keeping
|
|
971
|
+
* duplicate rows and overlapping scans idempotent.
|
|
856
972
|
*/
|
|
857
|
-
if (
|
|
973
|
+
if (networkDevice) {
|
|
858
974
|
result.hostsSkippedAlreadyRegistered++;
|
|
859
|
-
/*
|
|
860
|
-
* A stale scan can claim a deleted device is still registered. With
|
|
861
|
-
* no live row there is neither a safe binding nor enough intent to
|
|
862
|
-
* recreate it from old data, so preserve the established skip.
|
|
863
|
-
*/
|
|
864
|
-
if (!networkDevice) {
|
|
865
|
-
continue;
|
|
866
|
-
}
|
|
867
975
|
}
|
|
868
976
|
if (result.matchedIpAddressSample.length < MAX_MATCHED_IP_SAMPLE) {
|
|
869
977
|
if (!result.matchedIpAddressSample.includes(host.ipAddress)) {
|
|
@@ -872,8 +980,23 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
872
980
|
}
|
|
873
981
|
if (!networkDevice) {
|
|
874
982
|
if (data.attempts.deviceCount >= MAX_DEVICES_PER_AUTO_IMPORT_RUN) {
|
|
983
|
+
/*
|
|
984
|
+
* Budget spent — stop WRITING, keep COUNTING. The rest of this
|
|
985
|
+
* loop is pure matching over a jsonb array that is already in
|
|
986
|
+
* memory against addresses primeExistingDevices already resolved,
|
|
987
|
+
* so finishing the scan costs nothing the cap exists to prevent,
|
|
988
|
+
* and it is the difference between "imported 500" and "imported
|
|
989
|
+
* 500 of 909, 409 still to go". A run that stopped mid-count
|
|
990
|
+
* reported the truncated numbers as if they were the estate,
|
|
991
|
+
* which is what OneUptime issue #3642 experienced as the
|
|
992
|
+
* remainder being silently dropped.
|
|
993
|
+
*/
|
|
875
994
|
result.isTruncated = true;
|
|
876
|
-
|
|
995
|
+
if (!pendingImportAddresses.has(host.ipAddress)) {
|
|
996
|
+
pendingImportAddresses.add(host.ipAddress);
|
|
997
|
+
result.hostsPendingImport++;
|
|
998
|
+
}
|
|
999
|
+
continue;
|
|
877
1000
|
}
|
|
878
1001
|
if (data.isDryRun) {
|
|
879
1002
|
/*
|
|
@@ -906,7 +1029,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
906
1029
|
if (templateIds.length === 0) {
|
|
907
1030
|
continue;
|
|
908
1031
|
}
|
|
909
|
-
const
|
|
1032
|
+
const monitorsLeftPending = await this.ensureMonitorsForDevice({
|
|
910
1033
|
projectId: scan.projectId,
|
|
911
1034
|
host: host,
|
|
912
1035
|
networkDevice: networkDevice,
|
|
@@ -917,13 +1040,35 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
917
1040
|
attempts: data.attempts,
|
|
918
1041
|
isDryRun: data.isDryRun,
|
|
919
1042
|
});
|
|
920
|
-
|
|
1043
|
+
/*
|
|
1044
|
+
* Same protocol as the device cap above: the monitor budget stops the
|
|
1045
|
+
* creates, not the accounting. It also has its OWN cap, so an estate
|
|
1046
|
+
* that is fully imported but unmonitored — the shape of issue #3642 —
|
|
1047
|
+
* runs out of monitor budget with nothing pending on the device side,
|
|
1048
|
+
* and the operator needs to be told how many devices are still
|
|
1049
|
+
* waiting for a monitor.
|
|
1050
|
+
*/
|
|
1051
|
+
for (const templateId of monitorsLeftPending) {
|
|
921
1052
|
result.isTruncated = true;
|
|
922
|
-
|
|
1053
|
+
const pendingKey = NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(networkDevice.id, templateId);
|
|
1054
|
+
if (!pendingProvisioningKeys.has(pendingKey)) {
|
|
1055
|
+
pendingProvisioningKeys.add(pendingKey);
|
|
1056
|
+
result.monitorsPendingCreation++;
|
|
1057
|
+
}
|
|
923
1058
|
}
|
|
924
1059
|
}
|
|
925
1060
|
return createdIpAddresses;
|
|
926
1061
|
}
|
|
1062
|
+
/*
|
|
1063
|
+
* Reconcile one device against the templates the matched rules selected.
|
|
1064
|
+
*
|
|
1065
|
+
* Returns the template ids the run's budget left UNATTEMPTED — empty when
|
|
1066
|
+
* every requested monitor was settled, whether created, failed, or skipped
|
|
1067
|
+
* because monitoring already existed. A non-empty answer is what makes the
|
|
1068
|
+
* run report itself truncated; the ids (rather than a bare count) are what
|
|
1069
|
+
* let the caller count one device's leftover work once, however many
|
|
1070
|
+
* duplicate rows the scan lists that host under.
|
|
1071
|
+
*/
|
|
927
1072
|
async ensureMonitorsForDevice(data) {
|
|
928
1073
|
/*
|
|
929
1074
|
* A Network Device monitor is fed by the device's polls, and nothing
|
|
@@ -937,12 +1082,12 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
937
1082
|
*/
|
|
938
1083
|
if (NetworkDeviceMonitoringMethodUtil.isMonitorBacked(data.networkDevice.monitoringMethod)) {
|
|
939
1084
|
data.result.monitorsSkippedUnsupportedHost += data.templateIds.length;
|
|
940
|
-
return
|
|
1085
|
+
return [];
|
|
941
1086
|
}
|
|
942
1087
|
if (!data.networkDevice.id) {
|
|
943
1088
|
data.result.monitorsFailed += data.templateIds.length;
|
|
944
1089
|
logger.error(`Auto-import: cannot provision monitor(s) for ${data.host.ipAddress} because the Network Device has no id.`, { projectId: data.projectId.toString() });
|
|
945
|
-
return
|
|
1090
|
+
return [];
|
|
946
1091
|
}
|
|
947
1092
|
const networkDeviceId = data.networkDevice.id;
|
|
948
1093
|
const networkDeviceIdString = networkDeviceId.toString();
|
|
@@ -965,19 +1110,59 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
965
1110
|
pendingTemplateIds.push(templateId);
|
|
966
1111
|
}
|
|
967
1112
|
if (pendingTemplateIds.length === 0) {
|
|
968
|
-
return
|
|
1113
|
+
return [];
|
|
969
1114
|
}
|
|
1115
|
+
/*
|
|
1116
|
+
* The project-wide snapshot already knows this device is monitored by
|
|
1117
|
+
* hand, and that answer outranks any failure below: a device nobody was
|
|
1118
|
+
* going to provision cannot be a monitor this run failed to create. Read
|
|
1119
|
+
* from memory, so it stays ahead of the systemic verdicts.
|
|
1120
|
+
*/
|
|
970
1121
|
if (data.existingMonitors.manuallyMonitoredDeviceIds.has(networkDeviceIdString)) {
|
|
971
1122
|
data.result.monitorsSkippedAlreadyExisting += pendingTemplateIds.length;
|
|
972
|
-
return
|
|
1123
|
+
return [];
|
|
1124
|
+
}
|
|
1125
|
+
/*
|
|
1126
|
+
* Everything below here costs the run something — a monitor budget slot, a
|
|
1127
|
+
* per-device search of the unindexed monitor step payload, a create round
|
|
1128
|
+
* trip. None of it is worth spending on work this run has already proved
|
|
1129
|
+
* cannot succeed, so the two systemic verdicts are settled next: a
|
|
1130
|
+
* template this run could not load, and a create pipeline that has failed
|
|
1131
|
+
* identically for every device it tried.
|
|
1132
|
+
*
|
|
1133
|
+
* Both still COUNT the monitors that are missing. "0 created, and here is
|
|
1134
|
+
* why" is the answer; quietly reporting fewer missing monitors than there
|
|
1135
|
+
* are would trade one confusing dialog for another.
|
|
1136
|
+
*/
|
|
1137
|
+
const resolvableTemplateIds = [];
|
|
1138
|
+
for (const templateId of pendingTemplateIds) {
|
|
1139
|
+
if (!data.existingMonitors.isProvisioningHalted &&
|
|
1140
|
+
!data.existingMonitors.unresolvableTemplateIds.has(templateId)) {
|
|
1141
|
+
resolvableTemplateIds.push(templateId);
|
|
1142
|
+
continue;
|
|
1143
|
+
}
|
|
1144
|
+
/*
|
|
1145
|
+
* Counted once and then settled. Marking the (device, template) key
|
|
1146
|
+
* attempted is what keeps a host carried by two overlapping scans in the
|
|
1147
|
+
* same run from being counted as two missing monitors — the same
|
|
1148
|
+
* bookkeeping a real attempt does, for the same reason.
|
|
1149
|
+
*/
|
|
1150
|
+
data.existingMonitors.attemptedProvisioningKeys.add(NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(networkDeviceId, templateId));
|
|
1151
|
+
data.result.monitorsFailed++;
|
|
1152
|
+
data.result.monitorProvisioningHalted = true;
|
|
1153
|
+
}
|
|
1154
|
+
if (resolvableTemplateIds.length === 0) {
|
|
1155
|
+
return [];
|
|
973
1156
|
}
|
|
974
1157
|
/*
|
|
975
1158
|
* Do not run the unindexed JSON race-check after this run's monitor-work
|
|
976
1159
|
* budget is already exhausted. The device remains unreconciled and the
|
|
977
|
-
* truncated marker protocol brings it back on the next bounded pass
|
|
1160
|
+
* truncated marker protocol brings it back on the next bounded pass —
|
|
1161
|
+
* counted, so the operator is told how many devices are still waiting
|
|
1162
|
+
* rather than left to infer it from a total that stopped early.
|
|
978
1163
|
*/
|
|
979
1164
|
if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
|
|
980
|
-
return
|
|
1165
|
+
return resolvableTemplateIds;
|
|
981
1166
|
}
|
|
982
1167
|
if (!data.isDryRun) {
|
|
983
1168
|
await this.refreshExistingMonitorsForDevice({
|
|
@@ -987,31 +1172,56 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
987
1172
|
});
|
|
988
1173
|
}
|
|
989
1174
|
if (data.existingMonitors.manuallyMonitoredDeviceIds.has(networkDeviceIdString)) {
|
|
990
|
-
data.result.monitorsSkippedAlreadyExisting +=
|
|
991
|
-
|
|
1175
|
+
data.result.monitorsSkippedAlreadyExisting +=
|
|
1176
|
+
resolvableTemplateIds.length;
|
|
1177
|
+
return [];
|
|
992
1178
|
}
|
|
993
|
-
for (
|
|
1179
|
+
for (let index = 0; index < resolvableTemplateIds.length; index++) {
|
|
1180
|
+
const templateId = resolvableTemplateIds[index];
|
|
994
1181
|
const key = NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(networkDeviceId, templateId);
|
|
1182
|
+
/*
|
|
1183
|
+
* A create earlier in THIS device's loop can be the one that trips the
|
|
1184
|
+
* systemic verdict. The rest of its templates are then in exactly the
|
|
1185
|
+
* position of every device after it.
|
|
1186
|
+
*/
|
|
1187
|
+
if (data.existingMonitors.isProvisioningHalted) {
|
|
1188
|
+
data.existingMonitors.attemptedProvisioningKeys.add(key);
|
|
1189
|
+
data.result.monitorsFailed++;
|
|
1190
|
+
data.result.monitorProvisioningHalted = true;
|
|
1191
|
+
continue;
|
|
1192
|
+
}
|
|
995
1193
|
/* The race-check may have found this key after the initial snapshot. */
|
|
996
1194
|
if (data.existingMonitors.autoProvisionedKeys.has(key)) {
|
|
997
1195
|
data.result.monitorsSkippedAlreadyExisting++;
|
|
998
1196
|
continue;
|
|
999
1197
|
}
|
|
1198
|
+
/*
|
|
1199
|
+
* Budget spent mid-device. Everything from here on is untouched, so
|
|
1200
|
+
* that is exactly what is left pending for this device.
|
|
1201
|
+
*/
|
|
1000
1202
|
if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
|
|
1001
|
-
return
|
|
1203
|
+
return resolvableTemplateIds.slice(index);
|
|
1002
1204
|
}
|
|
1003
1205
|
data.attempts.monitorCount++;
|
|
1004
1206
|
data.existingMonitors.attemptedProvisioningKeys.add(key);
|
|
1005
1207
|
/*
|
|
1006
|
-
*
|
|
1007
|
-
*
|
|
1008
|
-
*
|
|
1009
|
-
*
|
|
1208
|
+
* A template the run could not load is a fault in the RULE, not in this
|
|
1209
|
+
* host: the rule points at a template that has been deleted, moved to
|
|
1210
|
+
* another project, or changed to a different monitor type since the rule
|
|
1211
|
+
* was saved (the rule form validates all three, but only at save time).
|
|
1212
|
+
* It will be just as unloadable for every other device, so the verdict is
|
|
1213
|
+
* recorded once and every later host short-circuits above — instead of
|
|
1214
|
+
* spending the run's whole monitor budget re-proving it, which is what
|
|
1215
|
+
* turned this into "500 monitors failed, stopped at the run cap, run
|
|
1216
|
+
* again to continue" in issue #3643.
|
|
1010
1217
|
*/
|
|
1011
1218
|
const template = data.monitorTemplates.get(templateId);
|
|
1012
1219
|
if (!template) {
|
|
1220
|
+
data.existingMonitors.unresolvableTemplateIds.add(templateId);
|
|
1013
1221
|
data.result.monitorsFailed++;
|
|
1014
|
-
|
|
1222
|
+
data.result.monitorProvisioningHalted = true;
|
|
1223
|
+
this.recordFailureReason(data.result.monitorFailureReasons, new Error("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."));
|
|
1224
|
+
logger.error(`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.`, { projectId: data.projectId.toString() });
|
|
1015
1225
|
continue;
|
|
1016
1226
|
}
|
|
1017
1227
|
if (data.isDryRun) {
|
|
@@ -1033,6 +1243,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1033
1243
|
});
|
|
1034
1244
|
data.existingMonitors.autoProvisionedKeys.add(key);
|
|
1035
1245
|
data.result.monitorsCreated++;
|
|
1246
|
+
this.recordMonitorCreateSuccess(data.existingMonitors);
|
|
1036
1247
|
}
|
|
1037
1248
|
catch (error) {
|
|
1038
1249
|
/*
|
|
@@ -1061,14 +1272,64 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1061
1272
|
this.recordExistingMonitor(data.existingMonitors, createdMeanwhile);
|
|
1062
1273
|
if (data.existingMonitors.autoProvisionedKeys.has(key)) {
|
|
1063
1274
|
data.result.monitorsSkippedAlreadyExisting++;
|
|
1275
|
+
/*
|
|
1276
|
+
* Losing this race proves the create pipeline works — somebody
|
|
1277
|
+
* else just used it — so it is not evidence of a systemic fault.
|
|
1278
|
+
*/
|
|
1279
|
+
this.recordMonitorCreateSuccess(data.existingMonitors);
|
|
1064
1280
|
continue;
|
|
1065
1281
|
}
|
|
1066
1282
|
}
|
|
1067
1283
|
data.result.monitorsFailed++;
|
|
1284
|
+
this.recordFailureReason(data.result.monitorFailureReasons, error);
|
|
1068
1285
|
logger.error(`Auto-import: could not create monitor from template ${templateId} for Network Device ${networkDeviceId.toString()} (${data.host.ipAddress}): ${error}`, { projectId: data.projectId.toString() });
|
|
1286
|
+
this.recordMonitorCreateFailure({
|
|
1287
|
+
state: data.existingMonitors,
|
|
1288
|
+
result: data.result,
|
|
1289
|
+
projectId: data.projectId,
|
|
1290
|
+
error: error,
|
|
1291
|
+
});
|
|
1069
1292
|
}
|
|
1070
1293
|
}
|
|
1071
|
-
return
|
|
1294
|
+
return [];
|
|
1295
|
+
}
|
|
1296
|
+
/*
|
|
1297
|
+
* A create succeeded (or lost a race to another writer, which proves the
|
|
1298
|
+
* same thing): whatever the last failures were, they were not systemic, and
|
|
1299
|
+
* this run has now seen the create pipeline work at least once.
|
|
1300
|
+
*/
|
|
1301
|
+
recordMonitorCreateSuccess(state) {
|
|
1302
|
+
state.consecutiveCreateFailures = 0;
|
|
1303
|
+
state.lastCreateFailureReason = "";
|
|
1304
|
+
state.hasProvisionedAnyMonitor = true;
|
|
1305
|
+
}
|
|
1306
|
+
/*
|
|
1307
|
+
* Decide whether one monitor create failure is this host's problem or the
|
|
1308
|
+
* whole run's. The bar is deliberately high, because giving up early on a
|
|
1309
|
+
* per-host fault would silently cost an estate its monitors — the failure
|
|
1310
|
+
* this fix exists to make visible. All three must hold: the run has never
|
|
1311
|
+
* created a monitor, the last MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES
|
|
1312
|
+
* attempts all failed, and they all failed with the SAME message.
|
|
1313
|
+
*/
|
|
1314
|
+
recordMonitorCreateFailure(data) {
|
|
1315
|
+
const reason = this.describeError(data.error);
|
|
1316
|
+
if (reason && reason === data.state.lastCreateFailureReason) {
|
|
1317
|
+
data.state.consecutiveCreateFailures++;
|
|
1318
|
+
}
|
|
1319
|
+
else {
|
|
1320
|
+
data.state.lastCreateFailureReason = reason;
|
|
1321
|
+
data.state.consecutiveCreateFailures = 1;
|
|
1322
|
+
}
|
|
1323
|
+
if (data.state.hasProvisionedAnyMonitor) {
|
|
1324
|
+
return;
|
|
1325
|
+
}
|
|
1326
|
+
if (data.state.consecutiveCreateFailures <
|
|
1327
|
+
MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES) {
|
|
1328
|
+
return;
|
|
1329
|
+
}
|
|
1330
|
+
data.state.isProvisioningHalted = true;
|
|
1331
|
+
data.result.monitorProvisioningHalted = true;
|
|
1332
|
+
logger.error(`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.`, { projectId: data.projectId.toString() });
|
|
1072
1333
|
}
|
|
1073
1334
|
/*
|
|
1074
1335
|
* One host -> one device, with the collision protocol the estate needs:
|
|
@@ -1131,6 +1392,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1131
1392
|
}
|
|
1132
1393
|
catch (secondError) {
|
|
1133
1394
|
data.result.devicesFailed++;
|
|
1395
|
+
this.recordFailureReason(data.result.deviceFailureReasons, secondError);
|
|
1134
1396
|
logger.error(`Auto-import: could not create a device for ${data.host.ipAddress} (scan ${(_a = data.scan.id) === null || _a === void 0 ? void 0 : _a.toString()}): ${firstError} / retry: ${secondError}`, { projectId: data.projectId.toString() });
|
|
1135
1397
|
return { device: null, wasCreated: false };
|
|
1136
1398
|
}
|
|
@@ -1142,23 +1404,24 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1142
1404
|
/*
|
|
1143
1405
|
* The one write this engine makes to the scan row: retire the consumed
|
|
1144
1406
|
* hosts in the stored jsonb (so the Review dialog stops offering them) and
|
|
1145
|
-
* stamp the processed marker — in a single hook-free compare-and-set on
|
|
1146
|
-
*
|
|
1407
|
+
* stamp the processed marker — in a single hook-free compare-and-set on the
|
|
1408
|
+
* run state that was read, for the reasons on processCompletedScan. The
|
|
1147
1409
|
* claim endpoint's hook-free contract is why this must never go through
|
|
1148
1410
|
* updateOneById: the scan service deliberately has no update-success hooks
|
|
1149
1411
|
* to piggyback on, and this write must not fire the full pipeline on every
|
|
1150
1412
|
* worker tick.
|
|
1151
1413
|
*
|
|
1152
1414
|
* The CAS defends against exactly one concurrent writer — the ingest
|
|
1153
|
-
* endpoint, which rewrites completedAt with
|
|
1154
|
-
*
|
|
1155
|
-
*
|
|
1156
|
-
* holds the sweep lock (the worker for its
|
|
1157
|
-
* real run; dry runs never write), so the
|
|
1158
|
-
* has the row's only engine writer. Weaken that invariant and this
|
|
1415
|
+
* endpoint, which rewrites completedAt with a final upload and the host
|
|
1416
|
+
* counters with a partial one. It cannot defend against another ENGINE
|
|
1417
|
+
* write (which changes none of those columns), and does not need to: every
|
|
1418
|
+
* path that reaches this method holds the sweep lock (the worker for its
|
|
1419
|
+
* whole sweep, Run Now for a real run; dry runs never write), so the
|
|
1420
|
+
* full-array replace below always has the row's only engine writer. Weaken that invariant and this
|
|
1159
1421
|
* becomes last-writer-wins on the isAlreadyRegistered flips.
|
|
1160
1422
|
*/
|
|
1161
1423
|
async stampScan(data) {
|
|
1424
|
+
var _a, _b, _c;
|
|
1162
1425
|
const payload = {};
|
|
1163
1426
|
if (!data.leaveMarkerUnstamped) {
|
|
1164
1427
|
payload["autoImportProcessedAt"] = OneUptimeDate.getCurrentDate();
|
|
@@ -1193,8 +1456,30 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1193
1456
|
// Cast: the model's JSON column makes DeepPartial recursion blow up.
|
|
1194
1457
|
data: payload,
|
|
1195
1458
|
expectedData: {
|
|
1196
|
-
|
|
1459
|
+
/*
|
|
1460
|
+
* The scan's own status, not the literal "Completed" this used to
|
|
1461
|
+
* pin. A scan that is still sweeping is importable now (issue
|
|
1462
|
+
* #3599), and its status is exactly the thing that changes when its
|
|
1463
|
+
* run ends — so reading it off the row keeps the guard doing what it
|
|
1464
|
+
* always did rather than making an In Progress stamp always miss.
|
|
1465
|
+
*/
|
|
1466
|
+
status: (_a = data.scan.status) !== null && _a !== void 0 ? _a : null,
|
|
1197
1467
|
completedAt: data.scan.completedAt || null,
|
|
1468
|
+
/*
|
|
1469
|
+
* The counters a running scan's partial uploads move, so a partial
|
|
1470
|
+
* landing between the read and this write is caught the way a
|
|
1471
|
+
* completion is: the stamp misses, the marker stays NULL, and the
|
|
1472
|
+
* next tick processes the newer host list.
|
|
1473
|
+
*
|
|
1474
|
+
* Not a perfect version token for an in-progress scan — the
|
|
1475
|
+
* ICMP-filtered fallback pass finds hosts without advancing
|
|
1476
|
+
* scannedHostCount, so two partials can carry both counts unchanged.
|
|
1477
|
+
* The consequence is bounded and self-healing: one batch of hosts
|
|
1478
|
+
* waits for the next partial upload (which clears the marker again),
|
|
1479
|
+
* and the run's final result clears it unconditionally.
|
|
1480
|
+
*/
|
|
1481
|
+
scannedHostCount: (_b = data.scan.scannedHostCount) !== null && _b !== void 0 ? _b : null,
|
|
1482
|
+
respondedHostCount: (_c = data.scan.respondedHostCount) !== null && _c !== void 0 ? _c : null,
|
|
1198
1483
|
},
|
|
1199
1484
|
});
|
|
1200
1485
|
}
|