@oneuptime/common 12.0.34 → 13.0.1
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/DatabaseModels/Alert.ts +55 -0
- package/Models/DatabaseModels/CloudResource.ts +45 -7
- package/Models/DatabaseModels/CodeRepository.ts +85 -0
- package/Models/DatabaseModels/GlobalConfig.ts +12 -12
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +57 -7
- package/Models/DatabaseModels/GoogleSecOpsConnectionRun.ts +263 -0
- package/Models/DatabaseModels/Incident.ts +55 -0
- package/Models/DatabaseModels/Index.ts +16 -0
- package/Models/DatabaseModels/InventoryItem.ts +44 -1
- package/Models/DatabaseModels/NetworkDevice.ts +126 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
- package/Models/DatabaseModels/User.ts +51 -2
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +43 -2
- package/Models/DatabaseModels/UserWebAuthn.ts +17 -0
- package/Models/DatabaseModels/VMwareResource.ts +1149 -0
- package/Models/DatabaseModels/VMwareVCenter.ts +1122 -0
- package/Models/DatabaseModels/VMwareVCenterFeed.ts +625 -0
- package/Models/DatabaseModels/VMwareVCenterLabelRule.ts +514 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +485 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +484 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +22 -1
- package/Server/API/AIAgentDataAPI.ts +79 -4
- package/Server/API/AIAgentGitHubAPI.ts +523 -0
- package/Server/API/AIChatAPI.ts +20 -1
- package/Server/API/BillingAPI.ts +33 -0
- package/Server/API/DashboardAPI.ts +10 -0
- package/Server/API/GitHubAPI.ts +47 -5
- package/Server/API/GoogleSecOpsConnectionAPI.ts +79 -0
- package/Server/API/UserWebAuthnAPI.ts +21 -1
- package/Server/API/VMwareResourceAPI.ts +143 -0
- package/Server/EnvironmentConfig.ts +47 -16
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791700000000-AddMacAddressToNetworkDevice.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.ts +636 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.ts +83 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
- package/Server/Infrastructure/Redis.ts +8 -8
- package/Server/Infrastructure/Status.ts +10 -4
- package/Server/Middleware/IdentityRateLimit.ts +101 -0
- package/Server/Services/AIRunService.ts +13 -0
- package/Server/Services/BillingPaymentMethodService.ts +99 -28
- package/Server/Services/BillingService.ts +287 -20
- package/Server/Services/CloudResourceInstanceService.ts +70 -0
- package/Server/Services/DatabaseService.ts +65 -13
- package/Server/Services/ExceptionAggregationService.ts +1 -0
- package/Server/Services/GoogleSecOpsConnectionRunService.ts +10 -0
- package/Server/Services/GoogleSecOpsConnectionService.ts +12 -0
- package/Server/Services/Index.ts +16 -0
- package/Server/Services/InventoryItemService.ts +31 -1
- package/Server/Services/LogAggregationService.ts +1 -0
- package/Server/Services/MetricAggregationService.ts +1 -0
- package/Server/Services/MobilePasskeyLoginService.ts +216 -0
- package/Server/Services/MonitorService.ts +51 -1
- package/Server/Services/MonitorTemplateService.ts +218 -35
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +481 -42
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +176 -2
- package/Server/Services/NetworkDeviceDiscoveryScanService.ts +87 -2
- package/Server/Services/NetworkDeviceService.ts +69 -0
- package/Server/Services/OpenTelemetryIngestService.ts +17 -0
- package/Server/Services/PayAsYouGoBillingService.ts +446 -0
- package/Server/Services/ProjectService.ts +46 -2
- package/Server/Services/ServerlessFunctionInstanceService.ts +71 -0
- package/Server/Services/TeamMemberService.ts +96 -36
- package/Server/Services/TelemetryIngestionKeyService.ts +80 -10
- package/Server/Services/TelemetryUsageBillingService.ts +95 -5
- package/Server/Services/TraceAggregationService.ts +5 -4
- package/Server/Services/UserNotificationRuleService.ts +76 -25
- package/Server/Services/UserWebAuthnService.ts +592 -133
- package/Server/Services/VMwareResourceService.ts +648 -0
- package/Server/Services/VMwareVCenterFeedService.ts +99 -0
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +240 -0
- package/Server/Services/VMwareVCenterLabelRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +252 -0
- package/Server/Services/VMwareVCenterOwnerRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerTeamService.ts +139 -0
- package/Server/Services/VMwareVCenterOwnerUserService.ts +133 -0
- package/Server/Services/VMwareVCenterService.ts +629 -0
- package/Server/Services/WorkflowVariableService.ts +203 -0
- package/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.ts +17 -0
- package/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.ts +31 -1
- package/Server/Types/Database/Permissions/ReadPermission.ts +45 -5
- package/Server/Types/Database/QueryUtil.ts +56 -0
- package/Server/Types/Markdown.ts +93 -1
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +7 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.ts +341 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.ts +274 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.ts +375 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubConversation.ts +846 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.ts +360 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubRunReply.ts +421 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.ts +140 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.ts +906 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +225 -17
- package/Server/Utils/DataSource/EgressGuard.ts +160 -15
- package/Server/Utils/Database/TruncateColumnValue.ts +1 -1
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +12 -1
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +35 -2
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +44 -0
- package/Server/Utils/LogRedaction.ts +2 -1
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +82 -35
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +31 -5
- package/Server/Utils/Monitor/MonitorAlert.ts +1 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +502 -38
- 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/MonitorMaintenanceSuppression.ts +26 -4
- package/Server/Utils/Monitor/MonitorResourceContext.ts +5 -3
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +14 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/Monitor/NetworkDeviceMacLearningUtil.ts +158 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +27 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +28 -5
- package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +3 -3
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +14 -9
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +116 -84
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +594 -195
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +466 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +16 -1
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +2 -1
- package/Server/Utils/Telemetry/TelemetryEntity.ts +264 -10
- package/Server/Utils/Telemetry/VMwareSnapshotScan.ts +1352 -0
- package/Tests/App/Accounts/LoginPasskey.test.tsx +529 -0
- package/Tests/App/Accounts/MobilePasskey.test.tsx +620 -0
- package/Tests/App/Accounts/PasswordRequirements.test.tsx +254 -0
- package/Tests/App/Accounts/RegisterPassword.test.tsx +553 -0
- package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +32 -0
- package/Tests/App/Dashboard/AdoptedDeviceDrawer.test.tsx +374 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +224 -0
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +432 -0
- package/Tests/App/Dashboard/BackupCodes.test.tsx +414 -0
- package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +530 -0
- package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +195 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +199 -0
- package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +198 -0
- package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +215 -0
- package/Tests/App/Dashboard/CloudFleetSummary.test.ts +183 -0
- package/Tests/App/Dashboard/CloudFleetSummaryComponent.test.tsx +248 -0
- package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +215 -0
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +3 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +441 -0
- package/Tests/App/Dashboard/DashboardLabelVariables.test.tsx +580 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +458 -0
- package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +438 -0
- package/Tests/App/Dashboard/DashboardToolbarPopupLayering.test.tsx +566 -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/DiscoveryScanLivePage.test.tsx +376 -0
- package/Tests/App/Dashboard/DiscoveryScanLiveUpdates.test.tsx +642 -0
- package/Tests/App/Dashboard/DiscoveryScanProgress.test.tsx +267 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +69 -231
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +163 -0
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +244 -0
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +724 -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/MonitorTemplateSyncFields.test.tsx +539 -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/OnCallLayerCardOverrides.test.tsx +24 -7
- package/Tests/App/Dashboard/OnCallOverridePresentation.test.ts +496 -0
- package/Tests/App/Dashboard/OnCallScheduleOverrideClarity.test.tsx +677 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +31 -3
- package/Tests/App/Dashboard/PaidUsageConsent.test.tsx +180 -0
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +1220 -0
- package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +176 -275
- package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +380 -233
- package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +3 -23
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +1 -0
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
- 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/TwoFactorStatus.test.tsx +260 -0
- package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +603 -0
- package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +324 -0
- package/Tests/App/Dashboard/VMwareDashboardWidgets.test.ts +573 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
- package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +768 -0
- package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +13 -4
- package/Tests/App/StatusPage/StatusPageOidcOrigin.test.tsx +223 -0
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +532 -40
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +19 -2
- package/Tests/Fixtures/MobilePasskeyUser.json +8 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +25 -6
- package/Tests/Models/DatabaseModels/VMwareModels.test.ts +1134 -0
- package/Tests/Models/InventoryItemStatus.test.ts +147 -0
- package/Tests/Models/NetworkDeviceMacAddressColumn.test.ts +294 -0
- package/Tests/Models/RunnerVersionLabel.test.ts +4 -2
- package/Tests/Server/API/AIChatProvidersAIEnabled.test.ts +259 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +31 -2
- package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +116 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +158 -1
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +13 -2
- package/Tests/Server/API/GitHubWebhookSignature.test.ts +368 -0
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +248 -0
- package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +330 -0
- package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +172 -0
- package/Tests/Server/API/VMwareResourceAPI.test.ts +546 -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 +62 -23
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupMetadataMigration.test.ts +85 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +34 -3
- package/Tests/Server/Infrastructure/ValkeyDeploymentConfig.test.ts +265 -0
- package/Tests/Server/Middleware/HttpMetricsMiddleware.test.ts +382 -0
- package/Tests/Server/Middleware/PasskeyRateLimit.test.ts +141 -0
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +525 -0
- package/Tests/Server/Services/AutoImportRuleRearmRecentScans.test.ts +343 -0
- package/Tests/Server/Services/AutoImportRuleWriteRearmsScans.test.ts +381 -0
- package/Tests/Server/Services/BillingPaymentMethodServiceSync.test.ts +175 -0
- package/Tests/Server/Services/BillingService.test.ts +26 -11
- package/Tests/Server/Services/BillingServiceMeteredPaymentAuthorization.test.ts +245 -0
- package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +362 -0
- package/Tests/Server/Services/CloudResourceInstanceStalePrune.test.ts +188 -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 +16 -2
- package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +153 -0
- package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +13 -0
- package/Tests/Server/Services/InventoryItemManualCreate.test.ts +105 -0
- package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +183 -0
- package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +36 -0
- package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +151 -0
- package/Tests/Server/Services/MobilePasskeyLoginIntegration.test.ts +231 -0
- package/Tests/Server/Services/MobilePasskeyLoginService.test.ts +315 -0
- package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +302 -0
- package/Tests/Server/Services/MonitorTemplateServiceCustomFieldSync.test.ts +502 -0
- package/Tests/Server/Services/MonitorTemplateServiceFieldSync.test.ts +994 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1133 -81
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +22 -0
- package/Tests/Server/Services/NetworkDeviceDiscoveryScanRegistration.test.ts +520 -0
- package/Tests/Server/Services/NetworkDeviceMacAddressNormalization.test.ts +572 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
- package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +857 -0
- package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +379 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +99 -1
- package/Tests/Server/Services/ProjectServiceSubscriptionSeats.test.ts +134 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +3 -2
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +32 -6
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +363 -175
- package/Tests/Server/Services/ServerlessFunctionInstanceStalePrune.test.ts +200 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +3 -0
- package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +762 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +3 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +72 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +17 -4
- package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +355 -0
- package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +41 -4
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +37 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyIntegration.test.ts +401 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyService.test.ts +769 -0
- package/Tests/Server/Services/UserWebAuthnUserVerification.test.ts +649 -0
- package/Tests/Server/Services/VMwareResourceService.test.ts +945 -0
- package/Tests/Server/Services/VMwareVCenterService.test.ts +722 -0
- package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +842 -0
- package/Tests/Server/TestingUtils/PasskeyHttpIntegration.ts +102 -0
- package/Tests/Server/TestingUtils/SecurityKey.ts +464 -0
- package/Tests/Server/TestingUtils/WebAuthnServiceMocks.ts +60 -0
- package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +573 -0
- package/Tests/Server/Types/Database/InventoryStatusPostgres.test.ts +368 -0
- package/Tests/Server/Types/Database/Permissions/ProjectCustomerSupportAccessColumn.test.ts +261 -0
- package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +261 -14
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +95 -0
- 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/CodeRepository/GitHubAgentTaskTrigger.test.ts +2101 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandAuthorizer.test.ts +883 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandParser.test.ts +1474 -0
- package/Tests/Server/Utils/CodeRepository/GitHubConversation.test.ts +1526 -0
- package/Tests/Server/Utils/CodeRepository/GitHubReplyComposer.test.ts +1389 -0
- package/Tests/Server/Utils/CodeRepository/GitHubRunReply.test.ts +1707 -0
- package/Tests/Server/Utils/CodeRepository/GitHubWebhookHandler.test.ts +2202 -0
- package/Tests/Server/Utils/CustomField/CustomFieldMappingRegistry.test.ts +436 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +559 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +896 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupFlushRunnerBehaviour.test.ts +1 -1
- package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +246 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +309 -4
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +6 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +185 -0
- package/Tests/Server/Utils/EventLoop.test.ts +359 -0
- package/Tests/Server/Utils/JsonWebToken.test.ts +30 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +33 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +2 -1
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +242 -0
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteriaAggregation.test.ts +13 -7
- package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +29 -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/Criteria/TelemetryStepMetricAlias.test.ts +10 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +66 -1
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEmailEvalLogAgreement.test.ts +280 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +586 -10
- 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/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +60 -1
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +60 -0
- package/Tests/Server/Utils/Monitor/MonitorRootCauseTargetResolution.test.ts +423 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +6 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -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/PerSeriesSecondEntityAlerting.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +46 -2
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +81 -45
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +711 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClickhouseIntegration.test.ts +223 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +69 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +838 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +241 -28
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +651 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +11 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +13 -12
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +112 -127
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +12 -18
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +43 -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/TelemetryEntity.test.ts +691 -8
- package/Tests/Server/Utils/Telemetry/VMwareSnapshotScan.test.ts +1748 -0
- package/Tests/Types/Cloud/CloudPlatform.test.ts +574 -0
- package/Tests/Types/Database/IncludesAnyOfGroups.test.ts +106 -0
- package/Tests/Types/JSONFunctions.test.ts +40 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +2 -0
- package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +9 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepInfraMonitorUtils.test.ts +53 -8
- package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +97 -0
- package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepTemplateSyncFields.test.ts +107 -0
- package/Tests/Types/Monitor/MonitorTemplateSyncField.test.ts +172 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +2 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +1 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +9 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +131 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +10 -0
- package/Tests/Types/Monitor/VMwareAlertTemplates.test.ts +1608 -0
- package/Tests/Types/Monitor/VMwareMetricCatalog.test.ts +488 -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/OnCallDutyPolicy/OverrideProvenance.test.ts +295 -0
- package/Tests/Types/Runner/RunnerLiveStatus.test.ts +2 -2
- package/Tests/Types/SignupPassword.test.ts +205 -0
- package/Tests/Types/StatusPage/StatusPageLanguage.test.ts +44 -0
- package/Tests/Types/SupportedLanguages.test.ts +119 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +19 -0
- package/Tests/Types/Telemetry/InventoryLiveness.test.ts +99 -0
- package/Tests/UI/ColorPickerBuild.test.ts +86 -0
- package/Tests/UI/Components/Breadcrumbs.test.tsx +32 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetail.test.tsx +160 -0
- package/Tests/UI/Components/Forms/ModelFormPreservesUserInput.test.tsx +937 -0
- package/Tests/UI/Components/Forms/ModelFormWriteOnlyColumnSelect.test.tsx +230 -0
- package/Tests/UI/Components/Forms/ValidationFormSteps.test.ts +3 -4
- package/Tests/UI/Components/LabelRuleImportExport.test.tsx +907 -0
- package/Tests/UI/Components/ModelTable/ModelTableCreateAfterEdit.test.tsx +514 -0
- package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +301 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +2 -1
- package/Tests/UI/Components/TooltipLazyContent.test.tsx +373 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +43 -12
- package/Tests/UI/ReactDomBuild.test.ts +104 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +143 -0
- package/Tests/UI/Rum/ReplayHeader.test.tsx +10 -2
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +514 -0
- package/Tests/UI/Rum/ReplayTimeFormat.test.ts +94 -0
- package/Tests/UI/Rum/ReplayUi.test.tsx +559 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +153 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +30 -0
- package/Tests/UI/Utils/DashboardStackingLayers.test.ts +197 -0
- package/Tests/UI/Utils/LabelRuleImportExport.test.ts +546 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +109 -2
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +7 -2
- package/Tests/UI/Utils/UserEmailRegistrationStatus.test.tsx +295 -0
- package/Tests/UI/Utils/WebAuthn.test.ts +265 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +5 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +11 -1
- package/Tests/Utils/Dashboard/Components/DashboardVMwareListComponents.test.ts +548 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +17 -3
- package/Tests/Utils/Dashboard/LabelVariable.test.ts +257 -0
- package/Tests/Utils/Dashboard/VariableUrlState.test.ts +144 -14
- package/Tests/Utils/LabelRuleImportExport.test.ts +583 -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/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/MonitorTemplateCustomFieldUtil.test.ts +218 -0
- package/Tests/Utils/Monitor/MonitorTemplateSyncUtil.test.ts +590 -0
- package/Tests/Utils/Monitor/NetworkTopologyEndpointAdoption.test.ts +1755 -0
- package/Tests/Utils/NetworkAutomation/AutoImportRunChain.test.ts +320 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +325 -0
- package/Tests/Utils/Telemetry/CloudInstanceIdentity.test.ts +255 -0
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +167 -0
- package/Tests/Utils/WebAuthnTestUtil.ts +79 -0
- package/Tests/__mocks__/simplewebauthn.js +33 -4
- package/Types/AI/CodeFixTaskContext.ts +122 -0
- package/Types/AI/CodeFixTaskType.ts +62 -0
- package/Types/Accounts/AccountsLanguage.ts +1 -0
- package/Types/AdminDashboard/AdminDashboardLanguage.ts +1 -0
- package/Types/BaseDatabase/IncludesAnyOfGroups.ts +77 -0
- package/Types/Calendar/CalendarEvent.ts +16 -0
- package/Types/Cloud/CloudPlatform.ts +372 -0
- package/Types/CodeRepository/GitHubCommand.ts +69 -0
- package/Types/Dashboard/DashboardComponentType.ts +2 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
- package/Types/Dashboard/DashboardComponents/DashboardMonitorListComponent.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.ts +23 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.ts +30 -0
- package/Types/Dashboard/DashboardLanguage.ts +1 -0
- package/Types/Dashboard/DashboardTemplates.ts +314 -0
- package/Types/Dashboard/DashboardVariable.ts +8 -0
- package/Types/Docs/DocsLanguage.ts +1 -0
- package/Types/Exception/EgressGuardException.ts +65 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/JSON.ts +4 -0
- package/Types/JSONFunctions.ts +16 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +36 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +1 -0
- package/Types/Monitor/MonitorStep.ts +78 -17
- package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +1 -0
- package/Types/Monitor/MonitorStepVMwareMonitor.ts +127 -0
- package/Types/Monitor/MonitorTemplateSyncField.ts +291 -0
- package/Types/Monitor/MonitorType.ts +24 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +33 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +2 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +3 -0
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +158 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +61 -0
- package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +13 -0
- package/Types/Monitor/VMwareAlertTemplates.ts +1070 -0
- package/Types/Monitor/VMwareMetricCatalog.ts +914 -0
- package/Types/NetworkAutomation/RuleRunResult.ts +402 -13
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +29 -0
- package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +16 -0
- package/Types/Password.ts +84 -5
- package/Types/Permission.ts +265 -0
- package/Types/Probe/RequestFailedDetails.ts +7 -0
- package/Types/Runner/RunnerLiveStatus.ts +1 -1
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -0
- package/Types/SerializableObjectDictionary.ts +4 -0
- package/Types/StatusPage/StatusPageLanguage.ts +1 -0
- package/Types/Telemetry/EntityType.ts +21 -0
- package/Types/Telemetry/InventoryLiveness.ts +56 -0
- package/Types/Telemetry/ServiceType.ts +1 -0
- package/Typings/Index.d.ts +63 -0
- package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +2 -2
- package/UI/Components/CSVFileUpload/CSVFileUpload.tsx +9 -2
- package/UI/Components/Calendar/Calendar.css +78 -0
- package/UI/Components/Calendar/Calendar.tsx +28 -3
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +46 -21
- package/UI/Components/Dashboard/DashboardVariableControl.tsx +285 -0
- package/UI/Components/Forms/BasicForm.tsx +44 -2
- package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -1
- package/UI/Components/Forms/Fields/FormField.tsx +16 -3
- package/UI/Components/Forms/ModelForm.tsx +159 -5
- package/UI/Components/Forms/Types/Field.ts +8 -1
- package/UI/Components/Graphs/DayUptimeGraph.tsx +8 -10
- package/UI/Components/Icon/Icon.tsx +16 -0
- package/UI/Components/Input/Input.tsx +42 -7
- package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +441 -0
- package/UI/Components/LabelRule/LabelRuleTable.tsx +142 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +22 -5
- package/UI/Components/ModelTable/ModelTable.tsx +14 -6
- package/UI/Components/MonitorGraphs/Uptime.tsx +17 -27
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +3 -1
- package/UI/Components/Tooltip/Tooltip.tsx +52 -6
- package/UI/Utils/DashboardStackingLayers.ts +85 -0
- package/UI/Utils/LabelRuleImportExport.ts +310 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +4 -3
- package/UI/Utils/TelemetryService.ts +4 -3
- package/UI/Utils/UseDashboardGridDnd.ts +4 -1
- package/UI/Utils/UserEmailRegistrationStatus.ts +33 -5
- package/UI/Utils/WebAuthn.ts +220 -0
- package/UI/esbuild-config.js +10 -0
- package/Utils/API.ts +34 -0
- package/Utils/Dashboard/Components/DashboardMonitorListComponent.ts +12 -1
- package/Utils/Dashboard/Components/DashboardVMwareHostListComponent.ts +38 -0
- package/Utils/Dashboard/Components/DashboardVMwareResourceListShared.ts +70 -0
- package/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.ts +76 -0
- package/Utils/Dashboard/Components/Index.ts +16 -0
- package/Utils/Dashboard/LabelVariable.ts +152 -0
- package/Utils/Dashboard/VariableUrlState.ts +27 -5
- package/Utils/LabelRuleImportExport.ts +496 -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/MonitorTemplateSyncUtil.ts +164 -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 +8 -0
- package/Utils/Telemetry/CloudInstanceIdentity.ts +94 -0
- package/Utils/Telemetry/EntityKey.ts +19 -0
- package/Utils/Telemetry/EntityRelationship.ts +19 -0
- package/build/dist/Models/DatabaseModels/Alert.js +54 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +44 -7
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +87 -0
- package/build/dist/Models/DatabaseModels/CodeRepository.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/GoogleSecOpsConnection.js +60 -7
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js +287 -0
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +54 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +16 -0
- package/build/dist/Models/DatabaseModels/Index.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/NetworkDevice.js +128 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +54 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +57 -4
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +47 -2
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +18 -0
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareResource.js +1201 -0
- package/build/dist/Models/DatabaseModels/VMwareResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js +1149 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +22 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +63 -3
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentGitHubAPI.js +363 -0
- package/build/dist/Server/API/AIAgentGitHubAPI.js.map +1 -0
- package/build/dist/Server/API/AIChatAPI.js +19 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/BillingAPI.js +22 -0
- package/build/dist/Server/API/BillingAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +10 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +33 -5
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +56 -0
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -0
- package/build/dist/Server/API/UserWebAuthnAPI.js +17 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/API/VMwareResourceAPI.js +106 -0
- package/build/dist/Server/API/VMwareResourceAPI.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +44 -12
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- 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/1791800000000-SplitWebAuthnChallengeByPurpose.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js +241 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.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/Status.js +10 -4
- package/build/dist/Server/Infrastructure/Status.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +80 -0
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +14 -1
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/BillingPaymentMethodService.js +71 -21
- package/build/dist/Server/Services/BillingPaymentMethodService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +210 -22
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceInstanceService.js +66 -0
- package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +58 -13
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js +9 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +1 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +7 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +16 -0
- package/build/dist/Server/Services/Index.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/LogAggregationService.js +1 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +1 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MobilePasskeyLoginService.js +137 -0
- package/build/dist/Server/Services/MobilePasskeyLoginService.js.map +1 -0
- package/build/dist/Server/Services/MonitorService.js +34 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +167 -30
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +394 -38
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +142 -2
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.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/OpenTelemetryIngestService.js +28 -13
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PayAsYouGoBillingService.js +297 -0
- package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -0
- package/build/dist/Server/Services/ProjectService.js +38 -2
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +66 -0
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +85 -28
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +61 -10
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +62 -5
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +5 -4
- package/build/dist/Server/Services/TraceAggregationService.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/UserWebAuthnService.js +345 -113
- package/build/dist/Server/Services/UserWebAuthnService.js.map +1 -1
- package/build/dist/Server/Services/VMwareResourceService.js +395 -0
- package/build/dist/Server/Services/VMwareResourceService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js +89 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +197 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +214 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js +129 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js +122 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterService.js +533 -0
- package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -0
- package/build/dist/Server/Services/WorkflowVariableService.js +169 -0
- package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js +12 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js +25 -2
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.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/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/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js +226 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js +297 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js +582 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js +365 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js +103 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js +661 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +166 -18
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +99 -15
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +12 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +20 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +31 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +2 -1
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +58 -35
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.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 +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +382 -36
- 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/MonitorMaintenanceSuppression.js +12 -4
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +5 -3
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +22 -9
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -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/SeriesResourceLabels.js +21 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +21 -6
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +3 -3
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +9 -9
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +92 -71
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +428 -143
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +376 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +14 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +206 -14
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js +933 -0
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js +40 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +57 -0
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
- package/build/dist/Types/Accounts/AccountsLanguage.js +1 -0
- package/build/dist/Types/Accounts/AccountsLanguage.js.map +1 -1
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js +1 -0
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.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/Cloud/CloudPlatform.js +277 -0
- package/build/dist/Types/Cloud/CloudPlatform.js.map +1 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js +52 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +286 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.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/Docs/DocsLanguage.js +1 -0
- package/build/dist/Types/Docs/DocsLanguage.js.map +1 -1
- package/build/dist/Types/Exception/EgressGuardException.js +59 -0
- package/build/dist/Types/Exception/EgressGuardException.js.map +1 -0
- 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 +13 -0
- package/build/dist/Types/JSONFunctions.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +61 -18
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +1 -0
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js +71 -0
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js +211 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +23 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +28 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +2 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +120 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +60 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js +775 -0
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js +799 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.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/OnCallDutyPolicy/ScheduleShiftUtil.js +25 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +5 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
- package/build/dist/Types/Password.js +63 -5
- package/build/dist/Types/Password.js.map +1 -1
- package/build/dist/Types/Permission.js +234 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Probe/RequestFailedDetails.js +7 -0
- package/build/dist/Types/Probe/RequestFailedDetails.js.map +1 -1
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +2 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.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/StatusPage/StatusPageLanguage.js +1 -0
- package/build/dist/Types/StatusPage/StatusPageLanguage.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +21 -0
- package/build/dist/Types/Telemetry/EntityType.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/ServiceType.js +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +2 -2
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.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/Calendar/Calendar.js +24 -4
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +9 -2
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- 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/Forms/BasicForm.js +28 -3
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -3
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +89 -6
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +5 -6
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +14 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +37 -8
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +228 -0
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +102 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +15 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +13 -5
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +14 -15
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +33 -4
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/DashboardStackingLayers.js +44 -0
- package/build/dist/UI/Utils/DashboardStackingLayers.js.map +1 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js +195 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +4 -4
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +3 -2
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +2 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -1
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js +21 -4
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js.map +1 -1
- package/build/dist/UI/Utils/WebAuthn.js +121 -0
- package/build/dist/UI/Utils/WebAuthn.js.map +1 -0
- package/build/dist/Utils/API.js +29 -0
- 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/Components/DashboardVMwareHostListComponent.js +33 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js +54 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js +60 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
- package/build/dist/Utils/Dashboard/Components/Index.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/LabelRuleImportExport.js +356 -0
- package/build/dist/Utils/LabelRuleImportExport.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/MonitorTemplateSyncUtil.js +110 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.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 +6 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -1
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js +88 -0
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +15 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +13 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.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
- package/Tests/App/Dashboard/NotificationEmailPreferences.test.tsx +0 -399
|
@@ -21,6 +21,8 @@ import MonitorType from "../../Types/Monitor/MonitorType";
|
|
|
21
21
|
import {
|
|
22
22
|
AutoImportRuleRunResult,
|
|
23
23
|
MAX_MATCHED_IP_SAMPLE,
|
|
24
|
+
MAX_RUN_FAILURE_REASON_LENGTH,
|
|
25
|
+
MAX_RUN_FAILURE_REASONS,
|
|
24
26
|
} from "../../Types/NetworkAutomation/RuleRunResult";
|
|
25
27
|
import AutoImportRuleMatcher, {
|
|
26
28
|
AutoImportHostEvaluation,
|
|
@@ -50,13 +52,18 @@ import logger, { LogAttributes } from "../Utils/Logger";
|
|
|
50
52
|
* then apply themselves through NetworkDeviceService.onCreateSuccess's
|
|
51
53
|
* existing rule chain, exactly as they do for a manual import.
|
|
52
54
|
*
|
|
53
|
-
*
|
|
55
|
+
* Three entry points, the first two mirroring the label-rule engine:
|
|
54
56
|
*
|
|
55
57
|
* - processCompletedScan: the automatic path, called by the
|
|
56
58
|
* NetworkDeviceDiscovery worker for each Completed scan whose
|
|
57
59
|
* autoImportProcessedAt marker is NULL.
|
|
58
60
|
* - applyRuleToCompletedScans: the manual "Run Now" (and its dry run),
|
|
59
61
|
* applying ONE rule to the project's existing completed scans.
|
|
62
|
+
* - rearmRecentScansForRuleChange: called when a rule is written, it
|
|
63
|
+
* imports nothing itself — it clears the marker on the project's recent
|
|
64
|
+
* results so the automatic path above evaluates them against the rule
|
|
65
|
+
* that just changed, instead of the operator having to press Run Now
|
|
66
|
+
* (issue #3487).
|
|
60
67
|
*
|
|
61
68
|
* Everything here is idempotent by construction: a device exists per
|
|
62
69
|
* (project, address), recurring scans re-report the same hosts every
|
|
@@ -118,6 +125,35 @@ export const MAX_MONITORS_PER_AUTO_IMPORT_RUN: number = 500;
|
|
|
118
125
|
// Scans one manual "Run Now" will read, oldest results last.
|
|
119
126
|
export const MAX_SCANS_PER_AUTO_IMPORT_RULE_RUN: number = 100;
|
|
120
127
|
|
|
128
|
+
/*
|
|
129
|
+
* Scans one rule write re-arms — see rearmRecentScansForRuleChange. The same
|
|
130
|
+
* ceiling as a manual run's, because it feeds the same work: a project whose
|
|
131
|
+
* subnets are swept by more fresh scans than this has its newest results
|
|
132
|
+
* re-armed and the rest left to "Run Now", rather than a rule save turning
|
|
133
|
+
* into an unbounded burst of writes.
|
|
134
|
+
*/
|
|
135
|
+
export const MAX_SCANS_REARMED_PER_RULE_WRITE: number = 100;
|
|
136
|
+
|
|
137
|
+
/*
|
|
138
|
+
* How many monitor creates may fail IDENTICALLY, back to back with no success
|
|
139
|
+
* between them, before the run stops attempting any more.
|
|
140
|
+
*
|
|
141
|
+
* A monitor create fails for one of two kinds of reason. Per host — this
|
|
142
|
+
* device's name collides, this one raced another writer — where the next host
|
|
143
|
+
* is unaffected and trying it is right. Or systemic: the template's criteria
|
|
144
|
+
* name a monitor status that no longer exists, the plan's monitor limit is
|
|
145
|
+
* reached, the database is refusing writes. Those fail for the FIRST device
|
|
146
|
+
* and for all 500 after it, and the old engine could not tell the difference:
|
|
147
|
+
* it spent the whole per-run monitor budget re-proving one broken thing, then
|
|
148
|
+
* reported "Stopped at the run cap — run again to continue", which is an
|
|
149
|
+
* instruction to do it all again. That is OneUptime/oneuptime#3643.
|
|
150
|
+
*
|
|
151
|
+
* Ten consecutive failures carrying the SAME message, with no create
|
|
152
|
+
* succeeding in between, is not a run of bad luck. Any success resets it, so a
|
|
153
|
+
* genuinely per-host fault never trips this.
|
|
154
|
+
*/
|
|
155
|
+
export const MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES: number = 10;
|
|
156
|
+
|
|
121
157
|
/*
|
|
122
158
|
* Results older than this are stamped processed WITHOUT importing. A late
|
|
123
159
|
* result can land on a reaper-Failed scan hours after its sweep ran (the
|
|
@@ -161,6 +197,28 @@ export interface ExistingMonitorProvisioningState {
|
|
|
161
197
|
autoProvisionedKeys: Set<string>;
|
|
162
198
|
manuallyMonitoredDeviceIds: Set<string>;
|
|
163
199
|
attemptedProvisioningKeys: Set<string>;
|
|
200
|
+
/*
|
|
201
|
+
* Monitor template ids this run has already proved it cannot resolve —
|
|
202
|
+
* deleted, moved to another project, or no longer of type Network Device.
|
|
203
|
+
* That is a property of the RULE, settled the first time a host needs the
|
|
204
|
+
* template, and re-deciding it per host costs one wasted monitor budget slot
|
|
205
|
+
* and one log line per device in the estate.
|
|
206
|
+
*/
|
|
207
|
+
unresolvableTemplateIds: Set<string>;
|
|
208
|
+
/*
|
|
209
|
+
* Consecutive monitor creates that failed with the same message and no
|
|
210
|
+
* success since — see MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES.
|
|
211
|
+
*/
|
|
212
|
+
consecutiveCreateFailures: number;
|
|
213
|
+
lastCreateFailureReason: string;
|
|
214
|
+
/*
|
|
215
|
+
* Whether this run has EVER provisioned a monitor (or lost a race to
|
|
216
|
+
* somebody who did). One success is proof the create pipeline works, which
|
|
217
|
+
* is what disarms the systemic-failure guard for good.
|
|
218
|
+
*/
|
|
219
|
+
hasProvisionedAnyMonitor: boolean;
|
|
220
|
+
// Set once this run gives up on provisioning monitors at all.
|
|
221
|
+
isProvisioningHalted: boolean;
|
|
164
222
|
}
|
|
165
223
|
|
|
166
224
|
export type ExistingMonitorsByProjectId = Map<
|
|
@@ -244,6 +302,11 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
244
302
|
},
|
|
245
303
|
props: {
|
|
246
304
|
isRoot: true,
|
|
305
|
+
/*
|
|
306
|
+
* Keep the stored payload for stampScan; the engine checks live
|
|
307
|
+
* inventory itself before evaluating these hosts.
|
|
308
|
+
*/
|
|
309
|
+
ignoreHooks: true,
|
|
247
310
|
},
|
|
248
311
|
});
|
|
249
312
|
|
|
@@ -380,6 +443,123 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
380
443
|
return result;
|
|
381
444
|
}
|
|
382
445
|
|
|
446
|
+
/*
|
|
447
|
+
* The third way stored results become importable, alongside a new upload
|
|
448
|
+
* and a manual "Run Now": the RULES changed.
|
|
449
|
+
*
|
|
450
|
+
* The sweep is driven entirely by the marker — it looks only at scans whose
|
|
451
|
+
* autoImportProcessedAt is NULL — so results the engine has already
|
|
452
|
+
* evaluated are, as far as the worker is concerned, finished with. That is
|
|
453
|
+
* right for results evaluated against the rules the project HAS, and wrong
|
|
454
|
+
* the moment somebody writes a new one: the rule an operator just authored
|
|
455
|
+
* has nothing left to apply to until a scan reports again. In a project
|
|
456
|
+
* whose scans are one-shot, that is never — so a brand-new rule appears to
|
|
457
|
+
* do nothing at all and the operator is left pressing Run Now by hand,
|
|
458
|
+
* which is what OneUptime issue #3487 reported as "auto import rules have
|
|
459
|
+
* no schedule".
|
|
460
|
+
*
|
|
461
|
+
* Clearing the marker on the project's recent results hands them back to
|
|
462
|
+
* the sweep, which applies the FULL rule set to them within a minute —
|
|
463
|
+
* same pass, same lock, same idempotency as any other tick. Nothing is
|
|
464
|
+
* imported here: this method writes one column and no devices, so a rule
|
|
465
|
+
* save stays a rule save and the minutes of paced import work stay in the
|
|
466
|
+
* worker where a crash is resumable.
|
|
467
|
+
*
|
|
468
|
+
* Bounded to results still inside the engine's own freshness horizon
|
|
469
|
+
* (MAX_RESULT_AGE_IN_HOURS), which preserves exactly the guarantee that
|
|
470
|
+
* stamping rule-less projects exists to give: a first rule can never
|
|
471
|
+
* mass-import an estate discovered months ago. Older results remain Run
|
|
472
|
+
* Now's business, where "import these old hosts" is a deliberate click.
|
|
473
|
+
*
|
|
474
|
+
* Returns how many scans were re-armed. It may throw — the callers are rule
|
|
475
|
+
* writes, and they catch and log rather than fail an operator's save over a
|
|
476
|
+
* re-arm that can be had again from the next scan result or from Run Now.
|
|
477
|
+
*/
|
|
478
|
+
@CaptureSpan()
|
|
479
|
+
public async rearmRecentScansForRuleChange(data: {
|
|
480
|
+
projectId: ObjectID;
|
|
481
|
+
}): Promise<number> {
|
|
482
|
+
const scanStubs: Array<NetworkDeviceDiscoveryScan> =
|
|
483
|
+
await NetworkDeviceDiscoveryScanService.findBy({
|
|
484
|
+
query: {
|
|
485
|
+
projectId: data.projectId,
|
|
486
|
+
/*
|
|
487
|
+
* A scan that is still sweeping counts, for the reason its partial
|
|
488
|
+
* results are importable at all: those hosts have been found.
|
|
489
|
+
*/
|
|
490
|
+
status: QueryHelper.any(DISCOVERY_SCAN_IMPORTABLE_STATUSES),
|
|
491
|
+
/*
|
|
492
|
+
* Only STAMPED scans need re-arming. One whose marker is already
|
|
493
|
+
* NULL is queued for the next tick as it stands, and clearing it
|
|
494
|
+
* again would be a write that changes nothing.
|
|
495
|
+
*/
|
|
496
|
+
autoImportProcessedAt: QueryHelper.notNull(),
|
|
497
|
+
/*
|
|
498
|
+
* Fresh results only — the horizon processCompletedScan enforces
|
|
499
|
+
* anyway, applied here so a rule save does not re-arm scans the
|
|
500
|
+
* sweep would only retire again (one pointless write per scan, and
|
|
501
|
+
* a "too old to auto-import" warning per scan in the log).
|
|
502
|
+
* completedAt is NULL while a scan is still sweeping, and those
|
|
503
|
+
* results are the freshest the project has.
|
|
504
|
+
*/
|
|
505
|
+
completedAt: QueryHelper.greaterThanEqualToOrNull(
|
|
506
|
+
OneUptimeDate.getSomeHoursAgo(MAX_RESULT_AGE_IN_HOURS),
|
|
507
|
+
),
|
|
508
|
+
},
|
|
509
|
+
select: {
|
|
510
|
+
_id: true,
|
|
511
|
+
},
|
|
512
|
+
// Newest results first, so a capped re-arm keeps the ones that matter.
|
|
513
|
+
sort: {
|
|
514
|
+
completedAt: SortOrder.Descending,
|
|
515
|
+
},
|
|
516
|
+
limit: MAX_SCANS_REARMED_PER_RULE_WRITE,
|
|
517
|
+
skip: 0,
|
|
518
|
+
props: {
|
|
519
|
+
isRoot: true,
|
|
520
|
+
},
|
|
521
|
+
});
|
|
522
|
+
|
|
523
|
+
for (const scanStub of scanStubs) {
|
|
524
|
+
/*
|
|
525
|
+
* The same hook-free single statement the ingest endpoint clears this
|
|
526
|
+
* marker with, and for the same reasons (see stampScan) — but
|
|
527
|
+
* deliberately WITHOUT refreshing updatedAt. On an In Progress scan
|
|
528
|
+
* that column is the "has this probe gone silent" clock the stale-scan
|
|
529
|
+
* reaper reads (Workers/Jobs/NetworkDeviceDiscovery/
|
|
530
|
+
* RequeueRecurringScans.ts); a rule save is not the probe saying
|
|
531
|
+
* something, and bumping it would postpone the rescue of a scan whose
|
|
532
|
+
* probe had already died.
|
|
533
|
+
*
|
|
534
|
+
* No compare-and-set, because the query above already excludes the row
|
|
535
|
+
* every racing writer is interested in: the sweep only ever reads scans
|
|
536
|
+
* whose marker is NULL, and these are the ones whose marker is set. The
|
|
537
|
+
* one interleaving left is ingest clearing the marker between the read
|
|
538
|
+
* and this write and a sweep consuming those new results — and that
|
|
539
|
+
* sweep loads its rules after the rule write that brought us here, so
|
|
540
|
+
* it applies them. Re-clearing behind it costs one more pass over
|
|
541
|
+
* results whose devices already exist.
|
|
542
|
+
*/
|
|
543
|
+
await NetworkDeviceDiscoveryScanService.updateColumnsByIdWithoutHooks({
|
|
544
|
+
id: scanStub.id!,
|
|
545
|
+
// Cast: the model's JSON column makes DeepPartial recursion blow up.
|
|
546
|
+
data: {
|
|
547
|
+
autoImportProcessedAt: null,
|
|
548
|
+
} as unknown as QueryDeepPartialEntity<NetworkDeviceDiscoveryScan>,
|
|
549
|
+
skipUpdateDateColumn: true,
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
if (scanStubs.length > 0) {
|
|
554
|
+
logger.info(
|
|
555
|
+
`Auto-import: rules changed, so ${scanStubs.length} recent discovery scan result(s) were re-armed; the next sweep will apply the project's rules to them.`,
|
|
556
|
+
{ projectId: data.projectId.toString() } as LogAttributes,
|
|
557
|
+
);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
return scanStubs.length;
|
|
561
|
+
}
|
|
562
|
+
|
|
383
563
|
/*
|
|
384
564
|
* The manual path: apply ONE rule to the project's completed scans, newest
|
|
385
565
|
* first — or, as a dry run, evaluate everything and write nothing. The
|
|
@@ -586,7 +766,8 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
586
766
|
scanStubs.pop();
|
|
587
767
|
}
|
|
588
768
|
|
|
589
|
-
for (
|
|
769
|
+
for (let index: number = 0; index < scanStubs.length; index++) {
|
|
770
|
+
const scanStub: NetworkDeviceDiscoveryScan = scanStubs[index]!;
|
|
590
771
|
const scan: NetworkDeviceDiscoveryScan | null =
|
|
591
772
|
await NetworkDeviceDiscoveryScanService.findOneBy({
|
|
592
773
|
query: {
|
|
@@ -605,7 +786,8 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
605
786
|
discoveredDevices: true,
|
|
606
787
|
...AUTO_IMPORT_SCAN_CREDENTIAL_SELECT,
|
|
607
788
|
},
|
|
608
|
-
|
|
789
|
+
// Preserve the raw scan rows for the compare-and-set write-back.
|
|
790
|
+
props: { isRoot: true, ignoreHooks: true },
|
|
609
791
|
});
|
|
610
792
|
|
|
611
793
|
// Re-queued or deleted since the stub query — nothing to evaluate.
|
|
@@ -639,8 +821,15 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
639
821
|
});
|
|
640
822
|
}
|
|
641
823
|
|
|
642
|
-
|
|
824
|
+
/*
|
|
825
|
+
* The caps are shared across the whole run, dry or real. Stop OPENING
|
|
826
|
+
* further scans once they are spent — each one is a multi-megabyte
|
|
827
|
+
* jsonb read whose hosts this pass could not act on anyway — but say
|
|
828
|
+
* that scans were left unread, so the pending counters below are
|
|
829
|
+
* reported as a floor rather than as the estate's total.
|
|
830
|
+
*/
|
|
643
831
|
if (result.isTruncated) {
|
|
832
|
+
result.hasUnevaluatedScans = index < scanStubs.length - 1;
|
|
644
833
|
break;
|
|
645
834
|
}
|
|
646
835
|
|
|
@@ -678,18 +867,69 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
678
867
|
monitorsSkippedAlreadyExisting: 0,
|
|
679
868
|
monitorsSkippedUnsupportedHost: 0,
|
|
680
869
|
monitorsFailed: 0,
|
|
870
|
+
deviceFailureReasons: [],
|
|
871
|
+
monitorFailureReasons: [],
|
|
872
|
+
monitorProvisioningHalted: false,
|
|
681
873
|
isTruncated: false,
|
|
874
|
+
hostsPendingImport: 0,
|
|
875
|
+
monitorsPendingCreation: 0,
|
|
876
|
+
hasUnevaluatedScans: false,
|
|
682
877
|
hasMoreScans: false,
|
|
683
878
|
isDryRun: isDryRun,
|
|
684
879
|
matchedIpAddressSample: [],
|
|
685
880
|
};
|
|
686
881
|
}
|
|
687
882
|
|
|
883
|
+
/*
|
|
884
|
+
* Keep the reason a create failed, so the run can say WHY it created
|
|
885
|
+
* nothing instead of pointing at server logs the operator of a self-hosted
|
|
886
|
+
* install may not be able to read. Deduplicated (500 identical failures are
|
|
887
|
+
* one reason) and capped, in both count and length, because this string
|
|
888
|
+
* ends up in a modal.
|
|
889
|
+
*/
|
|
890
|
+
private recordFailureReason(reasons: Array<string>, error: unknown): void {
|
|
891
|
+
const message: string = this.describeError(error);
|
|
892
|
+
|
|
893
|
+
if (!message) {
|
|
894
|
+
return;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
const trimmed: string = message.substring(0, MAX_RUN_FAILURE_REASON_LENGTH);
|
|
898
|
+
|
|
899
|
+
if (reasons.includes(trimmed)) {
|
|
900
|
+
return;
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
if (reasons.length >= MAX_RUN_FAILURE_REASONS) {
|
|
904
|
+
return;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
reasons.push(trimmed);
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/*
|
|
911
|
+
* The message an operator should see. Exception extends Error, so one arm
|
|
912
|
+
* covers both; anything else is stringified rather than dropped, because a
|
|
913
|
+
* thrown non-Error is exactly the case where the reason matters most.
|
|
914
|
+
*/
|
|
915
|
+
private describeError(error: unknown): string {
|
|
916
|
+
if (error instanceof Error) {
|
|
917
|
+
return (error.message || "").replace(/\s+/g, " ").trim();
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
return String(error).replace(/\s+/g, " ").trim();
|
|
921
|
+
}
|
|
922
|
+
|
|
688
923
|
private emptyExistingMonitorProvisioningState(): ExistingMonitorProvisioningState {
|
|
689
924
|
return {
|
|
690
925
|
autoProvisionedKeys: new Set(),
|
|
691
926
|
manuallyMonitoredDeviceIds: new Set(),
|
|
692
927
|
attemptedProvisioningKeys: new Set(),
|
|
928
|
+
unresolvableTemplateIds: new Set(),
|
|
929
|
+
consecutiveCreateFailures: 0,
|
|
930
|
+
lastCreateFailureReason: "",
|
|
931
|
+
hasProvisionedAnyMonitor: false,
|
|
932
|
+
isProvisioningHalted: false,
|
|
693
933
|
};
|
|
694
934
|
}
|
|
695
935
|
|
|
@@ -1108,6 +1348,18 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1108
1348
|
|
|
1109
1349
|
const createdIpAddresses: Array<string> = [];
|
|
1110
1350
|
|
|
1351
|
+
/*
|
|
1352
|
+
* What this pass counted as still-to-do, deduplicated.
|
|
1353
|
+
*
|
|
1354
|
+
* A stored result can list the same address twice (duplicate rows are
|
|
1355
|
+
* normal enough that normalisation preserves them and the import path
|
|
1356
|
+
* treats the second as already-registered), so counting rows rather than
|
|
1357
|
+
* distinct work would report a remainder larger than the work that
|
|
1358
|
+
* actually remains — in a number whose whole purpose is to be trusted.
|
|
1359
|
+
*/
|
|
1360
|
+
const pendingImportAddresses: Set<string> = new Set<string>();
|
|
1361
|
+
const pendingProvisioningKeys: Set<string> = new Set<string>();
|
|
1362
|
+
|
|
1111
1363
|
for (const host of hosts) {
|
|
1112
1364
|
/*
|
|
1113
1365
|
* The address becomes the device's varchar(100) hostname, on which
|
|
@@ -1180,22 +1432,13 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1180
1432
|
let deviceWasCreated: boolean = false;
|
|
1181
1433
|
|
|
1182
1434
|
/*
|
|
1183
|
-
*
|
|
1184
|
-
*
|
|
1185
|
-
*
|
|
1186
|
-
* duplicate rows and overlapping scans
|
|
1435
|
+
* Current inventory is authoritative. The stored isAlreadyRegistered
|
|
1436
|
+
* flag can outlive a deleted device and must not veto re-importing it.
|
|
1437
|
+
* The map also includes devices created during this run, keeping
|
|
1438
|
+
* duplicate rows and overlapping scans idempotent.
|
|
1187
1439
|
*/
|
|
1188
|
-
if (
|
|
1440
|
+
if (networkDevice) {
|
|
1189
1441
|
result.hostsSkippedAlreadyRegistered++;
|
|
1190
|
-
|
|
1191
|
-
/*
|
|
1192
|
-
* A stale scan can claim a deleted device is still registered. With
|
|
1193
|
-
* no live row there is neither a safe binding nor enough intent to
|
|
1194
|
-
* recreate it from old data, so preserve the established skip.
|
|
1195
|
-
*/
|
|
1196
|
-
if (!networkDevice) {
|
|
1197
|
-
continue;
|
|
1198
|
-
}
|
|
1199
1442
|
}
|
|
1200
1443
|
|
|
1201
1444
|
if (result.matchedIpAddressSample.length < MAX_MATCHED_IP_SAMPLE) {
|
|
@@ -1206,8 +1449,25 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1206
1449
|
|
|
1207
1450
|
if (!networkDevice) {
|
|
1208
1451
|
if (data.attempts.deviceCount >= MAX_DEVICES_PER_AUTO_IMPORT_RUN) {
|
|
1452
|
+
/*
|
|
1453
|
+
* Budget spent — stop WRITING, keep COUNTING. The rest of this
|
|
1454
|
+
* loop is pure matching over a jsonb array that is already in
|
|
1455
|
+
* memory against addresses primeExistingDevices already resolved,
|
|
1456
|
+
* so finishing the scan costs nothing the cap exists to prevent,
|
|
1457
|
+
* and it is the difference between "imported 500" and "imported
|
|
1458
|
+
* 500 of 909, 409 still to go". A run that stopped mid-count
|
|
1459
|
+
* reported the truncated numbers as if they were the estate,
|
|
1460
|
+
* which is what OneUptime issue #3642 experienced as the
|
|
1461
|
+
* remainder being silently dropped.
|
|
1462
|
+
*/
|
|
1209
1463
|
result.isTruncated = true;
|
|
1210
|
-
|
|
1464
|
+
|
|
1465
|
+
if (!pendingImportAddresses.has(host.ipAddress)) {
|
|
1466
|
+
pendingImportAddresses.add(host.ipAddress);
|
|
1467
|
+
result.hostsPendingImport++;
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
continue;
|
|
1211
1471
|
}
|
|
1212
1472
|
|
|
1213
1473
|
if (data.isDryRun) {
|
|
@@ -1262,8 +1522,8 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1262
1522
|
continue;
|
|
1263
1523
|
}
|
|
1264
1524
|
|
|
1265
|
-
const
|
|
1266
|
-
{
|
|
1525
|
+
const monitorsLeftPending: Array<string> =
|
|
1526
|
+
await this.ensureMonitorsForDevice({
|
|
1267
1527
|
projectId: scan.projectId,
|
|
1268
1528
|
host: host,
|
|
1269
1529
|
networkDevice: networkDevice,
|
|
@@ -1273,18 +1533,45 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1273
1533
|
result: result,
|
|
1274
1534
|
attempts: data.attempts,
|
|
1275
1535
|
isDryRun: data.isDryRun,
|
|
1276
|
-
}
|
|
1277
|
-
);
|
|
1536
|
+
});
|
|
1278
1537
|
|
|
1279
|
-
|
|
1538
|
+
/*
|
|
1539
|
+
* Same protocol as the device cap above: the monitor budget stops the
|
|
1540
|
+
* creates, not the accounting. It also has its OWN cap, so an estate
|
|
1541
|
+
* that is fully imported but unmonitored — the shape of issue #3642 —
|
|
1542
|
+
* runs out of monitor budget with nothing pending on the device side,
|
|
1543
|
+
* and the operator needs to be told how many devices are still
|
|
1544
|
+
* waiting for a monitor.
|
|
1545
|
+
*/
|
|
1546
|
+
for (const templateId of monitorsLeftPending) {
|
|
1280
1547
|
result.isTruncated = true;
|
|
1281
|
-
|
|
1548
|
+
|
|
1549
|
+
const pendingKey: string =
|
|
1550
|
+
NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(
|
|
1551
|
+
networkDevice.id!,
|
|
1552
|
+
templateId,
|
|
1553
|
+
);
|
|
1554
|
+
|
|
1555
|
+
if (!pendingProvisioningKeys.has(pendingKey)) {
|
|
1556
|
+
pendingProvisioningKeys.add(pendingKey);
|
|
1557
|
+
result.monitorsPendingCreation++;
|
|
1558
|
+
}
|
|
1282
1559
|
}
|
|
1283
1560
|
}
|
|
1284
1561
|
|
|
1285
1562
|
return createdIpAddresses;
|
|
1286
1563
|
}
|
|
1287
1564
|
|
|
1565
|
+
/*
|
|
1566
|
+
* Reconcile one device against the templates the matched rules selected.
|
|
1567
|
+
*
|
|
1568
|
+
* Returns the template ids the run's budget left UNATTEMPTED — empty when
|
|
1569
|
+
* every requested monitor was settled, whether created, failed, or skipped
|
|
1570
|
+
* because monitoring already existed. A non-empty answer is what makes the
|
|
1571
|
+
* run report itself truncated; the ids (rather than a bare count) are what
|
|
1572
|
+
* let the caller count one device's leftover work once, however many
|
|
1573
|
+
* duplicate rows the scan lists that host under.
|
|
1574
|
+
*/
|
|
1288
1575
|
private async ensureMonitorsForDevice(data: {
|
|
1289
1576
|
projectId: ObjectID;
|
|
1290
1577
|
host: DiscoveredNetworkDevice;
|
|
@@ -1295,7 +1582,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1295
1582
|
result: AutoImportRuleRunResult;
|
|
1296
1583
|
attempts: ImportAttemptBudget;
|
|
1297
1584
|
isDryRun: boolean;
|
|
1298
|
-
}): Promise<
|
|
1585
|
+
}): Promise<Array<string>> {
|
|
1299
1586
|
/*
|
|
1300
1587
|
* A Network Device monitor is fed by the device's polls, and nothing
|
|
1301
1588
|
* polls a monitor-backed device — its bound monitor's status IS its
|
|
@@ -1312,7 +1599,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1312
1599
|
)
|
|
1313
1600
|
) {
|
|
1314
1601
|
data.result.monitorsSkippedUnsupportedHost += data.templateIds.length;
|
|
1315
|
-
return
|
|
1602
|
+
return [];
|
|
1316
1603
|
}
|
|
1317
1604
|
|
|
1318
1605
|
if (!data.networkDevice.id) {
|
|
@@ -1321,7 +1608,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1321
1608
|
`Auto-import: cannot provision monitor(s) for ${data.host.ipAddress} because the Network Device has no id.`,
|
|
1322
1609
|
{ projectId: data.projectId.toString() } as LogAttributes,
|
|
1323
1610
|
);
|
|
1324
|
-
return
|
|
1611
|
+
return [];
|
|
1325
1612
|
}
|
|
1326
1613
|
|
|
1327
1614
|
const networkDeviceId: ObjectID = data.networkDevice.id;
|
|
@@ -1354,25 +1641,76 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1354
1641
|
}
|
|
1355
1642
|
|
|
1356
1643
|
if (pendingTemplateIds.length === 0) {
|
|
1357
|
-
return
|
|
1644
|
+
return [];
|
|
1358
1645
|
}
|
|
1359
1646
|
|
|
1647
|
+
/*
|
|
1648
|
+
* The project-wide snapshot already knows this device is monitored by
|
|
1649
|
+
* hand, and that answer outranks any failure below: a device nobody was
|
|
1650
|
+
* going to provision cannot be a monitor this run failed to create. Read
|
|
1651
|
+
* from memory, so it stays ahead of the systemic verdicts.
|
|
1652
|
+
*/
|
|
1360
1653
|
if (
|
|
1361
1654
|
data.existingMonitors.manuallyMonitoredDeviceIds.has(
|
|
1362
1655
|
networkDeviceIdString,
|
|
1363
1656
|
)
|
|
1364
1657
|
) {
|
|
1365
1658
|
data.result.monitorsSkippedAlreadyExisting += pendingTemplateIds.length;
|
|
1366
|
-
return
|
|
1659
|
+
return [];
|
|
1660
|
+
}
|
|
1661
|
+
|
|
1662
|
+
/*
|
|
1663
|
+
* Everything below here costs the run something — a monitor budget slot, a
|
|
1664
|
+
* per-device search of the unindexed monitor step payload, a create round
|
|
1665
|
+
* trip. None of it is worth spending on work this run has already proved
|
|
1666
|
+
* cannot succeed, so the two systemic verdicts are settled next: a
|
|
1667
|
+
* template this run could not load, and a create pipeline that has failed
|
|
1668
|
+
* identically for every device it tried.
|
|
1669
|
+
*
|
|
1670
|
+
* Both still COUNT the monitors that are missing. "0 created, and here is
|
|
1671
|
+
* why" is the answer; quietly reporting fewer missing monitors than there
|
|
1672
|
+
* are would trade one confusing dialog for another.
|
|
1673
|
+
*/
|
|
1674
|
+
const resolvableTemplateIds: Array<string> = [];
|
|
1675
|
+
|
|
1676
|
+
for (const templateId of pendingTemplateIds) {
|
|
1677
|
+
if (
|
|
1678
|
+
!data.existingMonitors.isProvisioningHalted &&
|
|
1679
|
+
!data.existingMonitors.unresolvableTemplateIds.has(templateId)
|
|
1680
|
+
) {
|
|
1681
|
+
resolvableTemplateIds.push(templateId);
|
|
1682
|
+
continue;
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
/*
|
|
1686
|
+
* Counted once and then settled. Marking the (device, template) key
|
|
1687
|
+
* attempted is what keeps a host carried by two overlapping scans in the
|
|
1688
|
+
* same run from being counted as two missing monitors — the same
|
|
1689
|
+
* bookkeeping a real attempt does, for the same reason.
|
|
1690
|
+
*/
|
|
1691
|
+
data.existingMonitors.attemptedProvisioningKeys.add(
|
|
1692
|
+
NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(
|
|
1693
|
+
networkDeviceId,
|
|
1694
|
+
templateId,
|
|
1695
|
+
),
|
|
1696
|
+
);
|
|
1697
|
+
data.result.monitorsFailed++;
|
|
1698
|
+
data.result.monitorProvisioningHalted = true;
|
|
1699
|
+
}
|
|
1700
|
+
|
|
1701
|
+
if (resolvableTemplateIds.length === 0) {
|
|
1702
|
+
return [];
|
|
1367
1703
|
}
|
|
1368
1704
|
|
|
1369
1705
|
/*
|
|
1370
1706
|
* Do not run the unindexed JSON race-check after this run's monitor-work
|
|
1371
1707
|
* budget is already exhausted. The device remains unreconciled and the
|
|
1372
|
-
* truncated marker protocol brings it back on the next bounded pass
|
|
1708
|
+
* truncated marker protocol brings it back on the next bounded pass —
|
|
1709
|
+
* counted, so the operator is told how many devices are still waiting
|
|
1710
|
+
* rather than left to infer it from a total that stopped early.
|
|
1373
1711
|
*/
|
|
1374
1712
|
if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
|
|
1375
|
-
return
|
|
1713
|
+
return resolvableTemplateIds;
|
|
1376
1714
|
}
|
|
1377
1715
|
|
|
1378
1716
|
if (!data.isDryRun) {
|
|
@@ -1388,43 +1726,74 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1388
1726
|
networkDeviceIdString,
|
|
1389
1727
|
)
|
|
1390
1728
|
) {
|
|
1391
|
-
data.result.monitorsSkippedAlreadyExisting +=
|
|
1392
|
-
|
|
1729
|
+
data.result.monitorsSkippedAlreadyExisting +=
|
|
1730
|
+
resolvableTemplateIds.length;
|
|
1731
|
+
return [];
|
|
1393
1732
|
}
|
|
1394
1733
|
|
|
1395
|
-
for (
|
|
1734
|
+
for (let index: number = 0; index < resolvableTemplateIds.length; index++) {
|
|
1735
|
+
const templateId: string = resolvableTemplateIds[index]!;
|
|
1396
1736
|
const key: string =
|
|
1397
1737
|
NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(
|
|
1398
1738
|
networkDeviceId,
|
|
1399
1739
|
templateId,
|
|
1400
1740
|
);
|
|
1401
1741
|
|
|
1742
|
+
/*
|
|
1743
|
+
* A create earlier in THIS device's loop can be the one that trips the
|
|
1744
|
+
* systemic verdict. The rest of its templates are then in exactly the
|
|
1745
|
+
* position of every device after it.
|
|
1746
|
+
*/
|
|
1747
|
+
if (data.existingMonitors.isProvisioningHalted) {
|
|
1748
|
+
data.existingMonitors.attemptedProvisioningKeys.add(key);
|
|
1749
|
+
data.result.monitorsFailed++;
|
|
1750
|
+
data.result.monitorProvisioningHalted = true;
|
|
1751
|
+
continue;
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1402
1754
|
/* The race-check may have found this key after the initial snapshot. */
|
|
1403
1755
|
if (data.existingMonitors.autoProvisionedKeys.has(key)) {
|
|
1404
1756
|
data.result.monitorsSkippedAlreadyExisting++;
|
|
1405
1757
|
continue;
|
|
1406
1758
|
}
|
|
1407
1759
|
|
|
1760
|
+
/*
|
|
1761
|
+
* Budget spent mid-device. Everything from here on is untouched, so
|
|
1762
|
+
* that is exactly what is left pending for this device.
|
|
1763
|
+
*/
|
|
1408
1764
|
if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
|
|
1409
|
-
return
|
|
1765
|
+
return resolvableTemplateIds.slice(index);
|
|
1410
1766
|
}
|
|
1411
1767
|
|
|
1412
1768
|
data.attempts.monitorCount++;
|
|
1413
1769
|
data.existingMonitors.attemptedProvisioningKeys.add(key);
|
|
1414
1770
|
|
|
1415
1771
|
/*
|
|
1416
|
-
*
|
|
1417
|
-
*
|
|
1418
|
-
*
|
|
1419
|
-
*
|
|
1772
|
+
* A template the run could not load is a fault in the RULE, not in this
|
|
1773
|
+
* host: the rule points at a template that has been deleted, moved to
|
|
1774
|
+
* another project, or changed to a different monitor type since the rule
|
|
1775
|
+
* was saved (the rule form validates all three, but only at save time).
|
|
1776
|
+
* It will be just as unloadable for every other device, so the verdict is
|
|
1777
|
+
* recorded once and every later host short-circuits above — instead of
|
|
1778
|
+
* spending the run's whole monitor budget re-proving it, which is what
|
|
1779
|
+
* turned this into "500 monitors failed, stopped at the run cap, run
|
|
1780
|
+
* again to continue" in issue #3643.
|
|
1420
1781
|
*/
|
|
1421
1782
|
const template: MonitorTemplate | undefined =
|
|
1422
1783
|
data.monitorTemplates.get(templateId);
|
|
1423
1784
|
|
|
1424
1785
|
if (!template) {
|
|
1786
|
+
data.existingMonitors.unresolvableTemplateIds.add(templateId);
|
|
1425
1787
|
data.result.monitorsFailed++;
|
|
1788
|
+
data.result.monitorProvisioningHalted = true;
|
|
1789
|
+
this.recordFailureReason(
|
|
1790
|
+
data.result.monitorFailureReasons,
|
|
1791
|
+
new Error(
|
|
1792
|
+
"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.",
|
|
1793
|
+
),
|
|
1794
|
+
);
|
|
1426
1795
|
logger.error(
|
|
1427
|
-
`Auto-import: Network Device monitor template ${templateId} is missing, deleted, or not valid for project ${data.projectId.toString()}.`,
|
|
1796
|
+
`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.`,
|
|
1428
1797
|
{ projectId: data.projectId.toString() } as LogAttributes,
|
|
1429
1798
|
);
|
|
1430
1799
|
continue;
|
|
@@ -1452,6 +1821,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1452
1821
|
|
|
1453
1822
|
data.existingMonitors.autoProvisionedKeys.add(key);
|
|
1454
1823
|
data.result.monitorsCreated++;
|
|
1824
|
+
this.recordMonitorCreateSuccess(data.existingMonitors);
|
|
1455
1825
|
} catch (error) {
|
|
1456
1826
|
/*
|
|
1457
1827
|
* The partial unique index is the final race backstop. If another
|
|
@@ -1483,19 +1853,87 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1483
1853
|
|
|
1484
1854
|
if (data.existingMonitors.autoProvisionedKeys.has(key)) {
|
|
1485
1855
|
data.result.monitorsSkippedAlreadyExisting++;
|
|
1856
|
+
/*
|
|
1857
|
+
* Losing this race proves the create pipeline works — somebody
|
|
1858
|
+
* else just used it — so it is not evidence of a systemic fault.
|
|
1859
|
+
*/
|
|
1860
|
+
this.recordMonitorCreateSuccess(data.existingMonitors);
|
|
1486
1861
|
continue;
|
|
1487
1862
|
}
|
|
1488
1863
|
}
|
|
1489
1864
|
|
|
1490
1865
|
data.result.monitorsFailed++;
|
|
1866
|
+
this.recordFailureReason(data.result.monitorFailureReasons, error);
|
|
1491
1867
|
logger.error(
|
|
1492
1868
|
`Auto-import: could not create monitor from template ${templateId} for Network Device ${networkDeviceId.toString()} (${data.host.ipAddress}): ${error}`,
|
|
1493
1869
|
{ projectId: data.projectId.toString() } as LogAttributes,
|
|
1494
1870
|
);
|
|
1871
|
+
this.recordMonitorCreateFailure({
|
|
1872
|
+
state: data.existingMonitors,
|
|
1873
|
+
result: data.result,
|
|
1874
|
+
projectId: data.projectId,
|
|
1875
|
+
error: error,
|
|
1876
|
+
});
|
|
1495
1877
|
}
|
|
1496
1878
|
}
|
|
1497
1879
|
|
|
1498
|
-
return
|
|
1880
|
+
return [];
|
|
1881
|
+
}
|
|
1882
|
+
|
|
1883
|
+
/*
|
|
1884
|
+
* A create succeeded (or lost a race to another writer, which proves the
|
|
1885
|
+
* same thing): whatever the last failures were, they were not systemic, and
|
|
1886
|
+
* this run has now seen the create pipeline work at least once.
|
|
1887
|
+
*/
|
|
1888
|
+
private recordMonitorCreateSuccess(
|
|
1889
|
+
state: ExistingMonitorProvisioningState,
|
|
1890
|
+
): void {
|
|
1891
|
+
state.consecutiveCreateFailures = 0;
|
|
1892
|
+
state.lastCreateFailureReason = "";
|
|
1893
|
+
state.hasProvisionedAnyMonitor = true;
|
|
1894
|
+
}
|
|
1895
|
+
|
|
1896
|
+
/*
|
|
1897
|
+
* Decide whether one monitor create failure is this host's problem or the
|
|
1898
|
+
* whole run's. The bar is deliberately high, because giving up early on a
|
|
1899
|
+
* per-host fault would silently cost an estate its monitors — the failure
|
|
1900
|
+
* this fix exists to make visible. All three must hold: the run has never
|
|
1901
|
+
* created a monitor, the last MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES
|
|
1902
|
+
* attempts all failed, and they all failed with the SAME message.
|
|
1903
|
+
*/
|
|
1904
|
+
private recordMonitorCreateFailure(data: {
|
|
1905
|
+
state: ExistingMonitorProvisioningState;
|
|
1906
|
+
result: AutoImportRuleRunResult;
|
|
1907
|
+
projectId: ObjectID;
|
|
1908
|
+
error: unknown;
|
|
1909
|
+
}): void {
|
|
1910
|
+
const reason: string = this.describeError(data.error);
|
|
1911
|
+
|
|
1912
|
+
if (reason && reason === data.state.lastCreateFailureReason) {
|
|
1913
|
+
data.state.consecutiveCreateFailures++;
|
|
1914
|
+
} else {
|
|
1915
|
+
data.state.lastCreateFailureReason = reason;
|
|
1916
|
+
data.state.consecutiveCreateFailures = 1;
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
if (data.state.hasProvisionedAnyMonitor) {
|
|
1920
|
+
return;
|
|
1921
|
+
}
|
|
1922
|
+
|
|
1923
|
+
if (
|
|
1924
|
+
data.state.consecutiveCreateFailures <
|
|
1925
|
+
MAX_CONSECUTIVE_MONITOR_CREATE_FAILURES
|
|
1926
|
+
) {
|
|
1927
|
+
return;
|
|
1928
|
+
}
|
|
1929
|
+
|
|
1930
|
+
data.state.isProvisioningHalted = true;
|
|
1931
|
+
data.result.monitorProvisioningHalted = true;
|
|
1932
|
+
|
|
1933
|
+
logger.error(
|
|
1934
|
+
`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.`,
|
|
1935
|
+
{ projectId: data.projectId.toString() } as LogAttributes,
|
|
1936
|
+
);
|
|
1499
1937
|
}
|
|
1500
1938
|
|
|
1501
1939
|
/*
|
|
@@ -1580,6 +2018,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
|
|
|
1580
2018
|
createdDevice = await attemptCreate(buildFallbackDeviceName(data.host));
|
|
1581
2019
|
} catch (secondError) {
|
|
1582
2020
|
data.result.devicesFailed++;
|
|
2021
|
+
this.recordFailureReason(data.result.deviceFailureReasons, secondError);
|
|
1583
2022
|
logger.error(
|
|
1584
2023
|
`Auto-import: could not create a device for ${data.host.ipAddress} (scan ${data.scan.id?.toString()}): ${firstError} / retry: ${secondError}`,
|
|
1585
2024
|
{ projectId: data.projectId.toString() } as LogAttributes,
|