@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
|
@@ -113,6 +113,7 @@ import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCom
|
|
|
113
113
|
import PositiveNumber from "../../Types/PositiveNumber";
|
|
114
114
|
import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
|
|
115
115
|
import InMemoryTTLCache from "../Infrastructure/InMemoryTTLCache";
|
|
116
|
+
import { IsNull, UpdateResult } from "typeorm";
|
|
116
117
|
|
|
117
118
|
export interface CurrentPlan {
|
|
118
119
|
plan: PlanType | null;
|
|
@@ -2704,6 +2705,41 @@ These are no longer recorded against the project and have to be cancelled by han
|
|
|
2704
2705
|
}
|
|
2705
2706
|
}
|
|
2706
2707
|
|
|
2708
|
+
/**
|
|
2709
|
+
* Record seat synchronization state only for the subscription that was read.
|
|
2710
|
+
* The normal update path locates rows first and then writes by id, which can
|
|
2711
|
+
* overwrite a replacement subscription's state during a concurrent plan change.
|
|
2712
|
+
*/
|
|
2713
|
+
@CaptureSpan()
|
|
2714
|
+
public async updateSubscriptionSeats(data: {
|
|
2715
|
+
projectId: ObjectID;
|
|
2716
|
+
subscriptionId: string;
|
|
2717
|
+
planId: string;
|
|
2718
|
+
seats: number | null;
|
|
2719
|
+
}): Promise<number> {
|
|
2720
|
+
const result: UpdateResult = await this.getRepository().update(
|
|
2721
|
+
{
|
|
2722
|
+
_id: data.projectId.toString(),
|
|
2723
|
+
paymentProviderSubscriptionId: data.subscriptionId,
|
|
2724
|
+
paymentProviderPlanId: data.planId,
|
|
2725
|
+
deletedAt: IsNull(),
|
|
2726
|
+
},
|
|
2727
|
+
{
|
|
2728
|
+
paymentProviderSubscriptionSeats:
|
|
2729
|
+
data.seats === null
|
|
2730
|
+
? () => {
|
|
2731
|
+
return "NULL";
|
|
2732
|
+
}
|
|
2733
|
+
: data.seats,
|
|
2734
|
+
version: () => {
|
|
2735
|
+
return '"version" + 1';
|
|
2736
|
+
},
|
|
2737
|
+
},
|
|
2738
|
+
);
|
|
2739
|
+
|
|
2740
|
+
return result.affected || 0;
|
|
2741
|
+
}
|
|
2742
|
+
|
|
2707
2743
|
@CaptureSpan()
|
|
2708
2744
|
public async reactiveSubscription(projectId: ObjectID): Promise<void> {
|
|
2709
2745
|
logger.debug("Reactivating subscription for project " + projectId, {
|
|
@@ -2744,7 +2780,15 @@ These are no longer recorded against the project and have to be cancelled by han
|
|
|
2744
2780
|
);
|
|
2745
2781
|
}
|
|
2746
2782
|
|
|
2747
|
-
|
|
2783
|
+
/*
|
|
2784
|
+
* A pending seat synchronization leaves the acknowledged count empty.
|
|
2785
|
+
* Reactivation can still use the memberships already stored in the project.
|
|
2786
|
+
*/
|
|
2787
|
+
const seats: number =
|
|
2788
|
+
project.paymentProviderSubscriptionSeats ??
|
|
2789
|
+
(await TeamMemberService.getUniqueTeamMemberCountInProject(projectId));
|
|
2790
|
+
|
|
2791
|
+
if (!seats) {
|
|
2748
2792
|
throw new BadDataException(
|
|
2749
2793
|
"Payment Provider subscription seats not found",
|
|
2750
2794
|
);
|
|
@@ -2792,7 +2836,7 @@ These are no longer recorded against the project and have to be cancelled by han
|
|
|
2792
2836
|
meteredSubscriptionId: project.paymentProviderMeteredSubscriptionId,
|
|
2793
2837
|
serverMeteredPlans: AllMeteredPlans,
|
|
2794
2838
|
newPlan: subscriptionPlan,
|
|
2795
|
-
quantity:
|
|
2839
|
+
quantity: seats,
|
|
2796
2840
|
isYearly: SubscriptionPlan.isYearlyPlan(project.paymentProviderPlanId),
|
|
2797
2841
|
endTrialAt: endTrialAt,
|
|
2798
2842
|
});
|
|
@@ -2,6 +2,8 @@ import DatabaseService from "./DatabaseService";
|
|
|
2
2
|
import Model from "../../Models/DatabaseModels/ServerlessFunctionInstance";
|
|
3
3
|
import ObjectID from "../../Types/ObjectID";
|
|
4
4
|
import OneUptimeDate from "../../Types/Date";
|
|
5
|
+
import LIMIT_MAX from "../../Types/Database/LimitMax";
|
|
6
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
5
7
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
6
8
|
import logger from "../Utils/Logger";
|
|
7
9
|
|
|
@@ -58,6 +60,75 @@ export class Service extends DatabaseService<Model> {
|
|
|
58
60
|
);
|
|
59
61
|
}
|
|
60
62
|
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Hard-delete every instance of one serverless function whose
|
|
66
|
+
* lastSeenAt is older than olderThan. Returns the number of rows
|
|
67
|
+
* removed.
|
|
68
|
+
*
|
|
69
|
+
* faas.instance identifies a warm execution environment, and FaaS
|
|
70
|
+
* platforms recycle those constantly — every cold start mints a new
|
|
71
|
+
* one and nothing ever reports the old one as retired; it simply
|
|
72
|
+
* stops sending. Without this sweep the Instances tab counts every
|
|
73
|
+
* environment that ever ran the function. Called only by the
|
|
74
|
+
* Serverless:CleanupStaleResources worker, which anchors olderThan
|
|
75
|
+
* to the parent function's own lastSeenAt (see the job header for
|
|
76
|
+
* why wall-clock now is the wrong anchor).
|
|
77
|
+
*/
|
|
78
|
+
@CaptureSpan()
|
|
79
|
+
public async deleteStaleForFunction(data: {
|
|
80
|
+
serverlessFunctionId: ObjectID;
|
|
81
|
+
olderThan: Date;
|
|
82
|
+
}): Promise<number> {
|
|
83
|
+
return await this.deleteBy({
|
|
84
|
+
query: {
|
|
85
|
+
serverlessFunctionId: data.serverlessFunctionId,
|
|
86
|
+
lastSeenAt: QueryHelper.lessThan(data.olderThan),
|
|
87
|
+
},
|
|
88
|
+
limit: LIMIT_MAX,
|
|
89
|
+
skip: 0,
|
|
90
|
+
props: { isRoot: true },
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Helper for the cleanup worker: ingest-cadence aware cutoff.
|
|
96
|
+
* 3x the 5-minute OTel ingest maintenance fence by default. Tune via
|
|
97
|
+
* SERVERLESS_INSTANCE_STALE_MINUTES (min 10).
|
|
98
|
+
*/
|
|
99
|
+
public getStaleThresholdDate(nowOverride?: Date): Date {
|
|
100
|
+
const minutes: number = this.getStaleThresholdMinutes();
|
|
101
|
+
return OneUptimeDate.addRemoveMinutes(
|
|
102
|
+
nowOverride || OneUptimeDate.getCurrentDate(),
|
|
103
|
+
-minutes,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/*
|
|
108
|
+
* Threshold must stay well above the 5-minute OTel ingest maintenance
|
|
109
|
+
* fence (MAINTENANCE_FENCE_TTL_SECONDS in OtelIngestBaseService).
|
|
110
|
+
* recordInstance sits behind that fence per (function, instance), so
|
|
111
|
+
* a live instance's lastSeenAt is legitimately up to ~5 minutes stale
|
|
112
|
+
* during continuous telemetry; a threshold at or below the fence
|
|
113
|
+
* would prune live instances between refreshes. 15 minutes gives 3x
|
|
114
|
+
* headroom and matches ServerlessFunctionService.markDisconnectedFunctions.
|
|
115
|
+
* The floor is 10 minutes, not the fence's nominal 5: the fence key is
|
|
116
|
+
* armed with jitter (300-375 s) behind a 30-second negative memo, so a
|
|
117
|
+
* live row's lastSeenAt can legitimately be close to 7 minutes old. A
|
|
118
|
+
* floor at the nominal TTL would let an override prune live rows.
|
|
119
|
+
* Anything unparseable falls back to the default.
|
|
120
|
+
*/
|
|
121
|
+
public getStaleThresholdMinutes(): number {
|
|
122
|
+
const raw: string | undefined =
|
|
123
|
+
process.env["SERVERLESS_INSTANCE_STALE_MINUTES"];
|
|
124
|
+
if (raw) {
|
|
125
|
+
const parsed: number = parseInt(raw, 10);
|
|
126
|
+
if (!isNaN(parsed) && parsed >= 10) {
|
|
127
|
+
return parsed;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return 15;
|
|
131
|
+
}
|
|
61
132
|
}
|
|
62
133
|
|
|
63
134
|
export default new Service();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import DatabaseConfig from "../DatabaseConfig";
|
|
2
2
|
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
3
|
+
import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
|
|
3
4
|
import CreateBy from "../Types/Database/CreateBy";
|
|
4
5
|
import DeleteBy from "../Types/Database/DeleteBy";
|
|
5
6
|
import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
@@ -174,18 +175,26 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
174
175
|
id: createBy.data.projectId!,
|
|
175
176
|
select: {
|
|
176
177
|
seatLimit: true,
|
|
177
|
-
paymentProviderSubscriptionSeats: true,
|
|
178
178
|
},
|
|
179
179
|
props: {
|
|
180
180
|
isRoot: true,
|
|
181
181
|
},
|
|
182
182
|
});
|
|
183
183
|
|
|
184
|
+
/*
|
|
185
|
+
* Billing can lag after a provider outage. Admission limits must use
|
|
186
|
+
* persisted memberships, including pending invitations.
|
|
187
|
+
*/
|
|
188
|
+
const numberOfMembers: number =
|
|
189
|
+
project &&
|
|
190
|
+
(project.seatLimit || createBy.props.currentPlan === PlanType.Free)
|
|
191
|
+
? await this.getUniqueTeamMemberCountInProject(projectId)
|
|
192
|
+
: 0;
|
|
193
|
+
|
|
184
194
|
if (
|
|
185
195
|
project &&
|
|
186
196
|
project.seatLimit &&
|
|
187
|
-
project.
|
|
188
|
-
project.paymentProviderSubscriptionSeats >= project.seatLimit
|
|
197
|
+
numberOfMembers >= project.seatLimit
|
|
189
198
|
) {
|
|
190
199
|
throw new BadDataException(Errors.TeamMemberService.LIMIT_REACHED);
|
|
191
200
|
}
|
|
@@ -193,8 +202,7 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
193
202
|
if (
|
|
194
203
|
createBy.props.currentPlan === PlanType.Free &&
|
|
195
204
|
project &&
|
|
196
|
-
|
|
197
|
-
project.paymentProviderSubscriptionSeats >= 1
|
|
205
|
+
numberOfMembers >= 1
|
|
198
206
|
) {
|
|
199
207
|
throw new BadDataException(
|
|
200
208
|
Errors.TeamMemberService.LIMIT_REACHED_FOR_FREE_PLAN,
|
|
@@ -535,7 +543,7 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
535
543
|
onCreate.createBy.data.projectId!,
|
|
536
544
|
);
|
|
537
545
|
|
|
538
|
-
await this.
|
|
546
|
+
await this.syncSubscriptionSeatsAfterMembershipChange(
|
|
539
547
|
onCreate.createBy.data.projectId!,
|
|
540
548
|
);
|
|
541
549
|
|
|
@@ -726,9 +734,7 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
726
734
|
|
|
727
735
|
for (const item of onDelete.carryForward as Array<TeamMember>) {
|
|
728
736
|
await this.refreshTokens(item.userId!, item.projectId!);
|
|
729
|
-
await this.
|
|
730
|
-
item.projectId!,
|
|
731
|
-
);
|
|
737
|
+
await this.syncSubscriptionSeatsAfterMembershipChange(item.projectId!);
|
|
732
738
|
|
|
733
739
|
/*
|
|
734
740
|
* Before the notification settings go: the "removed from on-call
|
|
@@ -1269,6 +1275,27 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
1269
1275
|
});
|
|
1270
1276
|
}
|
|
1271
1277
|
|
|
1278
|
+
/**
|
|
1279
|
+
* The membership write has already committed. A payment-provider outage
|
|
1280
|
+
* must not report a failed invite or prevent removal cleanup. The scheduled
|
|
1281
|
+
* seat reconciliation retries projects whose acknowledged count is stale.
|
|
1282
|
+
*/
|
|
1283
|
+
@CaptureSpan()
|
|
1284
|
+
private async syncSubscriptionSeatsAfterMembershipChange(
|
|
1285
|
+
projectId: ObjectID,
|
|
1286
|
+
): Promise<void> {
|
|
1287
|
+
try {
|
|
1288
|
+
await this.updateSubscriptionSeatsByUniqueTeamMembersInProject(projectId);
|
|
1289
|
+
} catch (err) {
|
|
1290
|
+
logger.error(
|
|
1291
|
+
err as Error,
|
|
1292
|
+
{
|
|
1293
|
+
projectId: projectId.toString(),
|
|
1294
|
+
} as LogAttributes,
|
|
1295
|
+
);
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1272
1299
|
@CaptureSpan()
|
|
1273
1300
|
public async updateSubscriptionSeatsByUniqueTeamMembersInProject(
|
|
1274
1301
|
projectId: ObjectID,
|
|
@@ -1277,47 +1304,80 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
|
|
|
1277
1304
|
return;
|
|
1278
1305
|
}
|
|
1279
1306
|
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
isRoot: true,
|
|
1290
|
-
},
|
|
1307
|
+
/*
|
|
1308
|
+
* Serialize the request and worker paths, then read the latest count so
|
|
1309
|
+
* an older synchronization cannot overwrite a newer seat quantity.
|
|
1310
|
+
*/
|
|
1311
|
+
const mutex: SemaphoreMutex = await Semaphore.lock({
|
|
1312
|
+
key: projectId.toString(),
|
|
1313
|
+
namespace: "team-member-subscription-seats",
|
|
1314
|
+
lockTimeout: 60000,
|
|
1315
|
+
acquireTimeout: 5000,
|
|
1291
1316
|
});
|
|
1292
1317
|
|
|
1293
|
-
|
|
1294
|
-
project
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1318
|
+
try {
|
|
1319
|
+
const project: Project | null = await ProjectService.findOneById({
|
|
1320
|
+
id: projectId,
|
|
1321
|
+
select: {
|
|
1322
|
+
paymentProviderSubscriptionId: true,
|
|
1323
|
+
paymentProviderPlanId: true,
|
|
1324
|
+
paymentProviderSubscriptionSeats: true,
|
|
1325
|
+
},
|
|
1326
|
+
props: {
|
|
1327
|
+
isRoot: true,
|
|
1328
|
+
},
|
|
1329
|
+
});
|
|
1330
|
+
|
|
1331
|
+
if (
|
|
1332
|
+
!project?.paymentProviderSubscriptionId ||
|
|
1333
|
+
!project.paymentProviderPlanId
|
|
1334
|
+
) {
|
|
1335
|
+
return;
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1298
1338
|
const plan: SubscriptionPlan | undefined =
|
|
1299
|
-
SubscriptionPlan.getSubscriptionPlanById(
|
|
1300
|
-
project?.paymentProviderPlanId,
|
|
1301
|
-
);
|
|
1339
|
+
SubscriptionPlan.getSubscriptionPlanById(project.paymentProviderPlanId);
|
|
1302
1340
|
|
|
1303
1341
|
if (!plan) {
|
|
1304
1342
|
return;
|
|
1305
1343
|
}
|
|
1306
1344
|
|
|
1345
|
+
const numberOfMembers: number =
|
|
1346
|
+
await this.getUniqueTeamMemberCountInProject(projectId);
|
|
1347
|
+
|
|
1348
|
+
if (project.paymentProviderSubscriptionSeats === numberOfMembers) {
|
|
1349
|
+
return;
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
/*
|
|
1353
|
+
* The provider may apply the quantity and then time out. Persist that
|
|
1354
|
+
* uncertainty before calling it, so even a later return to the previous
|
|
1355
|
+
* member count cannot make reconciliation mistake the seats for synced.
|
|
1356
|
+
*/
|
|
1357
|
+
const invalidated: number = await ProjectService.updateSubscriptionSeats({
|
|
1358
|
+
projectId: projectId,
|
|
1359
|
+
subscriptionId: project.paymentProviderSubscriptionId,
|
|
1360
|
+
planId: project.paymentProviderPlanId,
|
|
1361
|
+
seats: null,
|
|
1362
|
+
});
|
|
1363
|
+
|
|
1364
|
+
if (invalidated === 0) {
|
|
1365
|
+
return;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1307
1368
|
await BillingService.changeQuantity(
|
|
1308
1369
|
project.paymentProviderSubscriptionId,
|
|
1309
1370
|
numberOfMembers,
|
|
1310
1371
|
);
|
|
1311
1372
|
|
|
1312
|
-
await ProjectService.
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
props: {
|
|
1318
|
-
isRoot: true,
|
|
1319
|
-
},
|
|
1373
|
+
await ProjectService.updateSubscriptionSeats({
|
|
1374
|
+
projectId: projectId,
|
|
1375
|
+
subscriptionId: project.paymentProviderSubscriptionId,
|
|
1376
|
+
planId: project.paymentProviderPlanId,
|
|
1377
|
+
seats: numberOfMembers,
|
|
1320
1378
|
});
|
|
1379
|
+
} finally {
|
|
1380
|
+
await Semaphore.release(mutex);
|
|
1321
1381
|
}
|
|
1322
1382
|
}
|
|
1323
1383
|
|
|
@@ -4,6 +4,8 @@ import Query from "../Types/Database/Query";
|
|
|
4
4
|
import UpdateBy from "../Types/Database/UpdateBy";
|
|
5
5
|
import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
6
6
|
import DatabaseService from "./DatabaseService";
|
|
7
|
+
import PayAsYouGoBillingService from "./PayAsYouGoBillingService";
|
|
8
|
+
import { IsBillingEnabled } from "../EnvironmentConfig";
|
|
7
9
|
import ObjectID from "../../Types/ObjectID";
|
|
8
10
|
import OneUptimeDate from "../../Types/Date";
|
|
9
11
|
import Model from "../../Models/DatabaseModels/TelemetryIngestionKey";
|
|
@@ -189,6 +191,19 @@ export class Service extends DatabaseService<Model> {
|
|
|
189
191
|
data["expiresAt"] = this.validateExpiresAt(data["expiresAt"]);
|
|
190
192
|
}
|
|
191
193
|
|
|
194
|
+
if (IsBillingEnabled) {
|
|
195
|
+
const projectId: ObjectID | undefined =
|
|
196
|
+
createBy.props.tenantId || createBy.data.projectId;
|
|
197
|
+
|
|
198
|
+
if (!projectId) {
|
|
199
|
+
throw new BadDataException(
|
|
200
|
+
"ProjectId required to create a telemetry ingestion key.",
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
await PayAsYouGoBillingService.requirePayAsYouGo(projectId);
|
|
205
|
+
}
|
|
206
|
+
|
|
192
207
|
return { createBy, carryForward: null };
|
|
193
208
|
}
|
|
194
209
|
|
|
@@ -252,9 +267,8 @@ export class Service extends DatabaseService<Model> {
|
|
|
252
267
|
/*
|
|
253
268
|
* Only an EMPTY new list needs to know what kind of keys are being
|
|
254
269
|
* updated, so the extra read is paid for only then. A non-empty list is
|
|
255
|
-
* valid on both key types,
|
|
256
|
-
*
|
|
257
|
-
* and therefore reads nothing extra.
|
|
270
|
+
* valid on both key types. Renaming, disabling, or setting an expiry
|
|
271
|
+
* does not need this lookup; re-enabling has a separate billing check.
|
|
258
272
|
*/
|
|
259
273
|
if (allowedOrigins.length === 0) {
|
|
260
274
|
await this.assertNoBrowserKeyIsBeingUpdated(updateBy);
|
|
@@ -279,6 +293,33 @@ export class Service extends DatabaseService<Model> {
|
|
|
279
293
|
data["expiresAt"] = this.validateExpiresAt(data["expiresAt"]);
|
|
280
294
|
}
|
|
281
295
|
|
|
296
|
+
if (IsBillingEnabled && data["isEnabled"] === true) {
|
|
297
|
+
const keys: Array<Model> = await this.findBy({
|
|
298
|
+
query:
|
|
299
|
+
!updateBy.props.isRoot && updateBy.props.tenantId
|
|
300
|
+
? { ...updateBy.query, projectId: updateBy.props.tenantId }
|
|
301
|
+
: updateBy.query,
|
|
302
|
+
select: { projectId: true },
|
|
303
|
+
limit: updateBy.limit,
|
|
304
|
+
skip: updateBy.skip,
|
|
305
|
+
props: { isRoot: true, ignoreHooks: true },
|
|
306
|
+
});
|
|
307
|
+
const checkedProjects: Set<string> = new Set<string>();
|
|
308
|
+
|
|
309
|
+
for (const key of keys) {
|
|
310
|
+
if (!key.projectId) {
|
|
311
|
+
throw new BadDataException(
|
|
312
|
+
"ProjectId required to enable a telemetry ingestion key.",
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (!checkedProjects.has(key.projectId.toString())) {
|
|
317
|
+
await PayAsYouGoBillingService.requirePayAsYouGo(key.projectId);
|
|
318
|
+
checkedProjects.add(key.projectId.toString());
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
282
323
|
/*
|
|
283
324
|
* Same reasoning as onBeforeDelete. The cached policy now carries the kill
|
|
284
325
|
* switch, the expiry, the origin allowlist and the rate limit, so almost
|
|
@@ -296,9 +337,9 @@ export class Service extends DatabaseService<Model> {
|
|
|
296
337
|
* Postgres. Returns null for unknown or malformed tokens (also cached, for a
|
|
297
338
|
* shorter TTL).
|
|
298
339
|
*
|
|
299
|
-
* A
|
|
300
|
-
*
|
|
301
|
-
*
|
|
340
|
+
* A disabled or expired key still resolves so the caller can explain that
|
|
341
|
+
* refusal. An otherwise usable key requires payment setup here, so every
|
|
342
|
+
* transport and validation endpoint shares the same billing admission rule.
|
|
302
343
|
*/
|
|
303
344
|
@CaptureSpan()
|
|
304
345
|
public async getPolicyFromSecretKey(
|
|
@@ -316,7 +357,9 @@ export class Service extends DatabaseService<Model> {
|
|
|
316
357
|
const cached: CachedIngestionKeyPolicy | null | undefined =
|
|
317
358
|
this.policyCache.get(cacheKey);
|
|
318
359
|
if (cached !== undefined) {
|
|
319
|
-
return cached === null
|
|
360
|
+
return cached === null
|
|
361
|
+
? null
|
|
362
|
+
: this.requireBillingForPolicy(this.hydratePolicy(cached));
|
|
320
363
|
}
|
|
321
364
|
|
|
322
365
|
let secretKeyObjectId: ObjectID;
|
|
@@ -358,14 +401,41 @@ export class Service extends DatabaseService<Model> {
|
|
|
358
401
|
);
|
|
359
402
|
|
|
360
403
|
this.policyCache.set(cacheKey, snapshot, POSITIVE_TTL_MS);
|
|
361
|
-
return this.hydratePolicy(snapshot);
|
|
404
|
+
return this.requireBillingForPolicy(this.hydratePolicy(snapshot));
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
private async requireBillingForPolicy(
|
|
408
|
+
policy: TelemetryIngestionKeyPolicy,
|
|
409
|
+
): Promise<TelemetryIngestionKeyPolicy> {
|
|
410
|
+
if (
|
|
411
|
+
policy.isEnabled &&
|
|
412
|
+
(!policy.expiresAt || policy.expiresAt.getTime() > Date.now())
|
|
413
|
+
) {
|
|
414
|
+
/*
|
|
415
|
+
* Check even on key-cache hits. Billing eligibility has its own bounded
|
|
416
|
+
* cache, and must not remain enabled for the lifetime of a live key.
|
|
417
|
+
*
|
|
418
|
+
* This runs for every ingested batch, so it is the one caller that may
|
|
419
|
+
* answer from a recently cached denial rather than re-reading the
|
|
420
|
+
* payment provider. Without that, an unpaid project ingesting telemetry
|
|
421
|
+
* turns every batch into provider reads and holds the whole Stripe
|
|
422
|
+
* account at its rate limit. The client retries, so a few seconds
|
|
423
|
+
* between adding a card and ingest being admitted costs nothing - and
|
|
424
|
+
* BillingPaymentMethodService clears the entry as soon as the card is
|
|
425
|
+
* read, which is what the billing page does right after one is added.
|
|
426
|
+
*/
|
|
427
|
+
await PayAsYouGoBillingService.requirePayAsYouGo(policy.projectId, {
|
|
428
|
+
allowStaleDenial: true,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
return policy;
|
|
362
433
|
}
|
|
363
434
|
|
|
364
435
|
/**
|
|
365
436
|
* Resolve an ingestion token to its projectId.
|
|
366
437
|
*
|
|
367
|
-
*
|
|
368
|
-
* "which project owns this token" for any token that exists. It deliberately
|
|
438
|
+
* Shares billing admission with getPolicyFromSecretKey. It deliberately
|
|
369
439
|
* does NOT enforce the kill switch or the expiry.
|
|
370
440
|
*
|
|
371
441
|
* That restraint is the point. Several callers (gRPC, MQTT, session replay,
|
|
@@ -30,6 +30,7 @@ import DockerHostService from "./DockerHostService";
|
|
|
30
30
|
import PodmanHostService from "./PodmanHostService";
|
|
31
31
|
import KubernetesClusterService from "./KubernetesClusterService";
|
|
32
32
|
import ProxmoxClusterService from "./ProxmoxClusterService";
|
|
33
|
+
import VMwareVCenterService from "./VMwareVCenterService";
|
|
33
34
|
import CephClusterService from "./CephClusterService";
|
|
34
35
|
import IoTFleetService from "./IoTFleetService";
|
|
35
36
|
import Host from "../../Models/DatabaseModels/Host";
|
|
@@ -37,6 +38,7 @@ import DockerHost from "../../Models/DatabaseModels/DockerHost";
|
|
|
37
38
|
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
38
39
|
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
39
40
|
import ProxmoxCluster from "../../Models/DatabaseModels/ProxmoxCluster";
|
|
41
|
+
import VMwareVCenter from "../../Models/DatabaseModels/VMwareVCenter";
|
|
40
42
|
import IoTFleet from "../../Models/DatabaseModels/IoTFleet";
|
|
41
43
|
import CephCluster from "../../Models/DatabaseModels/CephCluster";
|
|
42
44
|
import ServiceType from "../../Types/Telemetry/ServiceType";
|
|
@@ -52,6 +54,10 @@ import {
|
|
|
52
54
|
IsBillingEnabled,
|
|
53
55
|
} from "../EnvironmentConfig";
|
|
54
56
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
57
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
58
|
+
import PayAsYouGoBillingService, {
|
|
59
|
+
LiveUsageAuthorization,
|
|
60
|
+
} from "./PayAsYouGoBillingService";
|
|
55
61
|
|
|
56
62
|
export class Service extends DatabaseService<Model> {
|
|
57
63
|
public constructor() {
|
|
@@ -71,6 +77,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
71
77
|
projectId: data.projectId,
|
|
72
78
|
productType: data.productType,
|
|
73
79
|
isReportedToBillingProvider: false,
|
|
80
|
+
totalCostInUSD: QueryHelper.greaterThan(0),
|
|
74
81
|
},
|
|
75
82
|
skip: 0,
|
|
76
83
|
limit: LIMIT_MAX, /// because a project can have MANY telemetry services.
|
|
@@ -84,20 +91,77 @@ export class Service extends DatabaseService<Model> {
|
|
|
84
91
|
});
|
|
85
92
|
}
|
|
86
93
|
|
|
94
|
+
public async waiveUnreportedUsageBilling(data: {
|
|
95
|
+
projectId: ObjectID;
|
|
96
|
+
productType: ProductType;
|
|
97
|
+
before?: Date;
|
|
98
|
+
}): Promise<void> {
|
|
99
|
+
let updated: number;
|
|
100
|
+
do {
|
|
101
|
+
updated = await this.updateBy({
|
|
102
|
+
query: {
|
|
103
|
+
projectId: data.projectId,
|
|
104
|
+
productType: data.productType,
|
|
105
|
+
isReportedToBillingProvider: false,
|
|
106
|
+
totalCostInUSD: QueryHelper.greaterThan(0),
|
|
107
|
+
...(data.before
|
|
108
|
+
? { createdAt: QueryHelper.lessThan(data.before) }
|
|
109
|
+
: {}),
|
|
110
|
+
},
|
|
111
|
+
data: { totalCostInUSD: new Decimal(0) },
|
|
112
|
+
skip: 0,
|
|
113
|
+
limit: LIMIT_MAX,
|
|
114
|
+
props: { isRoot: true, ignoreHooks: true },
|
|
115
|
+
});
|
|
116
|
+
} while (updated === LIMIT_MAX);
|
|
117
|
+
}
|
|
118
|
+
|
|
87
119
|
@CaptureSpan()
|
|
88
120
|
public async stageTelemetryUsageForProject(data: {
|
|
89
121
|
projectId: ObjectID;
|
|
90
122
|
productType: ProductType;
|
|
91
123
|
usageDate?: Date;
|
|
124
|
+
liveAuthorization?: LiveUsageAuthorization | undefined;
|
|
92
125
|
}): Promise<void> {
|
|
93
126
|
if (!IsBillingEnabled) {
|
|
94
127
|
return;
|
|
95
128
|
}
|
|
96
129
|
|
|
130
|
+
/*
|
|
131
|
+
* A report that has just authorized this project live passes that answer
|
|
132
|
+
* down instead of having it read again. Anything else - a direct call, a
|
|
133
|
+
* token made for another project, one that has aged out - checks live,
|
|
134
|
+
* exactly as every staging call did before.
|
|
135
|
+
*/
|
|
136
|
+
if (
|
|
137
|
+
!PayAsYouGoBillingService.isLiveAuthorizationFor(
|
|
138
|
+
data.liveAuthorization,
|
|
139
|
+
data.projectId,
|
|
140
|
+
) &&
|
|
141
|
+
!(await PayAsYouGoBillingService.canUsePayAsYouGo(data.projectId, {
|
|
142
|
+
useCache: false,
|
|
143
|
+
}))
|
|
144
|
+
) {
|
|
145
|
+
await this.waiveUnreportedUsageBilling(data);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
|
|
97
149
|
const usageDate: Date = data.usageDate
|
|
98
150
|
? OneUptimeDate.fromString(data.usageDate)
|
|
99
151
|
: OneUptimeDate.addRemoveDays(OneUptimeDate.getCurrentDate(), -1);
|
|
100
152
|
|
|
153
|
+
const billingStartsAt: Date | undefined =
|
|
154
|
+
await PayAsYouGoBillingService.getTelemetryBillingStartDate(
|
|
155
|
+
data.projectId,
|
|
156
|
+
);
|
|
157
|
+
if (
|
|
158
|
+
billingStartsAt &&
|
|
159
|
+
OneUptimeDate.getStartOfDay(usageDate, "UTC").getTime() <
|
|
160
|
+
billingStartsAt.getTime()
|
|
161
|
+
) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
101
165
|
const averageRowSizeInBytes: number = this.getAverageRowSizeForProduct(
|
|
102
166
|
data.productType,
|
|
103
167
|
);
|
|
@@ -138,9 +202,9 @@ export class Service extends DatabaseService<Model> {
|
|
|
138
202
|
return;
|
|
139
203
|
}
|
|
140
204
|
|
|
141
|
-
const usageDayString: string =
|
|
142
|
-
const startOfDay: Date = OneUptimeDate.getStartOfDay(usageDate);
|
|
143
|
-
const endOfDay: Date = OneUptimeDate.getEndOfDay(usageDate);
|
|
205
|
+
const usageDayString: string = this.getUsageDayString(usageDate);
|
|
206
|
+
const startOfDay: Date = OneUptimeDate.getStartOfDay(usageDate, "UTC");
|
|
207
|
+
const endOfDay: Date = OneUptimeDate.getEndOfDay(usageDate, "UTC");
|
|
144
208
|
|
|
145
209
|
/*
|
|
146
210
|
* Enumerate usage from ClickHouse by (primaryEntityId, primaryEntityType) in a
|
|
@@ -390,7 +454,8 @@ export class Service extends DatabaseService<Model> {
|
|
|
390
454
|
/*
|
|
391
455
|
* Map of resourceId -> retainTelemetryDataForDays for every resource in
|
|
392
456
|
* the project that can own telemetry (Service, Host, DockerHost,
|
|
393
|
-
* KubernetesCluster, ProxmoxCluster, CephCluster). Used to
|
|
457
|
+
* KubernetesCluster, ProxmoxCluster, VMwareVCenter, CephCluster). Used to
|
|
458
|
+
* scale billed
|
|
394
459
|
* cost by the actual retention applied to each resource's telemetry.
|
|
395
460
|
* Resources without an override (and the unattributed bucket) fall back
|
|
396
461
|
* to the project default.
|
|
@@ -499,6 +564,23 @@ export class Service extends DatabaseService<Model> {
|
|
|
499
564
|
}
|
|
500
565
|
}
|
|
501
566
|
|
|
567
|
+
const vmwareVCenters: Array<VMwareVCenter> =
|
|
568
|
+
await VMwareVCenterService.findBy({
|
|
569
|
+
query: { projectId: projectId },
|
|
570
|
+
select: { _id: true, retainTelemetryDataForDays: true },
|
|
571
|
+
skip: 0,
|
|
572
|
+
limit: LIMIT_MAX,
|
|
573
|
+
props: { isRoot: true },
|
|
574
|
+
});
|
|
575
|
+
for (const vmwareVCenter of vmwareVCenters) {
|
|
576
|
+
if (vmwareVCenter.id && vmwareVCenter.retainTelemetryDataForDays) {
|
|
577
|
+
retentionByServiceId.set(
|
|
578
|
+
vmwareVCenter.id.toString(),
|
|
579
|
+
vmwareVCenter.retainTelemetryDataForDays,
|
|
580
|
+
);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
502
584
|
const cephClusters: Array<CephCluster> = await CephClusterService.findBy({
|
|
503
585
|
query: { projectId: projectId },
|
|
504
586
|
select: { _id: true, retainTelemetryDataForDays: true },
|
|
@@ -580,7 +662,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
580
662
|
? OneUptimeDate.fromString(data.usageDate)
|
|
581
663
|
: OneUptimeDate.getCurrentDate();
|
|
582
664
|
|
|
583
|
-
const usageDayString: string =
|
|
665
|
+
const usageDayString: string = this.getUsageDayString(usageDate);
|
|
584
666
|
|
|
585
667
|
const totalCostOfThisOperationInUSD: number =
|
|
586
668
|
serverMeteredPlan.getTotalCostInUSD({
|
|
@@ -662,6 +744,14 @@ export class Service extends DatabaseService<Model> {
|
|
|
662
744
|
}
|
|
663
745
|
}
|
|
664
746
|
|
|
747
|
+
private getUsageDayString(usageDate: Date): string {
|
|
748
|
+
return OneUptimeDate.getDateAsCustomFormattedStringInTimezone({
|
|
749
|
+
date: usageDate,
|
|
750
|
+
timezone: "UTC",
|
|
751
|
+
format: "MMM DD, YYYY",
|
|
752
|
+
});
|
|
753
|
+
}
|
|
754
|
+
|
|
665
755
|
private getAverageRowSizeForProduct(productType: ProductType): number {
|
|
666
756
|
const fallbackSize: number = 1024;
|
|
667
757
|
|