@oneuptime/common 13.0.0 → 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/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/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/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 +12 -0
- 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/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/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 +91 -29
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +132 -1
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +176 -2
- 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/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/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 +143 -0
- package/Server/Utils/DataSource/EgressGuard.ts +160 -15
- package/Server/Utils/Database/TruncateColumnValue.ts +1 -1
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +2 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +33 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +44 -0
- package/Server/Utils/LogRedaction.ts +2 -1
- package/Server/Utils/Monitor/MonitorAlert.ts +1 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +302 -3
- 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/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 +5 -0
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +2 -1
- package/Server/Utils/Telemetry/TelemetryEntity.ts +181 -1
- 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/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/DashboardLazyPages.test.tsx +458 -0
- package/Tests/App/Dashboard/DashboardToolbarPopupLayering.test.tsx +566 -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/GoogleSecOpsConnectionsErrors.test.tsx +244 -0
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +724 -0
- package/Tests/App/Dashboard/MonitorTemplateSyncFields.test.tsx +539 -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/TwoFactorStatus.test.tsx +260 -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/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/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 +29 -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/Infrastructure/Postgres/UserNotificationEmailRollupMetadataMigration.test.ts +85 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +34 -3
- package/Tests/Server/Middleware/PasskeyRateLimit.test.ts +141 -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/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/InventoryItemPromotionGate.test.ts +5 -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/MonitorTemplateServiceFieldSync.test.ts +994 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +22 -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/Permissions/ProjectCustomerSupportAccessColumn.test.ts +261 -0
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +95 -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/Dashboard/PublicDashboardResourceListPolicy.test.ts +345 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +896 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +246 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +299 -1
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +6 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +185 -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/TelemetryStepMetricAlias.test.ts +10 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +66 -1
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +362 -0
- 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/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/TelemetryEntity.test.ts +580 -0
- package/Tests/Server/Utils/Telemetry/VMwareSnapshotScan.test.ts +1748 -0
- package/Tests/Types/Cloud/CloudPlatform.test.ts +574 -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/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/UI/ColorPickerBuild.test.ts +86 -0
- package/Tests/UI/Components/Breadcrumbs.test.tsx +32 -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 +11 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +148 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +29 -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/DashboardVMwareListComponents.test.ts +548 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +17 -3
- package/Tests/Utils/LabelRuleImportExport.test.ts +583 -0
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/MonitorTemplateSyncUtil.test.ts +590 -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/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 +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/Docs/DocsLanguage.ts +1 -0
- package/Types/Exception/EgressGuardException.ts +65 -0
- package/Types/Icon/IconProp.ts +1 -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/VMwareAlertTemplates.ts +1070 -0
- package/Types/Monitor/VMwareMetricCatalog.ts +914 -0
- 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/StatusPage/StatusPageLanguage.ts +1 -0
- package/Types/Telemetry/EntityType.ts +21 -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/Calendar/Calendar.css +78 -0
- package/UI/Components/Calendar/Calendar.tsx +28 -3
- 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 +4 -0
- package/Utils/API.ts +34 -0
- 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/LabelRuleImportExport.ts +496 -0
- package/Utils/Monitor/MonitorTemplateSyncUtil.ts +164 -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/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/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/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 +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.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/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/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 +64 -26
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +124 -1
- 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/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/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/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 +113 -0
- 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 +2 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +18 -0
- 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/MonitorAlert.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +219 -4
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.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/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 +5 -0
- 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 +136 -1
- 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/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 +1 -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/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/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/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/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/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/Calendar/Calendar.js +24 -4
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- 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/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/LabelRuleImportExport.js +356 -0
- package/build/dist/Utils/LabelRuleImportExport.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/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/package.json +1 -1
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The evaluator's import chain pulls the native isolated-vm addon
|
|
3
|
+
* (MonitorCriteriaEvaluator → VMAPI → VMRunner). Nothing under test here
|
|
4
|
+
* touches the sandbox, and the prebuilt binary cannot always dlopen in the
|
|
5
|
+
* test environment — so stub the module out before anything imports it.
|
|
6
|
+
*/
|
|
7
|
+
jest.mock("isolated-vm", () => {
|
|
8
|
+
return {};
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
import MonitorCriteriaEvaluator from "../../../../Server/Utils/Monitor/MonitorCriteriaEvaluator";
|
|
12
|
+
import API from "../../../../Utils/API";
|
|
13
|
+
import EgressGuardException, {
|
|
14
|
+
EgressFailureReason,
|
|
15
|
+
} from "../../../../Types/Exception/EgressGuardException";
|
|
16
|
+
import Monitor from "../../../../Models/DatabaseModels/Monitor";
|
|
17
|
+
import MonitorStep from "../../../../Types/Monitor/MonitorStep";
|
|
18
|
+
import MonitorType from "../../../../Types/Monitor/MonitorType";
|
|
19
|
+
import RequestFailedDetails, {
|
|
20
|
+
RequestFailedPhase,
|
|
21
|
+
} from "../../../../Types/Probe/RequestFailedDetails";
|
|
22
|
+
import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse";
|
|
23
|
+
import DataToProcess from "../../../../Server/Utils/Monitor/DataToProcess";
|
|
24
|
+
import URL from "../../../../Types/API/URL";
|
|
25
|
+
import ObjectID from "../../../../Types/ObjectID";
|
|
26
|
+
import { describe, expect, test } from "@jest/globals";
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* THE ROOT CAUSE A CUSTOMER ACTUALLY READS WHEN A TARGET CANNOT BE RESOLVED.
|
|
30
|
+
*
|
|
31
|
+
* A website monitor for https://order.abbeysbakehouse.com/ raised an incident
|
|
32
|
+
* whose entire root cause was:
|
|
33
|
+
*
|
|
34
|
+
* Response Snapshot -> Response Time: 0.00 ms ; Timed Out: No
|
|
35
|
+
* Request Failed Details ->
|
|
36
|
+
* Failed Phase: Unknown
|
|
37
|
+
* Error Description: Request failed: Monitor target host
|
|
38
|
+
* order.abbeysbakehouse.com could not be reached.
|
|
39
|
+
* Raw Error Message: <the same sentence>
|
|
40
|
+
*
|
|
41
|
+
* One monitor out of ~75 on the same cluster. Nothing in that text told the
|
|
42
|
+
* customer what to check, there was no Error Code line at all, and "Unknown"
|
|
43
|
+
* actively suggested a product bug rather than a resolver hiccup.
|
|
44
|
+
*
|
|
45
|
+
* The cause was a classification gap, not a rendering one: the egress guard
|
|
46
|
+
* deliberately sanitizes its message down to one sentence (a shared cloud probe
|
|
47
|
+
* must not let a tenant tell "did not resolve" from "resolved but blocked", or
|
|
48
|
+
* they can enumerate internal DNS names), and that sanitized sentence matched
|
|
49
|
+
* none of API.getRequestFailedDetails' string patterns, so it fell through to
|
|
50
|
+
* the Unknown default with errorCode undefined.
|
|
51
|
+
*
|
|
52
|
+
* This suite pins the surface the customer read: it drives the REAL classifier
|
|
53
|
+
* with a REAL EgressGuardException and asserts what MonitorCriteriaEvaluator
|
|
54
|
+
* renders from it, so the fix cannot be undone at either end. It also pins the
|
|
55
|
+
* new "- Attempts:" line, which is the other half of reading such a failure —
|
|
56
|
+
* "tried once" and "tried three times" mean very different things — and a
|
|
57
|
+
* plain HTTP 500 control case so the new branch is not shadowing the old ones.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
type EvaluatorPrivate = {
|
|
61
|
+
buildRootCauseContext: (input: {
|
|
62
|
+
dataToProcess: DataToProcess;
|
|
63
|
+
monitorStep: MonitorStep;
|
|
64
|
+
monitor: Monitor;
|
|
65
|
+
}) => Promise<string | null>;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const Evaluator: EvaluatorPrivate =
|
|
69
|
+
MonitorCriteriaEvaluator as unknown as EvaluatorPrivate;
|
|
70
|
+
|
|
71
|
+
const CUSTOMER_URL: string = "https://order.abbeysbakehouse.com/";
|
|
72
|
+
|
|
73
|
+
/*
|
|
74
|
+
* Byte-for-byte the sentence the guard throws for this customer's host when
|
|
75
|
+
* detail is suppressed — DNS failure and address-policy rejection produce the
|
|
76
|
+
* SAME sentence on purpose. Tests build the exception from it rather than
|
|
77
|
+
* hand-writing requestFailedDetails, so the classifier is exercised too.
|
|
78
|
+
*/
|
|
79
|
+
const SANITIZED_GUARD_MESSAGE: string =
|
|
80
|
+
"Monitor target host order.abbeysbakehouse.com could not be reached.";
|
|
81
|
+
|
|
82
|
+
/*
|
|
83
|
+
* The description is a constant in API.getRequestFailedDetails rather than an
|
|
84
|
+
* exported symbol, so read it back through the classifier instead of copying
|
|
85
|
+
* a paragraph that would silently drift out of date.
|
|
86
|
+
*/
|
|
87
|
+
const UNREACHABLE_DETAILS: RequestFailedDetails = API.getRequestFailedDetails(
|
|
88
|
+
new EgressGuardException(
|
|
89
|
+
SANITIZED_GUARD_MESSAGE,
|
|
90
|
+
EgressFailureReason.Unreachable,
|
|
91
|
+
),
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
function makeMonitor(): Monitor {
|
|
95
|
+
const monitor: Monitor = new Monitor();
|
|
96
|
+
monitor.monitorType = MonitorType.Website;
|
|
97
|
+
return monitor;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function makeMonitorStep(): MonitorStep {
|
|
101
|
+
const monitorStep: MonitorStep = new MonitorStep();
|
|
102
|
+
monitorStep.setMonitorDestination(URL.fromString(CUSTOMER_URL));
|
|
103
|
+
return monitorStep;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function makeProbeResponse(
|
|
107
|
+
overrides: Partial<ProbeMonitorResponse> = {},
|
|
108
|
+
): ProbeMonitorResponse {
|
|
109
|
+
return {
|
|
110
|
+
projectId: ObjectID.generate(),
|
|
111
|
+
monitorId: ObjectID.generate(),
|
|
112
|
+
monitorStepId: ObjectID.generate(),
|
|
113
|
+
probeId: ObjectID.generate(),
|
|
114
|
+
failureCause: "",
|
|
115
|
+
monitoredAt: new Date("2026-09-10T09:15:00.000Z"),
|
|
116
|
+
isOnline: false,
|
|
117
|
+
responseTimeInMs: 0,
|
|
118
|
+
isTimeout: false,
|
|
119
|
+
...overrides,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async function renderRootCause(
|
|
124
|
+
probeResponse: ProbeMonitorResponse,
|
|
125
|
+
): Promise<string> {
|
|
126
|
+
const context: string | null = await Evaluator.buildRootCauseContext({
|
|
127
|
+
dataToProcess: probeResponse,
|
|
128
|
+
monitorStep: makeMonitorStep(),
|
|
129
|
+
monitor: makeMonitor(),
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
expect(context).not.toBeNull();
|
|
133
|
+
return context as string;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/*
|
|
137
|
+
* The rendered block is a flat list of "**Section**" headings, so pull one
|
|
138
|
+
* section's body out by slicing between its heading and the next one. Used to
|
|
139
|
+
* prove WHERE a line lands, not just that it exists somewhere.
|
|
140
|
+
*/
|
|
141
|
+
function section(context: string, heading: string): string {
|
|
142
|
+
const marker: string = `**${heading}**`;
|
|
143
|
+
const start: number = context.indexOf(marker);
|
|
144
|
+
|
|
145
|
+
expect(start).toBeGreaterThanOrEqual(0);
|
|
146
|
+
|
|
147
|
+
const afterHeading: string = context.substring(start + marker.length);
|
|
148
|
+
const nextHeading: number = afterHeading.indexOf("**");
|
|
149
|
+
|
|
150
|
+
return nextHeading === -1
|
|
151
|
+
? afterHeading
|
|
152
|
+
: afterHeading.substring(0, nextHeading);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** The failing probe response exactly as the customer's incident recorded it. */
|
|
156
|
+
function customerFailureResponse(): ProbeMonitorResponse {
|
|
157
|
+
return makeProbeResponse({
|
|
158
|
+
totalAttempts: 1,
|
|
159
|
+
requestFailedDetails: {
|
|
160
|
+
failedPhase: RequestFailedPhase.TargetResolution,
|
|
161
|
+
errorCode: "TARGET_UNREACHABLE",
|
|
162
|
+
errorDescription: UNREACHABLE_DETAILS.errorDescription,
|
|
163
|
+
rawErrorMessage: SANITIZED_GUARD_MESSAGE,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
describe("Root cause for a target the probe could not resolve", () => {
|
|
169
|
+
test("classifier turns the sanitized guard sentence into a Target Resolution failure", () => {
|
|
170
|
+
/*
|
|
171
|
+
* Guards the input to every assertion below. Against the old code this
|
|
172
|
+
* failed on the very first expect: the sentence matched no pattern, so the
|
|
173
|
+
* phase was Unknown and errorCode was undefined.
|
|
174
|
+
*/
|
|
175
|
+
expect(UNREACHABLE_DETAILS.failedPhase).toBe(
|
|
176
|
+
RequestFailedPhase.TargetResolution,
|
|
177
|
+
);
|
|
178
|
+
expect(UNREACHABLE_DETAILS.errorCode).toBe("TARGET_UNREACHABLE");
|
|
179
|
+
expect(UNREACHABLE_DETAILS.errorDescription).not.toBe(
|
|
180
|
+
SANITIZED_GUARD_MESSAGE,
|
|
181
|
+
);
|
|
182
|
+
expect(UNREACHABLE_DETAILS.rawErrorMessage).toBe(SANITIZED_GUARD_MESSAGE);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
test("renders the failed phase as Target Resolution, never Unknown", async () => {
|
|
186
|
+
const context: string = await renderRootCause(customerFailureResponse());
|
|
187
|
+
|
|
188
|
+
expect(context).toContain("- Failed Phase: Target Resolution");
|
|
189
|
+
expect(context).not.toContain("- Failed Phase: Unknown");
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
test("renders an Error Code line, which the customer's incident lacked entirely", async () => {
|
|
193
|
+
const context: string = await renderRootCause(customerFailureResponse());
|
|
194
|
+
|
|
195
|
+
/*
|
|
196
|
+
* The renderer only emits this line when errorCode is truthy. The old
|
|
197
|
+
* classifier left it undefined, so the incident had no Error Code line at
|
|
198
|
+
* all — the assertion below is precisely the regression.
|
|
199
|
+
*/
|
|
200
|
+
expect(context).toContain("- Error Code: TARGET_UNREACHABLE");
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
test("renders an actionable error description instead of echoing the raw sentence", async () => {
|
|
204
|
+
const context: string = await renderRootCause(customerFailureResponse());
|
|
205
|
+
|
|
206
|
+
expect(context).toContain(
|
|
207
|
+
`- Error Description: ${UNREACHABLE_DETAILS.errorDescription}`,
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
// The old text was literally "Request failed: " + the raw sentence.
|
|
211
|
+
expect(context).not.toContain(
|
|
212
|
+
`- Error Description: Request failed: ${SANITIZED_GUARD_MESSAGE}`,
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
/*
|
|
216
|
+
* Pin the actionable content, not just its identity with the constant:
|
|
217
|
+
* the description has to name what to check and how an internal host is
|
|
218
|
+
* meant to be monitored, or the incident is no more useful than before.
|
|
219
|
+
*/
|
|
220
|
+
const description: string = UNREACHABLE_DETAILS.errorDescription;
|
|
221
|
+
expect(description).toContain("DNS");
|
|
222
|
+
expect(description).toContain("nameservers");
|
|
223
|
+
expect(description).toContain("PROBE_ALLOW_PRIVATE_NETWORK_MONITORS=true");
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
test("still shows the raw guard message for debugging", async () => {
|
|
227
|
+
const context: string = await renderRootCause(customerFailureResponse());
|
|
228
|
+
|
|
229
|
+
expect(context).toContain(
|
|
230
|
+
"- Raw Error Message: Monitor target host order.abbeysbakehouse.com could not be reached.",
|
|
231
|
+
);
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
test("keeps the rest of the customer's snapshot intact", async () => {
|
|
235
|
+
const context: string = await renderRootCause(customerFailureResponse());
|
|
236
|
+
|
|
237
|
+
expect(context).toContain(`- Destination: ${CUSTOMER_URL}`);
|
|
238
|
+
expect(context).toContain("- Response Time: 0.00 ms");
|
|
239
|
+
expect(context).toContain("- Timed Out: No");
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
test("does not disclose which failure the guard actually hit", async () => {
|
|
243
|
+
/*
|
|
244
|
+
* The sanitization is a security property, not an accident: a tenant on a
|
|
245
|
+
* shared cloud probe who can tell "did not resolve" from "resolved to an
|
|
246
|
+
* address I am not allowed to dial" can enumerate internal DNS names. The
|
|
247
|
+
* richer classification must not leak that distinction back out.
|
|
248
|
+
*/
|
|
249
|
+
const context: string = await renderRootCause(customerFailureResponse());
|
|
250
|
+
|
|
251
|
+
expect(context).not.toContain("ResolutionFailed");
|
|
252
|
+
expect(context).not.toContain("AddressBlocked");
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
test("every unreachable reason renders the same code and description", async () => {
|
|
256
|
+
/*
|
|
257
|
+
* A self-hosted probe is allowed detail, so the guard hands the classifier
|
|
258
|
+
* the specific ResolutionFailed / AddressBlocked reasons there. The
|
|
259
|
+
* TENANT-facing text must still collapse them: differing codes or wording
|
|
260
|
+
* would reopen the oracle one layer below the guard's sanitized message.
|
|
261
|
+
*/
|
|
262
|
+
const rendered: Array<string> = [];
|
|
263
|
+
|
|
264
|
+
for (const reason of [
|
|
265
|
+
EgressFailureReason.Unreachable,
|
|
266
|
+
EgressFailureReason.ResolutionFailed,
|
|
267
|
+
EgressFailureReason.AddressBlocked,
|
|
268
|
+
]) {
|
|
269
|
+
const details: RequestFailedDetails = API.getRequestFailedDetails(
|
|
270
|
+
new EgressGuardException(SANITIZED_GUARD_MESSAGE, reason),
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
expect(details.errorCode).toBe("TARGET_UNREACHABLE");
|
|
274
|
+
expect(details.errorDescription).toBe(
|
|
275
|
+
UNREACHABLE_DETAILS.errorDescription,
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
rendered.push(
|
|
279
|
+
await renderRootCause(
|
|
280
|
+
makeProbeResponse({
|
|
281
|
+
totalAttempts: 1,
|
|
282
|
+
requestFailedDetails: details,
|
|
283
|
+
}),
|
|
284
|
+
),
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
expect(rendered[1]).toBe(rendered[0]);
|
|
289
|
+
expect(rendered[2]).toBe(rendered[0]);
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
test("an invalid target is NOT collapsed into the unreachable text", async () => {
|
|
293
|
+
/*
|
|
294
|
+
* InvalidTarget is the tenant's own configuration echoed back — it reveals
|
|
295
|
+
* nothing about the probe's network — so it has to surface as its own
|
|
296
|
+
* code, or a typo'd monitor URL reads as a DNS outage.
|
|
297
|
+
*/
|
|
298
|
+
const details: RequestFailedDetails = API.getRequestFailedDetails(
|
|
299
|
+
new EgressGuardException(
|
|
300
|
+
"Monitor destination must be a valid HTTP or HTTPS URL.",
|
|
301
|
+
EgressFailureReason.InvalidTarget,
|
|
302
|
+
),
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
expect(details.failedPhase).toBe(RequestFailedPhase.TargetResolution);
|
|
306
|
+
expect(details.errorCode).toBe("INVALID_TARGET");
|
|
307
|
+
expect(details.errorDescription).not.toBe(
|
|
308
|
+
UNREACHABLE_DETAILS.errorDescription,
|
|
309
|
+
);
|
|
310
|
+
|
|
311
|
+
const context: string = await renderRootCause(
|
|
312
|
+
makeProbeResponse({ requestFailedDetails: details }),
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
expect(context).toContain("- Error Code: INVALID_TARGET");
|
|
316
|
+
expect(context).not.toContain("TARGET_UNREACHABLE");
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
describe("Root cause Attempts line", () => {
|
|
321
|
+
test("renders '- Attempts: 1' for a single attempt", async () => {
|
|
322
|
+
const context: string = await renderRootCause(
|
|
323
|
+
makeProbeResponse({ totalAttempts: 1 }),
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
expect(context).toContain("- Attempts: 1");
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
test("renders '- Attempts: 3' when the probe retried", async () => {
|
|
330
|
+
const context: string = await renderRootCause(
|
|
331
|
+
makeProbeResponse({ totalAttempts: 3 }),
|
|
332
|
+
);
|
|
333
|
+
|
|
334
|
+
expect(context).toContain("- Attempts: 3");
|
|
335
|
+
expect(context).not.toContain("- Attempts: 1");
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
test("renders no Attempts line at all when the count is unknown", async () => {
|
|
339
|
+
const context: string = await renderRootCause(
|
|
340
|
+
makeProbeResponse({ totalAttempts: undefined }),
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
/*
|
|
344
|
+
* Absent, not "- Attempts: undefined" and not "- Attempts: 0" — an
|
|
345
|
+
* unreported count must not be rendered as a real one.
|
|
346
|
+
*/
|
|
347
|
+
expect(context).not.toContain("- Attempts:");
|
|
348
|
+
expect(new RegExp("^- Attempts:", "m").test(context)).toBe(false);
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
describe("Root cause section placement", () => {
|
|
353
|
+
test("Attempts belongs to the Response Snapshot, after Timed Out", async () => {
|
|
354
|
+
const context: string = await renderRootCause(customerFailureResponse());
|
|
355
|
+
|
|
356
|
+
const snapshot: string = section(context, "Response Snapshot");
|
|
357
|
+
const failure: string = section(context, "Request Failed Details");
|
|
358
|
+
|
|
359
|
+
expect(snapshot).toContain("- Attempts: 1");
|
|
360
|
+
expect(failure).not.toContain("- Attempts:");
|
|
361
|
+
|
|
362
|
+
/*
|
|
363
|
+
* How long the check took and whether it timed out describe one attempt;
|
|
364
|
+
* the count of attempts summarizes them, so it reads last in the section.
|
|
365
|
+
*/
|
|
366
|
+
expect(snapshot.indexOf("- Attempts:")).toBeGreaterThan(
|
|
367
|
+
snapshot.indexOf("- Timed Out:"),
|
|
368
|
+
);
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
test("failure classification stays out of the Response Snapshot", async () => {
|
|
372
|
+
const context: string = await renderRootCause(customerFailureResponse());
|
|
373
|
+
|
|
374
|
+
const snapshot: string = section(context, "Response Snapshot");
|
|
375
|
+
const failure: string = section(context, "Request Failed Details");
|
|
376
|
+
|
|
377
|
+
expect(snapshot).not.toContain("- Failed Phase:");
|
|
378
|
+
expect(snapshot).not.toContain("- Error Code:");
|
|
379
|
+
expect(failure).toContain("- Failed Phase: Target Resolution");
|
|
380
|
+
expect(failure).toContain("- Error Code: TARGET_UNREACHABLE");
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
describe("Root cause for an ordinary HTTP failure (control)", () => {
|
|
385
|
+
/*
|
|
386
|
+
* The Target Resolution branch runs BEFORE all the string matching in the
|
|
387
|
+
* classifier and adds a section-level line to the renderer, so prove the
|
|
388
|
+
* everyday case a customer sees far more often is untouched.
|
|
389
|
+
*/
|
|
390
|
+
test("an HTTP 500 still renders its own phase, code, description and snapshot", async () => {
|
|
391
|
+
const context: string = await renderRootCause(
|
|
392
|
+
makeProbeResponse({
|
|
393
|
+
responseCode: 500,
|
|
394
|
+
responseTimeInMs: 1234,
|
|
395
|
+
totalAttempts: 2,
|
|
396
|
+
requestFailedDetails: {
|
|
397
|
+
failedPhase: RequestFailedPhase.ServerResponse,
|
|
398
|
+
errorCode: "HTTP_500",
|
|
399
|
+
errorDescription:
|
|
400
|
+
"The server responded with HTTP 500 Internal Server Error. This indicates a server-side error.",
|
|
401
|
+
rawErrorMessage: "Request failed with status code 500",
|
|
402
|
+
},
|
|
403
|
+
}),
|
|
404
|
+
);
|
|
405
|
+
|
|
406
|
+
expect(context).toContain("- Response Status Code: 500");
|
|
407
|
+
expect(context).toContain("- Response Time: 1234 ms");
|
|
408
|
+
expect(context).toContain("- Timed Out: No");
|
|
409
|
+
expect(context).toContain("- Attempts: 2");
|
|
410
|
+
expect(context).toContain("- Failed Phase: Server Response");
|
|
411
|
+
expect(context).toContain("- Error Code: HTTP_500");
|
|
412
|
+
expect(context).toContain(
|
|
413
|
+
"- Error Description: The server responded with HTTP 500 Internal Server Error. This indicates a server-side error.",
|
|
414
|
+
);
|
|
415
|
+
expect(context).toContain(
|
|
416
|
+
"- Raw Error Message: Request failed with status code 500",
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
// The new branch must not have swallowed the old classification.
|
|
420
|
+
expect(context).not.toContain("- Failed Phase: Target Resolution");
|
|
421
|
+
expect(context).not.toContain("TARGET_UNREACHABLE");
|
|
422
|
+
});
|
|
423
|
+
});
|
|
@@ -236,6 +236,12 @@ describe("MonitorStepResourceIdentity — declared infra identifiers", () => {
|
|
|
236
236
|
"clusterIdentifier",
|
|
237
237
|
"proxmoxClusterNames",
|
|
238
238
|
],
|
|
239
|
+
[
|
|
240
|
+
MonitorType.VMware,
|
|
241
|
+
"vmwareMonitor",
|
|
242
|
+
"vcenterIdentifier",
|
|
243
|
+
"vmwareVCenterNames",
|
|
244
|
+
],
|
|
239
245
|
[MonitorType.Ceph, "cephMonitor", "clusterIdentifier", "cephClusterNames"],
|
|
240
246
|
[
|
|
241
247
|
MonitorType.DockerSwarm,
|
|
@@ -140,6 +140,7 @@ describe("The monitor summary is stored on the incident / alert it created", ()
|
|
|
140
140
|
kubernetesClusterIds: [],
|
|
141
141
|
serviceIds: [],
|
|
142
142
|
proxmoxClusterIds: [],
|
|
143
|
+
vmwareVCenterIds: [],
|
|
143
144
|
cephClusterIds: [],
|
|
144
145
|
dockerSwarmClusterIds: [],
|
|
145
146
|
iotFleetIds: [],
|
|
@@ -30,6 +30,7 @@ import KubernetesClusterService from "../../../../Server/Services/KubernetesClus
|
|
|
30
30
|
import PodmanHostService from "../../../../Server/Services/PodmanHostService";
|
|
31
31
|
import ProxmoxClusterService from "../../../../Server/Services/ProxmoxClusterService";
|
|
32
32
|
import ServiceService from "../../../../Server/Services/ServiceService";
|
|
33
|
+
import VMwareVCenterService from "../../../../Server/Services/VMwareVCenterService";
|
|
33
34
|
import SeriesResourceLinker, {
|
|
34
35
|
SeriesLinkableModel,
|
|
35
36
|
SeriesResolvedResourceIds,
|
|
@@ -102,6 +103,11 @@ const RESOURCE_SERVICES: Array<ResourceServiceUnderTest> = [
|
|
|
102
103
|
service: ProxmoxClusterService,
|
|
103
104
|
nameColumn: "name",
|
|
104
105
|
},
|
|
106
|
+
{
|
|
107
|
+
relation: "vmwareVCenters",
|
|
108
|
+
service: VMwareVCenterService,
|
|
109
|
+
nameColumn: "name",
|
|
110
|
+
},
|
|
105
111
|
{ relation: "cephClusters", service: CephClusterService, nameColumn: "name" },
|
|
106
112
|
{
|
|
107
113
|
relation: "dockerSwarmClusters",
|
|
@@ -185,6 +191,7 @@ function emptyResourceContext(): SeriesResolvedResourceIds {
|
|
|
185
191
|
kubernetesClusterIds: [],
|
|
186
192
|
serviceIds: [],
|
|
187
193
|
proxmoxClusterIds: [],
|
|
194
|
+
vmwareVCenterIds: [],
|
|
188
195
|
cephClusterIds: [],
|
|
189
196
|
dockerSwarmClusterIds: [],
|
|
190
197
|
iotFleetIds: [],
|
|
@@ -336,6 +343,8 @@ describe("SeriesResourceLinker.linkSeriesResourcesToModel", () => {
|
|
|
336
343
|
["services", "service.name", "name"],
|
|
337
344
|
["services", "oneuptime.service.name", "name"],
|
|
338
345
|
["proxmoxClusters", "proxmox.cluster.name", "name"],
|
|
346
|
+
["vmwareVCenters", "vmware.vcenter.name", "name"],
|
|
347
|
+
["vmwareVCenters", "resource.vmware.vcenter.name", "name"],
|
|
339
348
|
["cephClusters", "ceph.cluster.name", "name"],
|
|
340
349
|
["dockerSwarmClusters", "docker.swarm.cluster.name", "name"],
|
|
341
350
|
["iotFleets", "iot.fleet.name", "name"],
|
|
@@ -522,6 +531,7 @@ describe("SeriesResourceLinker.linkSeriesResourcesToModel", () => {
|
|
|
522
531
|
"k8s.cluster.name": "k8s-1",
|
|
523
532
|
"service.name": "svc-1",
|
|
524
533
|
"proxmox.cluster.name": "pve-1",
|
|
534
|
+
"vmware.vcenter.name": "vcsa-1",
|
|
525
535
|
"ceph.cluster.name": "ceph-1",
|
|
526
536
|
"docker.swarm.cluster.name": "swarm-1",
|
|
527
537
|
"iot.fleet.name": "fleet-1",
|
|
@@ -541,8 +551,8 @@ describe("SeriesResourceLinker.linkSeriesResourcesToModel", () => {
|
|
|
541
551
|
}
|
|
542
552
|
}
|
|
543
553
|
|
|
544
|
-
//
|
|
545
|
-
expect(assertedQueries).toBe(
|
|
554
|
+
// 10 types, and hosts get an extra query for the id stamp.
|
|
555
|
+
expect(assertedQueries).toBe(11);
|
|
546
556
|
});
|
|
547
557
|
|
|
548
558
|
test("does not link a resource that belongs to another project", async () => {
|
|
@@ -664,6 +674,7 @@ describe("SeriesResourceLinker.resolveResourcesFromSeriesLabels", () => {
|
|
|
664
674
|
expect(resolved.podmanHostIds).toEqual([]);
|
|
665
675
|
expect(resolved.kubernetesClusterIds).toEqual([]);
|
|
666
676
|
expect(resolved.proxmoxClusterIds).toEqual([]);
|
|
677
|
+
expect(resolved.vmwareVCenterIds).toEqual([]);
|
|
667
678
|
expect(resolved.cephClusterIds).toEqual([]);
|
|
668
679
|
expect(resolved.dockerSwarmClusterIds).toEqual([]);
|
|
669
680
|
});
|
|
@@ -678,6 +689,7 @@ describe("SeriesResourceLinker.attachResolvedResources", () => {
|
|
|
678
689
|
resolved: {
|
|
679
690
|
...emptyResourceContext(),
|
|
680
691
|
proxmoxClusterIds: ["pve-1"],
|
|
692
|
+
vmwareVCenterIds: ["vcsa-1"],
|
|
681
693
|
cephClusterIds: ["ceph-1"],
|
|
682
694
|
dockerSwarmClusterIds: ["swarm-1"],
|
|
683
695
|
iotFleetIds: ["fleet-1"],
|
|
@@ -685,6 +697,7 @@ describe("SeriesResourceLinker.attachResolvedResources", () => {
|
|
|
685
697
|
});
|
|
686
698
|
|
|
687
699
|
expect(idsOn(alert, "proxmoxClusters")).toEqual(["pve-1"]);
|
|
700
|
+
expect(idsOn(alert, "vmwareVCenters")).toEqual(["vcsa-1"]);
|
|
688
701
|
expect(idsOn(alert, "cephClusters")).toEqual(["ceph-1"]);
|
|
689
702
|
expect(idsOn(alert, "dockerSwarmClusters")).toEqual(["swarm-1"]);
|
|
690
703
|
expect(idsOn(alert, "iotFleets")).toEqual(["fleet-1"]);
|
|
@@ -721,6 +734,36 @@ describe("SeriesResourceLinker.attachResolvedResources", () => {
|
|
|
721
734
|
]);
|
|
722
735
|
});
|
|
723
736
|
|
|
737
|
+
test("merges a vCenter from the label path with the step-config one", async () => {
|
|
738
|
+
/*
|
|
739
|
+
* VMware twin of the Proxmox merge: a user-built monitor grouped by
|
|
740
|
+
* `vmware.vcenter.name` names one vCenter through its labels while
|
|
741
|
+
* the step's vcenterIdentifier names another; both must survive.
|
|
742
|
+
*/
|
|
743
|
+
rowsByRelation.set("vmwareVCenters", [{ _id: "vcsa-from-label" }]);
|
|
744
|
+
|
|
745
|
+
const alert: Alert = new Alert();
|
|
746
|
+
|
|
747
|
+
await SeriesResourceLinker.linkSeriesResourcesToModel({
|
|
748
|
+
model: alert,
|
|
749
|
+
seriesLabels: { "resource.vmware.vcenter.name": "vcsa-a" },
|
|
750
|
+
projectId: PROJECT_ID,
|
|
751
|
+
});
|
|
752
|
+
|
|
753
|
+
SeriesResourceLinker.attachResolvedResources({
|
|
754
|
+
model: alert,
|
|
755
|
+
resolved: {
|
|
756
|
+
...emptyResourceContext(),
|
|
757
|
+
vmwareVCenterIds: ["vcsa-from-step-config"],
|
|
758
|
+
},
|
|
759
|
+
});
|
|
760
|
+
|
|
761
|
+
expect(idsOn(alert, "vmwareVCenters")).toEqual([
|
|
762
|
+
"vcsa-from-label",
|
|
763
|
+
"vcsa-from-step-config",
|
|
764
|
+
]);
|
|
765
|
+
});
|
|
766
|
+
|
|
724
767
|
test("dedupes a cluster both paths resolved", async () => {
|
|
725
768
|
rowsByRelation.set("cephClusters", [{ _id: "ceph-1" }]);
|
|
726
769
|
|
|
@@ -752,6 +795,7 @@ describe("SeriesResourceLinker.attachResolvedResources", () => {
|
|
|
752
795
|
});
|
|
753
796
|
|
|
754
797
|
expect(alert.proxmoxClusters).toBeUndefined();
|
|
798
|
+
expect(alert.vmwareVCenters).toBeUndefined();
|
|
755
799
|
expect(alert.cephClusters).toBeUndefined();
|
|
756
800
|
expect(alert.dockerSwarmClusters).toBeUndefined();
|
|
757
801
|
expect(alert.iotFleets).toBeUndefined();
|