@oneuptime/common 14.0.2 → 14.0.5
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/AlertFeed.ts +2 -0
- package/Models/DatabaseModels/DatabaseServer.ts +1650 -0
- package/Models/DatabaseModels/DatabaseServerEndpoint.ts +540 -0
- package/Models/DatabaseModels/DatabaseServerFeed.ts +625 -0
- package/Models/DatabaseModels/DatabaseServerLabelRule.ts +514 -0
- package/Models/DatabaseModels/DatabaseServerOwnerRule.ts +596 -0
- package/Models/DatabaseModels/DatabaseServerOwnerTeam.ts +491 -0
- package/Models/DatabaseModels/DatabaseServerOwnerUser.ts +490 -0
- package/Models/DatabaseModels/Incident.ts +55 -0
- package/Models/DatabaseModels/IncidentAlert.ts +540 -0
- package/Models/DatabaseModels/IncidentFeed.ts +2 -0
- package/Models/DatabaseModels/Index.ts +18 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +26 -0
- package/Models/DatabaseModels/Project.ts +60 -0
- package/Models/DatabaseModels/RumApplication.ts +52 -1
- package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
- package/Models/DatabaseModels/TelemetryException.ts +2 -0
- package/Models/DatabaseModels/UserProjectSsoConsent.ts +146 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.ts +28 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.ts +89 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.ts +673 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Middleware/MultipartFormData.ts +1 -1
- package/Server/Middleware/TelemetryIngest.ts +15 -8
- package/Server/Services/AlertReminderRuleService.ts +100 -24
- package/Server/Services/DatabaseServerEndpointService.ts +895 -0
- package/Server/Services/DatabaseServerFeedService.ts +128 -0
- package/Server/Services/DatabaseServerLabelRuleEngineService.ts +340 -0
- package/Server/Services/DatabaseServerLabelRuleService.ts +14 -0
- package/Server/Services/DatabaseServerOwnerRuleEngineService.ts +425 -0
- package/Server/Services/DatabaseServerOwnerRuleService.ts +14 -0
- package/Server/Services/DatabaseServerOwnerTeamService.ts +180 -0
- package/Server/Services/DatabaseServerOwnerUserService.ts +173 -0
- package/Server/Services/DatabaseServerService.ts +4546 -0
- package/Server/Services/DatabaseService.ts +14 -8
- package/Server/Services/DockerResourceService.ts +43 -2
- package/Server/Services/IncidentAlertService.ts +1811 -0
- package/Server/Services/IncidentReminderRuleService.ts +103 -23
- package/Server/Services/IncidentService.ts +210 -10
- package/Server/Services/IncidentStateTimelineService.ts +24 -0
- package/Server/Services/Index.ts +18 -0
- package/Server/Services/InventoryItemService.ts +113 -5
- package/Server/Services/IoTDeviceService.ts +145 -37
- package/Server/Services/OpenTelemetryIngestService.ts +19 -0
- package/Server/Services/PodmanResourceService.ts +43 -2
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +107 -23
- package/Server/Services/ServiceService.ts +1 -1
- package/Server/Services/TelemetryUsageBillingService.ts +29 -2
- package/Server/Services/UserProjectSsoConsentService.ts +74 -0
- package/Server/Services/UserService.ts +14 -1
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +18 -0
- package/Server/Types/Database/QueryHelper.ts +30 -1
- package/Server/Utils/AI/Toolbox/ResourceTools.ts +69 -1
- package/Server/Utils/Database/AffectedResourceRelations.ts +6 -0
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +188 -6
- package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +2262 -755
- package/Server/Utils/Monitor/MonitorIncident.ts +28 -1
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +268 -6
- package/Server/Utils/Monitor/MonitorResource.ts +47 -11
- package/Server/Utils/Monitor/MonitorResourceContext.ts +1 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +239 -21
- package/Server/Utils/Monitor/PerSeriesResolutionRootCause.ts +43 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +291 -0
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +111 -12
- package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
- package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +24 -2
- package/Server/Utils/StartServer.ts +26 -6
- package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
- package/Server/Utils/Telemetry/DatabaseEndpointDiscovery.ts +688 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +5 -1
- package/Server/Utils/Telemetry/LogExceptionExtractor.ts +18 -1
- package/Server/Utils/Telemetry/ResourceEntityFilter.ts +175 -12
- package/Server/Utils/Telemetry/ResourceFacetResolver.ts +12 -0
- package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +606 -36
- package/Server/Utils/Telemetry/Telemetry.ts +16 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -22
- package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +16 -10
- package/Tests/App/Accounts/SignedInRedirect.test.tsx +241 -0
- package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +221 -4
- package/Tests/App/Dashboard/AIInsightsResourcePageContext.test.ts +42 -0
- package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +100 -0
- package/Tests/App/Dashboard/AffectedResourcesPicker.test.tsx +86 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerHiddenTypes.test.tsx +2 -0
- package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +19 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +14 -0
- package/Tests/App/Dashboard/BulkIncidentLinkActions.test.tsx +869 -0
- package/Tests/App/Dashboard/CephMetricTooltips.test.tsx +1777 -0
- package/Tests/App/Dashboard/CloudFleetSummary.test.ts +8 -0
- package/Tests/App/Dashboard/CloudMetricTooltips.test.tsx +887 -0
- package/Tests/App/Dashboard/ContainerHostMetricTooltips.test.tsx +1309 -0
- package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +26 -1
- package/Tests/App/Dashboard/DashboardAppSsoError.test.tsx +501 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +64 -1
- package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +178 -18
- package/Tests/App/Dashboard/DashboardMasterPageSsoRedirect.test.tsx +444 -0
- package/Tests/App/Dashboard/DashboardNavBarForeignHiddenRule.test.tsx +573 -0
- package/Tests/App/Dashboard/DatabaseChartAxes.test.tsx +431 -0
- package/Tests/App/Dashboard/DatabaseContainerDetailBadge.test.tsx +249 -0
- package/Tests/App/Dashboard/DatabaseDashboardE2EFixes.test.ts +681 -0
- package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +1801 -0
- package/Tests/App/Dashboard/DatabaseFleetSummaryRefresh.test.tsx +280 -0
- package/Tests/App/Dashboard/DatabaseFormHelpers.test.tsx +321 -0
- package/Tests/App/Dashboard/DatabaseMetricMonitorLink.test.tsx +795 -0
- package/Tests/App/Dashboard/DatabaseOverviewHeader.test.tsx +580 -0
- package/Tests/App/Dashboard/DatabaseRecommendationsEngineMetrics.test.ts +270 -0
- package/Tests/App/Dashboard/DatabaseServerComponents.test.tsx +1486 -0
- package/Tests/App/Dashboard/DatabaseServerEngineMetricsFilter.test.ts +223 -0
- package/Tests/App/Dashboard/DatabaseServerPresentation.test.ts +435 -0
- package/Tests/App/Dashboard/DatabaseServerSummary.test.ts +186 -0
- package/Tests/App/Dashboard/DatabaseServerTelemetryQueries.test.ts +1553 -0
- package/Tests/App/Dashboard/DatabaseTableTruncation.test.tsx +326 -0
- package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +512 -0
- package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +774 -0
- package/Tests/App/Dashboard/DatabaseViewLayout.test.tsx +233 -0
- package/Tests/App/Dashboard/DatabaseWorkloadBadge.test.tsx +972 -0
- package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +5 -0
- package/Tests/App/Dashboard/DiscoveryReviewUnnamedHostHint.test.tsx +1061 -0
- package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +39 -0
- package/Tests/App/Dashboard/DockerSwarmClustersListTooltips.test.tsx +414 -0
- package/Tests/App/Dashboard/DockerSwarmMetricTooltips.test.ts +796 -0
- package/Tests/App/Dashboard/DockerSwarmOverviewTooltips.test.tsx +747 -0
- package/Tests/App/Dashboard/EventOverlayScope.test.ts +147 -0
- package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +1 -0
- package/Tests/App/Dashboard/ExceptionMonitorEnvironmentFilter.test.tsx +38 -18
- package/Tests/App/Dashboard/HostDetailViewTooltips.test.tsx +725 -0
- package/Tests/App/Dashboard/HostListColumnTooltips.test.tsx +472 -0
- package/Tests/App/Dashboard/HostMetricTooltips.test.ts +709 -0
- package/Tests/App/Dashboard/HostOverviewTooltips.test.tsx +698 -0
- package/Tests/App/Dashboard/HostTooltipHarness.ts +124 -0
- package/Tests/App/Dashboard/HostsListTooltips.test.tsx +395 -0
- package/Tests/App/Dashboard/IncidentAlertLinkDialog.test.tsx +691 -0
- package/Tests/App/Dashboard/IncidentAlertLinkHelpers.test.ts +458 -0
- package/Tests/App/Dashboard/IncidentAlertLinkPages.test.tsx +828 -0
- package/Tests/App/Dashboard/IncidentAlertLinkSideMenus.test.tsx +231 -0
- package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +689 -0
- package/Tests/App/Dashboard/IoTMetricTooltips.test.tsx +1123 -0
- package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +837 -0
- package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +699 -0
- package/Tests/App/Dashboard/KubernetesContainersTabTooltips.test.tsx +320 -0
- package/Tests/App/Dashboard/KubernetesCostTooltips.test.tsx +502 -0
- package/Tests/App/Dashboard/KubernetesInsightsTooltips.test.tsx +222 -0
- package/Tests/App/Dashboard/KubernetesResourceMetricTooltips.test.ts +561 -0
- package/Tests/App/Dashboard/KubernetesResourcePagesTooltips.test.tsx +1168 -0
- package/Tests/App/Dashboard/LinkIncidentAlertModal.test.tsx +154 -0
- package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +1 -0
- package/Tests/App/Dashboard/MetricDescriptionRules.ts +170 -0
- package/Tests/App/Dashboard/MetricDescriptionsCatalog.test.ts +206 -0
- package/Tests/App/Dashboard/MetricDescriptionsConsistency.test.ts +275 -0
- package/Tests/App/Dashboard/MetricsViewerDrillDown.test.tsx +310 -0
- package/Tests/App/Dashboard/MetricsViewerEntityScopedRows.test.tsx +495 -0
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +132 -1
- package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +5 -0
- package/Tests/App/Dashboard/NetworkDeviceTooltips.test.tsx +852 -0
- package/Tests/App/Dashboard/NetworkDiagnosticsTooltips.test.tsx +556 -0
- package/Tests/App/Dashboard/NetworkMetricTooltips.test.ts +1348 -0
- package/Tests/App/Dashboard/NetworkSiteTooltips.test.tsx +679 -0
- package/Tests/App/Dashboard/ProductOrientation.test.tsx +4 -3
- package/Tests/App/Dashboard/ProxmoxMetricTooltips.test.ts +592 -0
- package/Tests/App/Dashboard/ProxmoxOverviewTooltips.test.tsx +1002 -0
- package/Tests/App/Dashboard/ProxmoxResourcePageTooltips.test.tsx +923 -0
- package/Tests/App/Dashboard/RecommendationsLoadedContext.test.tsx +349 -0
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +62 -0
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
- package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +14 -0
- package/Tests/App/Dashboard/ResourceOverviewTileTooltips.test.tsx +1066 -0
- package/Tests/App/Dashboard/RumOverviewPage.test.tsx +1195 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +2 -0
- package/Tests/App/Dashboard/ServerlessMetricTooltips.test.tsx +474 -0
- package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +1085 -0
- package/Tests/App/Dashboard/ServiceMetricTooltips.test.tsx +772 -0
- package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +56 -1
- package/Tests/App/Dashboard/TelemetryMetricsSignals.test.ts +1207 -0
- package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +10 -0
- package/Tests/App/Dashboard/TelemetryResourceTabTooltips.test.tsx +437 -0
- package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +2 -1
- package/Tests/App/Dashboard/VMwareMetricTooltips.test.ts +801 -0
- package/Tests/App/Dashboard/VMwareOverviewTooltips.test.tsx +601 -0
- package/Tests/App/Dashboard/VMwareResourcePagesTooltips.test.tsx +646 -0
- package/Tests/App/Dashboard/VMwareTooltipHarness.ts +145 -0
- package/Tests/App/StatusPage/StatusPageHeaderForeignHiddenRule.test.tsx +284 -0
- package/Tests/ClassStrings.ts +178 -0
- package/Tests/Fixtures/MobilePasskeyUser.json +1 -2
- package/Tests/ForeignHiddenRuleGuard.ts +2152 -0
- package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +2250 -0
- package/Tests/Models/DatabaseModels/IncidentAlertModel.test.ts +554 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +24 -5
- package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +117 -0
- package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
- package/Tests/RenderedMarkup.ts +518 -0
- package/Tests/ResponsiveVisibility.test.ts +490 -4
- package/Tests/ResponsiveVisibility.ts +505 -52
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
- package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +541 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentAlertMigration.test.ts +341 -0
- package/Tests/Server/Infrastructure/Postgres/AddSessionReplaySameOriginTracePropagationMigration.test.ts +247 -0
- package/Tests/Server/Infrastructure/Postgres/AddUserProjectSsoConsentMigration.test.ts +234 -0
- package/Tests/Server/Services/ContainerSnapshotUpsertPostgres.test.ts +319 -0
- package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +13 -0
- package/Tests/Server/Services/DatabaseServerEndpointService.test.ts +2033 -0
- package/Tests/Server/Services/DatabaseServerFeedAndOwnerServices.test.ts +529 -0
- package/Tests/Server/Services/DatabaseServerLifecycle.test.ts +3302 -0
- package/Tests/Server/Services/DatabaseServerRegistries.test.ts +603 -0
- package/Tests/Server/Services/DatabaseServerRuleEngines.test.ts +754 -0
- package/Tests/Server/Services/DatabaseServerService.test.ts +3558 -0
- package/Tests/Server/Services/DatabaseServerSqlPostgres.test.ts +2045 -0
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlockedPostgres.test.ts +362 -0
- package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlockedReply.test.ts +210 -0
- package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +18 -0
- package/Tests/Server/Services/IncidentAlertPostgres.test.ts +903 -0
- package/Tests/Server/Services/IncidentAlertRegistration.test.ts +96 -0
- package/Tests/Server/Services/IncidentAlertService.test.ts +2225 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +2 -0
- package/Tests/Server/Services/IncidentAlertStateCascade.test.ts +970 -0
- package/Tests/Server/Services/IncidentCreateFromAlerts.test.ts +1284 -0
- package/Tests/Server/Services/IncomingCallPolicyEscalationRuleTarget.test.ts +225 -0
- package/Tests/Server/Services/InventoryItemDisplayName.test.ts +280 -2
- package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +8 -2
- package/Tests/Server/Services/IoTDeviceLatestMetricsPostgres.test.ts +689 -0
- package/Tests/Server/Services/IoTDeviceService.test.ts +379 -0
- package/Tests/Server/Services/LatestMetricsValuesShape.test.ts +360 -0
- package/Tests/Server/Services/LlmModelPriceService.test.ts +402 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
- package/Tests/Server/Services/OwnerRowUniqueness.test.ts +61 -9
- package/Tests/Server/Services/ReminderRuleLookupPostgres.test.ts +2250 -0
- package/Tests/Server/Services/ReminderRuleRefreshOpenSubjectsPaging.test.ts +653 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +68 -20
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
- package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +9 -0
- package/Tests/Server/Services/UserProjectSsoConsentPostgres.test.ts +153 -0
- package/Tests/Server/Services/UserProjectSsoConsentService.test.ts +192 -0
- package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +71 -0
- package/Tests/Server/Services/UserSignupIdTakeoverPostgres.test.ts +238 -0
- package/Tests/Server/Services/WorkspaceNotificationSummaryHelpers.test.ts +592 -0
- package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +3 -0
- package/Tests/Server/Types/Database/EventOverlayScopePostgres.test.ts +1 -0
- package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +11 -0
- package/Tests/Server/Types/Database/Permissions/InfrastructureOwnershipScope.test.ts +8 -0
- package/Tests/Server/Types/Database/QueryHelperBooleanForCriteriaBackedRule.test.ts +1094 -0
- package/Tests/Server/Utils/AI/ResourceTools.test.ts +134 -0
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +41 -0
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +279 -9
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaDisplayContext.test.ts +933 -0
- package/Tests/Server/Utils/Monitor/DatabaseMaintenanceSuppression.test.ts +582 -0
- package/Tests/Server/Utils/Monitor/DatabaseServerMonitorLinking.test.ts +753 -0
- package/Tests/Server/Utils/Monitor/MonitorActionTimestamps.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertCriteriaReferences.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +119 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +60 -25
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorAffectedResourceEdgeCases.test.ts +1719 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorKubernetesAffectedResources.test.ts +1447 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorKubernetesRatioEmail.test.ts +352 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformMetricUnits.test.ts +717 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformRawScan.test.ts +2125 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformSeriesAffectedResources.test.ts +1288 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentCriteriaReferences.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentMemberRoleMembership.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +88 -0
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +205 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +62 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceDatabaseMaintenance.test.ts +803 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +133 -3
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/PerSeriesRecoveryResolution.test.ts +472 -1
- package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +236 -2
- package/Tests/Server/Utils/SeriesResourceLabels.test.ts +70 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +103 -0
- package/Tests/Server/Utils/StartServerProtobufContentType.test.ts +54 -0
- package/Tests/Server/Utils/Telemetry/DatabaseEndpointDiscovery.test.ts +1895 -0
- package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +7 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractorSeverityGate.test.ts +90 -0
- package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +570 -0
- package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +97 -2
- package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +1337 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +295 -0
- package/Tests/Types/AI/AIResourceContext.test.ts +30 -0
- package/Tests/Types/DatabaseServer/DatabaseContainerClassifier.test.ts +3644 -0
- package/Tests/Types/DatabaseServer/DatabaseContainerCommand.test.ts +340 -0
- package/Tests/Types/DatabaseServer/DatabaseContainerCommandCorpus.ts +826 -0
- package/Tests/Types/DatabaseServer/DatabaseContainerCommandPostgres.test.ts +150 -0
- package/Tests/Types/DatabaseServer/DatabaseEndpoint.test.ts +2657 -0
- package/Tests/Types/DatabaseServer/DatabaseServerDiscoverySource.test.ts +64 -0
- package/Tests/Types/DatabaseServer/DatabaseServerEntityKeys.test.ts +952 -0
- package/Tests/Types/DatabaseServer/DatabaseServerMetricCatalog.test.ts +1161 -0
- package/Tests/Types/DatabaseServer/DatabaseSystem.test.ts +1514 -0
- package/Tests/Types/DatabaseServer/DatabaseTelemetryResolver.test.ts +1558 -0
- package/Tests/Types/Monitor/CephAlertTemplates.test.ts +255 -6
- package/Tests/Types/Monitor/DatabaseAlertTemplates.test.ts +2254 -0
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +298 -0
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +271 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +253 -9
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +13 -5
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +4 -2
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +111 -2
- package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +61 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +114 -0
- package/Tests/Types/Monitor/Utils/KubernetesAgentEmittedMetrics.ts +181 -0
- package/Tests/Types/NetworkDevice/DiscoveredHostNamingStatus.test.ts +401 -0
- package/Tests/Types/Rum/WebVitals.test.ts +173 -0
- package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +4 -1
- package/Tests/Types/Telemetry/ResourceFacetCatalog.test.ts +24 -2
- package/Tests/UI/Components/Card.test.tsx +93 -2
- package/Tests/UI/Components/FeedOptions.test.ts +6 -0
- package/Tests/UI/Components/FeedOptionsButton.test.tsx +8 -1
- package/Tests/UI/Components/FieldLabelInfoCardTooltip.test.tsx +413 -0
- package/Tests/UI/Components/ForeignHiddenRuleResilience.test.tsx +1147 -0
- package/Tests/UI/Components/HeaderRightRail.test.tsx +41 -1
- package/Tests/UI/Components/InfoTooltip.test.tsx +242 -0
- package/Tests/UI/Components/LogsEntityNames.test.ts +16 -1
- package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +7 -3
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +207 -3
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDeleteVerb.test.tsx +367 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableCreateButtonTitle.test.tsx +275 -0
- package/Tests/UI/Components/ResourceFacetConfigs.test.ts +2 -1
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
- package/Tests/UI/Components/SrOnlyForeignRule.test.tsx +994 -0
- package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +34 -1
- package/Tests/UI/Components/TableHeaderTooltip.test.tsx +662 -0
- package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +4 -1
- package/Tests/UI/ForeignHiddenRuleGuard.test.ts +1951 -0
- package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +166 -9
- package/Tests/UI/Rum/RecordingHealthTooltips.test.tsx +447 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +164 -0
- package/Tests/UI/Rum/ReplayFrameCapture.test.ts +6750 -0
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +19 -1
- package/Tests/UI/Rum/ReplayRail.test.tsx +723 -12
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +86 -0
- package/Tests/UI/Rum/ReplayScreenshot.test.ts +2124 -0
- package/Tests/UI/Rum/ReplayScreenshotActions.test.tsx +3288 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +62 -0
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +983 -2
- package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +19 -1
- package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +149 -0
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +107 -6
- package/Tests/UI/Rum/SessionReplayUsersTableTooltips.test.tsx +330 -0
- package/Tests/UI/Rum/UserFlowTooltips.test.tsx +886 -0
- package/Tests/UI/TailwindPlayCdnForeignHiddenRule.test.ts +1005 -0
- package/Tests/UI/ThemeGroupHoverReveal.test.ts +847 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +80 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +23 -0
- package/Tests/UI/Utils/ModelAPISsoRedirect.test.ts +127 -0
- package/Tests/UI/Utils/Navigation.test.ts +102 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +76 -0
- package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +23 -0
- package/Tests/Utils/Incident/IncidentFromAlerts.test.ts +696 -0
- package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
- package/Tests/Utils/MetricUnitUtil.test.ts +227 -2
- package/Tests/Utils/Monitor/MetricValueFormatter.test.ts +288 -2
- package/Tests/Utils/Monitor/PlatformResourceIdentityAndUnits.test.ts +1559 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.test.ts +2546 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +315 -0
- package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +336 -1
- package/Tests/Utils/NetworkDiscovery/NetbiosNameUtil.test.ts +244 -0
- package/Tests/Utils/Rum/SessionTraceState.test.ts +239 -0
- package/Tests/Utils/ValueFormatter.test.ts +50 -0
- package/Tests/tsconfig.json +16 -0
- package/Types/AI/AIResourceContext.ts +7 -0
- package/Types/Dashboard/DashboardTemplates.ts +2 -1
- package/Types/DatabaseServer/DatabaseConnectionSpan.ts +77 -0
- package/Types/DatabaseServer/DatabaseContainerClassifier.ts +2068 -0
- package/Types/DatabaseServer/DatabaseContainerCommand.ts +801 -0
- package/Types/DatabaseServer/DatabaseEndpoint.ts +1943 -0
- package/Types/DatabaseServer/DatabaseServerDiscoverySource.ts +68 -0
- package/Types/DatabaseServer/DatabaseServerMetricCatalog.ts +966 -0
- package/Types/DatabaseServer/DatabaseSystem.ts +2124 -0
- package/Types/DatabaseServer/DatabaseTelemetryResolver.ts +555 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Incident/IncidentAlertLink.ts +38 -0
- package/Types/Monitor/CephAlertTemplates.ts +18 -0
- package/Types/Monitor/DatabaseAlertTemplates.ts +2020 -0
- package/Types/Monitor/KubernetesAlertTemplates.ts +64 -24
- package/Types/Monitor/KubernetesMetricCatalog.ts +118 -19
- package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +14 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +93 -10
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +109 -8
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +36 -7
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +43 -2
- package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +41 -6
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +26 -0
- package/Types/NetworkDevice/DiscoveredHostNamingStatus.ts +147 -0
- package/Types/Permission.ts +315 -0
- package/Types/Probe/ProbeApiIngestResponse.ts +8 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +10 -0
- package/Types/Rules/RuleRun.ts +12 -0
- package/Types/Rum/SessionReplay.ts +25 -6
- package/Types/Rum/WebVitals.ts +52 -0
- package/Types/Telemetry/EntityType.ts +23 -0
- package/Types/Telemetry/ResourceFacetCatalog.ts +14 -0
- package/Types/Telemetry/ServiceType.ts +8 -0
- package/UI/Components/Banner/Banner.tsx +1 -1
- package/UI/Components/Card/Card.tsx +1 -1
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +2 -2
- package/UI/Components/Charts/Line/LineChart.tsx +7 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +1 -1
- package/UI/Components/Date/StartAndEndDate.tsx +5 -5
- package/UI/Components/Detail/FieldLabel.tsx +8 -0
- package/UI/Components/Diagram/HorizontalStepChain.tsx +1 -1
- package/UI/Components/Feed/FeedOptionsButton.tsx +1 -1
- package/UI/Components/Forms/BasicForm.tsx +1 -1
- package/UI/Components/Header/Header.tsx +1 -1
- package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -1
- package/UI/Components/HeaderAlert/HeaderAlert.tsx +1 -1
- package/UI/Components/InfoCard/InfoCard.tsx +47 -1
- package/UI/Components/LogsViewer/components/FacetValueRow.tsx +1 -1
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +1 -1
- package/UI/Components/Modal/ModalFooter.tsx +1 -1
- package/UI/Components/ModelDetail/CardModelDetail.tsx +2 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +99 -21
- package/UI/Components/ModelTable/Column.ts +5 -0
- package/UI/Components/Navbar/NavBar.tsx +9 -2
- package/UI/Components/Navbar/NavBarMenuModal.tsx +2 -2
- package/UI/Components/Page/Page.tsx +1 -1
- package/UI/Components/Pagination/Pagination.tsx +3 -3
- package/UI/Components/ProgressButtons/ProgressButtonItem.tsx +1 -1
- package/UI/Components/SideMenu/SideMenu.tsx +4 -1
- package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +4 -2
- package/UI/Components/StatusPage/ResourceList.tsx +6 -6
- package/UI/Components/Table/TableHeader.tsx +47 -2
- package/UI/Components/Table/Types/Column.ts +7 -0
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +1 -1
- package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +1 -1
- package/UI/Components/Tooltip/InfoTooltip.tsx +78 -0
- package/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.tsx +1 -1
- package/UI/Components/Workflow/ComponentsModal.tsx +2 -2
- package/UI/Components/Workflow/StepTraceViewer.tsx +1 -1
- package/UI/Styles/Theme.css +8 -1
- package/UI/Utils/Navigation.ts +89 -42
- package/UI/Utils/PermissionGate.ts +11 -2
- package/UI/Utils/Telemetry/TelemetryEntityNames.ts +7 -0
- package/UI/Utils/TelemetryService.ts +4 -3
- package/Utils/Incident/IncidentFromAlerts.ts +516 -0
- package/Utils/LabelRuleImportExport.ts +2 -0
- package/Utils/MetricUnitUtil.ts +103 -11
- package/Utils/Monitor/MetricValueFormatter.ts +66 -13
- package/Utils/Monitor/PlatformMetricUnitUtil.ts +215 -0
- package/Utils/Monitor/PlatformResourceIdentity.ts +514 -0
- package/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.ts +425 -0
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +32 -0
- package/Utils/NetworkDiscovery/NetbiosNameUtil.ts +73 -0
- package/Utils/Rum/SessionTraceState.ts +212 -0
- package/Utils/Telemetry/DatabaseServerEntityKeys.ts +275 -0
- package/Utils/Telemetry/EntityKey.ts +176 -0
- package/Utils/ValueFormatter.ts +16 -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/AlertFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseServer.js +1683 -0
- package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerEndpoint.js +559 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerEndpoint.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerOwnerTeam.js +506 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerOwnerUser.js +505 -0
- package/build/dist/Models/DatabaseModels/DatabaseServerOwnerUser.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/IncidentAlert.js +553 -0
- package/build/dist/Models/DatabaseModels/IncidentAlert.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +18 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +62 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +53 -1
- package/build/dist/Models/DatabaseModels/RumApplication.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/TelemetryException.js +2 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserProjectSsoConsent.js +162 -0
- package/build/dist/Models/DatabaseModels/UserProjectSsoConsent.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js +42 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.js +240 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/MultipartFormData.js +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +15 -8
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AlertReminderRuleService.js +72 -23
- package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseServerEndpointService.js +694 -0
- package/build/dist/Server/Services/DatabaseServerEndpointService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseServerFeedService.js +110 -0
- package/build/dist/Server/Services/DatabaseServerFeedService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseServerLabelRuleEngineService.js +272 -0
- package/build/dist/Server/Services/DatabaseServerLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseServerLabelRuleService.js +13 -0
- package/build/dist/Server/Services/DatabaseServerLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseServerOwnerRuleEngineService.js +340 -0
- package/build/dist/Server/Services/DatabaseServerOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseServerOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/DatabaseServerOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseServerOwnerTeamService.js +160 -0
- package/build/dist/Server/Services/DatabaseServerOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseServerOwnerUserService.js +153 -0
- package/build/dist/Server/Services/DatabaseServerOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseServerService.js +3272 -0
- package/build/dist/Server/Services/DatabaseServerService.js.map +1 -0
- package/build/dist/Server/Services/DatabaseService.js +8 -4
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DockerResourceService.js +30 -3
- package/build/dist/Server/Services/DockerResourceService.js.map +1 -1
- package/build/dist/Server/Services/IncidentAlertService.js +1370 -0
- package/build/dist/Server/Services/IncidentAlertService.js.map +1 -0
- package/build/dist/Server/Services/IncidentReminderRuleService.js +73 -23
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +164 -12
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +21 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +18 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemService.js +88 -5
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
- package/build/dist/Server/Services/IoTDeviceService.js +111 -24
- package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +24 -9
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PodmanResourceService.js +30 -3
- package/build/dist/Server/Services/PodmanResourceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +75 -23
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServiceService.js +1 -1
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +23 -2
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/UserProjectSsoConsentService.js +79 -0
- package/build/dist/Server/Services/UserProjectSsoConsentService.js.map +1 -0
- package/build/dist/Server/Services/UserService.js +13 -1
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +18 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +26 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +46 -0
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
- package/build/dist/Server/Utils/Database/AffectedResourceRelations.js +6 -0
- package/build/dist/Server/Utils/Database/AffectedResourceRelations.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +134 -13
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +22 -6
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +1489 -524
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +196 -6
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +36 -9
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +175 -17
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/PerSeriesResolutionRootCause.js +29 -0
- package/build/dist/Server/Utils/Monitor/PerSeriesResolutionRootCause.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +211 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +82 -10
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +8 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +20 -4
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js +442 -0
- package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +5 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +15 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +121 -5
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +12 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +438 -36
- package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +12 -0
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +17 -18
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +16 -10
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -1
- package/build/dist/Types/AI/AIResourceContext.js +7 -0
- package/build/dist/Types/AI/AIResourceContext.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +2 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/DatabaseServer/DatabaseConnectionSpan.js +71 -0
- package/build/dist/Types/DatabaseServer/DatabaseConnectionSpan.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseContainerClassifier.js +1462 -0
- package/build/dist/Types/DatabaseServer/DatabaseContainerClassifier.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseContainerCommand.js +691 -0
- package/build/dist/Types/DatabaseServer/DatabaseContainerCommand.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js +1407 -0
- package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseServerDiscoverySource.js +60 -0
- package/build/dist/Types/DatabaseServer/DatabaseServerDiscoverySource.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseServerMetricCatalog.js +804 -0
- package/build/dist/Types/DatabaseServer/DatabaseServerMetricCatalog.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseSystem.js +1860 -0
- package/build/dist/Types/DatabaseServer/DatabaseSystem.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseTelemetryResolver.js +406 -0
- package/build/dist/Types/DatabaseServer/DatabaseTelemetryResolver.js.map +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Incident/IncidentAlertLink.js +34 -0
- package/build/dist/Types/Incident/IncidentAlertLink.js.map +1 -0
- package/build/dist/Types/Monitor/CephAlertTemplates.js +18 -0
- package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/DatabaseAlertTemplates.js +1518 -0
- package/build/dist/Types/Monitor/DatabaseAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +57 -24
- package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +104 -18
- package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +80 -3
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +10 -3
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +29 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +21 -6
- package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +25 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
- package/build/dist/Types/NetworkDevice/DiscoveredHostNamingStatus.js +136 -0
- package/build/dist/Types/NetworkDevice/DiscoveredHostNamingStatus.js.map +1 -0
- package/build/dist/Types/Permission.js +276 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +10 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
- package/build/dist/Types/Rules/RuleRun.js +4 -0
- package/build/dist/Types/Rules/RuleRun.js.map +1 -1
- package/build/dist/Types/Rum/WebVitals.js +25 -0
- package/build/dist/Types/Rum/WebVitals.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +23 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +14 -0
- package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -1
- package/build/dist/Types/Telemetry/ServiceType.js +8 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Banner/Banner.js +1 -1
- package/build/dist/UI/Components/Banner/Banner.js.map +1 -1
- package/build/dist/UI/Components/Card/Card.js +1 -1
- package/build/dist/UI/Components/Card/Card.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +2 -2
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +1 -1
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/Date/StartAndEndDate.js +5 -5
- package/build/dist/UI/Components/Date/StartAndEndDate.js.map +1 -1
- package/build/dist/UI/Components/Detail/FieldLabel.js +2 -0
- package/build/dist/UI/Components/Detail/FieldLabel.js.map +1 -1
- package/build/dist/UI/Components/Diagram/HorizontalStepChain.js +1 -1
- package/build/dist/UI/Components/Diagram/HorizontalStepChain.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedOptionsButton.js +1 -1
- package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -1
- package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
- package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js +1 -1
- package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js.map +1 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js +22 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/Modal/ModalFooter.js +1 -1
- package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +2 -2
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +70 -18
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +9 -2
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
- package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
- package/build/dist/UI/Components/Page/Page.js +1 -1
- package/build/dist/UI/Components/Page/Page.js.map +1 -1
- package/build/dist/UI/Components/Pagination/Pagination.js +3 -3
- package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
- package/build/dist/UI/Components/ProgressButtons/ProgressButtonItem.js +1 -1
- package/build/dist/UI/Components/ProgressButtons/ProgressButtonItem.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js +4 -1
- package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +3 -1
- package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceList.js +6 -6
- package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
- package/build/dist/UI/Components/Table/TableHeader.js +18 -2
- package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/InfoTooltip.js +28 -0
- package/build/dist/UI/Components/Tooltip/InfoTooltip.js.map +1 -0
- package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js +1 -1
- package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ComponentsModal.js +2 -2
- package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js +1 -1
- package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +66 -33
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/UI/Utils/PermissionGate.js +4 -2
- package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
- package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js +7 -0
- package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.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/Utils/Incident/IncidentFromAlerts.js +306 -0
- package/build/dist/Utils/Incident/IncidentFromAlerts.js.map +1 -0
- package/build/dist/Utils/LabelRuleImportExport.js +2 -0
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
- package/build/dist/Utils/MetricUnitUtil.js +77 -13
- package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/MetricValueFormatter.js +58 -13
- package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -1
- package/build/dist/Utils/Monitor/PlatformMetricUnitUtil.js +161 -0
- package/build/dist/Utils/Monitor/PlatformMetricUnitUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/PlatformResourceIdentity.js +323 -0
- package/build/dist/Utils/Monitor/PlatformResourceIdentity.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.js +270 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +23 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js +61 -0
- package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js.map +1 -1
- package/build/dist/Utils/Rum/SessionTraceState.js +154 -0
- package/build/dist/Utils/Rum/SessionTraceState.js.map +1 -0
- package/build/dist/Utils/Telemetry/DatabaseServerEntityKeys.js +178 -0
- package/build/dist/Utils/Telemetry/DatabaseServerEntityKeys.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +133 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/ValueFormatter.js +15 -0
- package/build/dist/Utils/ValueFormatter.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.tests.json +7 -5
|
@@ -101,10 +101,34 @@ export class Service extends DatabaseService<Model> {
|
|
|
101
101
|
return onDelete;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
/*
|
|
105
|
+
* Re-matches the reminder rule for every open incident in the project and
|
|
106
|
+
* rewrites its nextReminderNotificationAt.
|
|
107
|
+
*
|
|
108
|
+
* Without options that is one read of at most LIMIT_MAX open incidents, and
|
|
109
|
+
* it must stay one: the rule create, update and delete hooks run it inside
|
|
110
|
+
* the API request.
|
|
111
|
+
*
|
|
112
|
+
* `onlyWithoutNextReminder` narrows that to open incidents with no reminder
|
|
113
|
+
* scheduled at all, and reads every one of them, in `_id`-ordered pages of
|
|
114
|
+
* LIMIT_MAX. It exists for backfills (see the
|
|
115
|
+
* ScheduleRemindersMissedByReminderRuleLookup data migration), which run in a
|
|
116
|
+
* worker rather than a request and must reach every such incident of the
|
|
117
|
+
* project, however many there are. The pages are cursored by `_id`, not
|
|
118
|
+
* offset, because refreshing an incident can take it out of the set being
|
|
119
|
+
* paged. An incident that already has a timestamp is left alone, because
|
|
120
|
+
* re-scheduling it would push a reminder that is due, or overdue, one full
|
|
121
|
+
* interval later.
|
|
122
|
+
*/
|
|
104
123
|
@CaptureSpan()
|
|
105
124
|
public async refreshSchedulesForOpenIncidents(
|
|
106
125
|
projectId: ObjectID,
|
|
126
|
+
options?: { onlyWithoutNextReminder?: boolean | undefined } | undefined,
|
|
107
127
|
): Promise<void> {
|
|
128
|
+
const onlyWithoutNextReminder: boolean = Boolean(
|
|
129
|
+
options?.onlyWithoutNextReminder,
|
|
130
|
+
);
|
|
131
|
+
|
|
108
132
|
try {
|
|
109
133
|
const unresolvedStates: Array<IncidentState> =
|
|
110
134
|
await IncidentStateService.findBy({
|
|
@@ -132,33 +156,51 @@ export class Service extends DatabaseService<Model> {
|
|
|
132
156
|
return;
|
|
133
157
|
}
|
|
134
158
|
|
|
135
|
-
|
|
136
|
-
|
|
159
|
+
let afterId: ObjectID | null = null;
|
|
160
|
+
|
|
161
|
+
while (true) {
|
|
162
|
+
const openIncidents: Array<Incident> = await this.findOpenIncidents({
|
|
137
163
|
projectId: projectId,
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
},
|
|
143
|
-
limit: LIMIT_MAX,
|
|
144
|
-
skip: 0,
|
|
145
|
-
props: {
|
|
146
|
-
isRoot: true,
|
|
147
|
-
},
|
|
148
|
-
});
|
|
164
|
+
unresolvedStateIds: unresolvedStateIds,
|
|
165
|
+
onlyWithoutNextReminder: onlyWithoutNextReminder,
|
|
166
|
+
afterId: afterId,
|
|
167
|
+
});
|
|
149
168
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
169
|
+
for (const incident of openIncidents) {
|
|
170
|
+
try {
|
|
171
|
+
await IncidentService.refreshReminderSchedule({
|
|
172
|
+
incidentId: incident.id!,
|
|
173
|
+
projectId: projectId,
|
|
174
|
+
});
|
|
175
|
+
} catch (error) {
|
|
176
|
+
logger.error(
|
|
177
|
+
`Failed to refresh reminder schedule for incident ${incident.id}: ${error}`,
|
|
178
|
+
{ projectId: projectId?.toString() } as LogAttributes,
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Without the option, the one read above is all there is.
|
|
184
|
+
if (!onlyWithoutNextReminder || openIncidents.length < LIMIT_MAX) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const lastId: ObjectID | null =
|
|
189
|
+
openIncidents[openIncidents.length - 1]!.id;
|
|
190
|
+
|
|
191
|
+
if (!lastId || (afterId && lastId.toString() <= afterId.toString())) {
|
|
192
|
+
/*
|
|
193
|
+
* A full page whose last row does not move the cursor forward
|
|
194
|
+
* would be read again forever. Not reachable with `_id ASC` and a
|
|
195
|
+
* `> afterId` filter; guarded so a broken sort cannot hang the
|
|
196
|
+
* backfill.
|
|
197
|
+
*/
|
|
198
|
+
throw new Error(
|
|
199
|
+
"the open incident page did not advance its _id cursor",
|
|
160
200
|
);
|
|
161
201
|
}
|
|
202
|
+
|
|
203
|
+
afterId = lastId;
|
|
162
204
|
}
|
|
163
205
|
} catch (error) {
|
|
164
206
|
logger.error(
|
|
@@ -168,6 +210,44 @@ export class Service extends DatabaseService<Model> {
|
|
|
168
210
|
}
|
|
169
211
|
}
|
|
170
212
|
|
|
213
|
+
/*
|
|
214
|
+
* One read of the project's open incidents: those whose current state is one
|
|
215
|
+
* of `unresolvedStateIds`. Both paths of refreshSchedulesForOpenIncidents
|
|
216
|
+
* read through here, so what "open" means is written once.
|
|
217
|
+
*
|
|
218
|
+
* With `onlyWithoutNextReminder`, only those with no reminder scheduled,
|
|
219
|
+
* `_id` ascending and after `afterId` when there is one. Without it, no
|
|
220
|
+
* cursor and the default order: the read the rule hooks have always made.
|
|
221
|
+
*/
|
|
222
|
+
private async findOpenIncidents(data: {
|
|
223
|
+
projectId: ObjectID;
|
|
224
|
+
unresolvedStateIds: Array<ObjectID>;
|
|
225
|
+
onlyWithoutNextReminder: boolean;
|
|
226
|
+
afterId: ObjectID | null;
|
|
227
|
+
}): Promise<Array<Incident>> {
|
|
228
|
+
return await IncidentService.findBy({
|
|
229
|
+
query: {
|
|
230
|
+
projectId: data.projectId,
|
|
231
|
+
currentIncidentStateId: QueryHelper.any(data.unresolvedStateIds),
|
|
232
|
+
...(data.onlyWithoutNextReminder
|
|
233
|
+
? { nextReminderNotificationAt: QueryHelper.isNull() }
|
|
234
|
+
: {}),
|
|
235
|
+
...(data.afterId ? { _id: QueryHelper.greaterThan(data.afterId) } : {}),
|
|
236
|
+
},
|
|
237
|
+
select: {
|
|
238
|
+
_id: true,
|
|
239
|
+
},
|
|
240
|
+
...(data.onlyWithoutNextReminder
|
|
241
|
+
? { sort: { _id: SortOrder.Ascending } }
|
|
242
|
+
: {}),
|
|
243
|
+
limit: LIMIT_MAX,
|
|
244
|
+
skip: 0,
|
|
245
|
+
props: {
|
|
246
|
+
isRoot: true,
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
|
|
171
251
|
@CaptureSpan()
|
|
172
252
|
public async findMatchingRule(data: {
|
|
173
253
|
projectId: ObjectID;
|
|
@@ -111,6 +111,10 @@ import IncidentAIContextBuilder, {
|
|
|
111
111
|
AIGenerationContext,
|
|
112
112
|
IncidentContextData,
|
|
113
113
|
} from "../Utils/AI/IncidentAIContextBuilder";
|
|
114
|
+
import IncidentAlertService, {
|
|
115
|
+
LinkAlertsToIncidentResult,
|
|
116
|
+
} from "./IncidentAlertService";
|
|
117
|
+
import { INCIDENT_ALERT_IDS_TO_LINK_KEY } from "../../Types/Incident/IncidentAlertLink";
|
|
114
118
|
|
|
115
119
|
// key is incidentId for this dictionary.
|
|
116
120
|
type UpdateCarryForward = Dictionary<{
|
|
@@ -120,6 +124,15 @@ type UpdateCarryForward = Dictionary<{
|
|
|
120
124
|
newMonitorChangeStatusIdTo: ObjectID | undefined;
|
|
121
125
|
}>;
|
|
122
126
|
|
|
127
|
+
/*
|
|
128
|
+
* What onBeforeCreate hands to onCreateSuccess. Null unless the incident is
|
|
129
|
+
* being declared from alerts.
|
|
130
|
+
*/
|
|
131
|
+
type IncidentCreateCarryForward = {
|
|
132
|
+
// Validated, deduplicated alert ids to link once the incident exists.
|
|
133
|
+
alertIdsToLink: Array<ObjectID>;
|
|
134
|
+
} | null;
|
|
135
|
+
|
|
123
136
|
type IncidentUpdatePayload = {
|
|
124
137
|
postmortemNote?: string | null;
|
|
125
138
|
title?: string | null;
|
|
@@ -783,6 +796,30 @@ export class Service extends DatabaseService<Model> {
|
|
|
783
796
|
const projectId: ObjectID =
|
|
784
797
|
createBy.props.tenantId || createBy.data.projectId!;
|
|
785
798
|
|
|
799
|
+
/*
|
|
800
|
+
* Declaring the incident from alerts. The alert ids are checked here,
|
|
801
|
+
* before the incident number is taken and before anything is written, so
|
|
802
|
+
* a bad id (a typo, another project's alert, an alert the caller cannot
|
|
803
|
+
* see, too many alerts) rejects the whole request instead of leaving an
|
|
804
|
+
* incident behind that is missing some of its alerts. The alerts are
|
|
805
|
+
* linked in onCreateSuccess, once the incident exists.
|
|
806
|
+
*/
|
|
807
|
+
let carryForward: IncidentCreateCarryForward = null;
|
|
808
|
+
|
|
809
|
+
const alertIdsToLink: unknown =
|
|
810
|
+
createBy.miscDataProps?.[INCIDENT_ALERT_IDS_TO_LINK_KEY];
|
|
811
|
+
|
|
812
|
+
if (alertIdsToLink !== undefined && alertIdsToLink !== null) {
|
|
813
|
+
carryForward = {
|
|
814
|
+
alertIdsToLink:
|
|
815
|
+
await IncidentAlertService.validateAlertIdsForNewIncident({
|
|
816
|
+
projectId: projectId,
|
|
817
|
+
alertIds: alertIdsToLink,
|
|
818
|
+
props: createBy.props,
|
|
819
|
+
}),
|
|
820
|
+
};
|
|
821
|
+
}
|
|
822
|
+
|
|
786
823
|
if (!createBy.data.declaredAt) {
|
|
787
824
|
createBy.data.declaredAt = OneUptimeDate.getCurrentDate();
|
|
788
825
|
} else {
|
|
@@ -1179,7 +1216,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
1179
1216
|
|
|
1180
1217
|
return {
|
|
1181
1218
|
createBy,
|
|
1182
|
-
carryForward:
|
|
1219
|
+
carryForward: carryForward,
|
|
1183
1220
|
};
|
|
1184
1221
|
}
|
|
1185
1222
|
|
|
@@ -1267,14 +1304,16 @@ export class Service extends DatabaseService<Model> {
|
|
|
1267
1304
|
*/
|
|
1268
1305
|
let aiInvestigationEnqueued: boolean = false;
|
|
1269
1306
|
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1307
|
+
/*
|
|
1308
|
+
* Apply privacy rules BEFORE workspace operations so the workspace
|
|
1309
|
+
* channel is created with the correct privacy setting. This may set
|
|
1310
|
+
* createdItem.isPrivate=true in memory. Kept as its own promise (it never
|
|
1311
|
+
* rejects) so declaring from alerts can wait for it before linking: the
|
|
1312
|
+
* links' feed entries leave out a private incident's title, so they must
|
|
1313
|
+
* see the privacy the rules settle on.
|
|
1314
|
+
*/
|
|
1315
|
+
const privacyRulesApplied: Promise<void> = Promise.resolve().then(
|
|
1316
|
+
async () => {
|
|
1278
1317
|
try {
|
|
1279
1318
|
await IncidentPrivacyRuleEngineService.applyRulesToIncident(
|
|
1280
1319
|
createdItem,
|
|
@@ -1288,7 +1327,11 @@ export class Service extends DatabaseService<Model> {
|
|
|
1288
1327
|
} as LogAttributes,
|
|
1289
1328
|
);
|
|
1290
1329
|
}
|
|
1291
|
-
}
|
|
1330
|
+
},
|
|
1331
|
+
);
|
|
1332
|
+
|
|
1333
|
+
// Execute operations sequentially with error handling
|
|
1334
|
+
privacyRulesApplied
|
|
1292
1335
|
.then(async () => {
|
|
1293
1336
|
try {
|
|
1294
1337
|
if (createdItem.projectId && createdItem.id) {
|
|
@@ -1324,6 +1367,67 @@ export class Service extends DatabaseService<Model> {
|
|
|
1324
1367
|
return Promise.resolve();
|
|
1325
1368
|
}
|
|
1326
1369
|
})
|
|
1370
|
+
.then(async () => {
|
|
1371
|
+
/*
|
|
1372
|
+
* Declared from alerts: announce the alerts once, here - after
|
|
1373
|
+
* "Incident Created" and after the incident's Slack / Microsoft
|
|
1374
|
+
* Teams channels exist - rather than once per alert as each link is
|
|
1375
|
+
* written (see linkAlertsDeclaredWithIncident). Uses the validated
|
|
1376
|
+
* ids, so it does not wait for the links.
|
|
1377
|
+
*/
|
|
1378
|
+
try {
|
|
1379
|
+
const alertIds: Array<ObjectID> =
|
|
1380
|
+
this.getAlertIdsDeclaredWith(onCreate);
|
|
1381
|
+
|
|
1382
|
+
if (alertIds.length > 0) {
|
|
1383
|
+
await IncidentAlertService.createDeclaredFromAlertsFeedItem({
|
|
1384
|
+
projectId: createdItem.projectId!,
|
|
1385
|
+
incidentId: createdItem.id!,
|
|
1386
|
+
alertIds: alertIds,
|
|
1387
|
+
actorUserId: this.getDeclaringUserId(onCreate, createdItem),
|
|
1388
|
+
});
|
|
1389
|
+
}
|
|
1390
|
+
} catch (error) {
|
|
1391
|
+
logger.error(
|
|
1392
|
+
`Announcing the alerts an incident was declared from failed in IncidentService.onCreateSuccess: ${error}`,
|
|
1393
|
+
{
|
|
1394
|
+
projectId: createdItem.projectId?.toString(),
|
|
1395
|
+
incidentId: createdItem.id?.toString(),
|
|
1396
|
+
} as LogAttributes,
|
|
1397
|
+
);
|
|
1398
|
+
}
|
|
1399
|
+
})
|
|
1400
|
+
.then(async () => {
|
|
1401
|
+
/*
|
|
1402
|
+
* A private incident declared from alerts - private from the form or
|
|
1403
|
+
* made private by a privacy rule above - gets the alerts' owners as
|
|
1404
|
+
* its owners, so the people who could see the alerts can see the
|
|
1405
|
+
* incident. Here rather than before the request returns: the owners'
|
|
1406
|
+
* own hooks invite them to the incident's Slack / Microsoft Teams
|
|
1407
|
+
* channels, which exist only from the workspace step above, and their
|
|
1408
|
+
* "owner added" entries belong after "Incident Created".
|
|
1409
|
+
*/
|
|
1410
|
+
try {
|
|
1411
|
+
const alertIds: Array<ObjectID> =
|
|
1412
|
+
this.getAlertIdsDeclaredWith(onCreate);
|
|
1413
|
+
|
|
1414
|
+
if (alertIds.length > 0 && createdItem.isPrivate === true) {
|
|
1415
|
+
await IncidentAlertService.copyAlertOwnersToIncident({
|
|
1416
|
+
projectId: createdItem.projectId!,
|
|
1417
|
+
incidentId: createdItem.id!,
|
|
1418
|
+
alertIds: alertIds,
|
|
1419
|
+
});
|
|
1420
|
+
}
|
|
1421
|
+
} catch (error) {
|
|
1422
|
+
logger.error(
|
|
1423
|
+
`Adding the owners of the alerts a private incident was declared from failed in IncidentService.onCreateSuccess: ${error}`,
|
|
1424
|
+
{
|
|
1425
|
+
projectId: createdItem.projectId?.toString(),
|
|
1426
|
+
incidentId: createdItem.id?.toString(),
|
|
1427
|
+
} as LogAttributes,
|
|
1428
|
+
);
|
|
1429
|
+
}
|
|
1430
|
+
})
|
|
1327
1431
|
.then(async () => {
|
|
1328
1432
|
try {
|
|
1329
1433
|
return await this.handleIncidentStateChangeAsync(createdItem);
|
|
@@ -1623,9 +1727,105 @@ export class Service extends DatabaseService<Model> {
|
|
|
1623
1727
|
);
|
|
1624
1728
|
});
|
|
1625
1729
|
|
|
1730
|
+
await this.linkAlertsDeclaredWithIncident(
|
|
1731
|
+
onCreate,
|
|
1732
|
+
createdItem,
|
|
1733
|
+
privacyRulesApplied,
|
|
1734
|
+
);
|
|
1735
|
+
|
|
1626
1736
|
return createdItem;
|
|
1627
1737
|
}
|
|
1628
1738
|
|
|
1739
|
+
// The validated alert ids an incident is being declared from, if any.
|
|
1740
|
+
private getAlertIdsDeclaredWith(onCreate: OnCreate<Model>): Array<ObjectID> {
|
|
1741
|
+
const carryForward: IncidentCreateCarryForward =
|
|
1742
|
+
(onCreate.carryForward as IncidentCreateCarryForward) || null;
|
|
1743
|
+
|
|
1744
|
+
return carryForward?.alertIdsToLink || [];
|
|
1745
|
+
}
|
|
1746
|
+
|
|
1747
|
+
/*
|
|
1748
|
+
* Who declared the incident, as "Linked by" on the links and the actor of
|
|
1749
|
+
* their feed entries. A user is recorded as themselves and an API key as
|
|
1750
|
+
* nobody: Incident.createdByUserId is writable by the create payload, and
|
|
1751
|
+
* an API key must not be able to name somebody else as the one who linked
|
|
1752
|
+
* the alerts (IncidentAlertService.onBeforeCreate applies the same rule to
|
|
1753
|
+
* a link created directly). Only an internal root caller is trusted to
|
|
1754
|
+
* name the incident's creator.
|
|
1755
|
+
*/
|
|
1756
|
+
private getDeclaringUserId(
|
|
1757
|
+
onCreate: OnCreate<Model>,
|
|
1758
|
+
createdItem: Model,
|
|
1759
|
+
): ObjectID | undefined {
|
|
1760
|
+
if (onCreate.createBy.props.isRoot) {
|
|
1761
|
+
return createdItem.createdByUserId || undefined;
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1764
|
+
return onCreate.createBy.props.userId || undefined;
|
|
1765
|
+
}
|
|
1766
|
+
|
|
1767
|
+
/*
|
|
1768
|
+
* The incident was declared from alerts (see onBeforeCreate): link them now
|
|
1769
|
+
* that it exists. Awaited, unlike the chain above, so the incident page the
|
|
1770
|
+
* user lands on already lists its alerts. Written as root because the
|
|
1771
|
+
* caller's right to link them was checked before the incident was created;
|
|
1772
|
+
* the user who declared the incident is recorded as the one who linked
|
|
1773
|
+
* them. The links write no incident-side feed entries: the chain above
|
|
1774
|
+
* posts one "Declared from N alerts" entry instead. A link that fails is
|
|
1775
|
+
* logged and never fails the incident.
|
|
1776
|
+
*
|
|
1777
|
+
* The privacy rules run first: each link's entry on its alert leaves out
|
|
1778
|
+
* the incident's title when the incident is private, and a rule can make
|
|
1779
|
+
* it private after it was saved. (The alerts' owners are added to a private
|
|
1780
|
+
* incident later in the chain, once its workspace channels exist.)
|
|
1781
|
+
*/
|
|
1782
|
+
@CaptureSpan()
|
|
1783
|
+
private async linkAlertsDeclaredWithIncident(
|
|
1784
|
+
onCreate: OnCreate<Model>,
|
|
1785
|
+
createdItem: Model,
|
|
1786
|
+
privacyRulesApplied: Promise<void>,
|
|
1787
|
+
): Promise<void> {
|
|
1788
|
+
const alertIds: Array<ObjectID> = this.getAlertIdsDeclaredWith(onCreate);
|
|
1789
|
+
|
|
1790
|
+
if (alertIds.length === 0 || !createdItem.projectId || !createdItem.id) {
|
|
1791
|
+
return;
|
|
1792
|
+
}
|
|
1793
|
+
|
|
1794
|
+
await privacyRulesApplied;
|
|
1795
|
+
|
|
1796
|
+
try {
|
|
1797
|
+
const result: LinkAlertsToIncidentResult =
|
|
1798
|
+
await IncidentAlertService.linkAlertsToIncident({
|
|
1799
|
+
projectId: createdItem.projectId,
|
|
1800
|
+
incidentId: createdItem.id,
|
|
1801
|
+
alertIds: alertIds,
|
|
1802
|
+
createdByUserId: this.getDeclaringUserId(onCreate, createdItem),
|
|
1803
|
+
declaredWithIncident: true,
|
|
1804
|
+
props: {
|
|
1805
|
+
isRoot: true,
|
|
1806
|
+
},
|
|
1807
|
+
});
|
|
1808
|
+
|
|
1809
|
+
if (result.failed.length > 0) {
|
|
1810
|
+
logger.error(
|
|
1811
|
+
`${result.failed.length} of ${alertIds.length} alerts could not be linked to the incident they were declared with.`,
|
|
1812
|
+
{
|
|
1813
|
+
projectId: createdItem.projectId.toString(),
|
|
1814
|
+
incidentId: createdItem.id.toString(),
|
|
1815
|
+
} as LogAttributes,
|
|
1816
|
+
);
|
|
1817
|
+
}
|
|
1818
|
+
} catch (error) {
|
|
1819
|
+
logger.error(
|
|
1820
|
+
`Linking the alerts an incident was declared from failed in IncidentService.onCreateSuccess: ${error}`,
|
|
1821
|
+
{
|
|
1822
|
+
projectId: createdItem.projectId.toString(),
|
|
1823
|
+
incidentId: createdItem.id.toString(),
|
|
1824
|
+
} as LogAttributes,
|
|
1825
|
+
);
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
|
|
1629
1829
|
@CaptureSpan()
|
|
1630
1830
|
private async handleIncidentWorkspaceOperationsAsync(
|
|
1631
1831
|
createdItem: Model,
|
|
@@ -37,6 +37,7 @@ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
|
37
37
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
38
38
|
import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
|
|
39
39
|
import Semaphore, { SemaphoreMutex } from "../Infrastructure/Semaphore";
|
|
40
|
+
import IncidentAlertService from "./IncidentAlertService";
|
|
40
41
|
|
|
41
42
|
export class Service extends DatabaseService<IncidentStateTimeline> {
|
|
42
43
|
public constructor() {
|
|
@@ -485,6 +486,29 @@ export class Service extends DatabaseService<IncidentStateTimeline> {
|
|
|
485
486
|
}
|
|
486
487
|
}
|
|
487
488
|
|
|
489
|
+
/*
|
|
490
|
+
* Carry the incident's new state over to its linked alerts, when the
|
|
491
|
+
* project has opted in (acknowledge and/or resolve them with the
|
|
492
|
+
* incident). Only for the incident's current state - a back-dated row has
|
|
493
|
+
* an endsAt - and after the mutex is released, since it writes alert
|
|
494
|
+
* timelines. Fire-and-forget: it never fails or delays the state change.
|
|
495
|
+
*/
|
|
496
|
+
if (!createdItem.endsAt && createdItem.projectId) {
|
|
497
|
+
IncidentAlertService.cascadeIncidentStateToLinkedAlerts({
|
|
498
|
+
projectId: createdItem.projectId,
|
|
499
|
+
incidentId: createdItem.incidentId,
|
|
500
|
+
incidentStateId: createdItem.incidentStateId,
|
|
501
|
+
}).catch((error: Error) => {
|
|
502
|
+
logger.error(
|
|
503
|
+
`Error while carrying the incident state over to linked alerts: ${error}`,
|
|
504
|
+
{
|
|
505
|
+
projectId: createdItem.projectId?.toString(),
|
|
506
|
+
incidentId: createdItem.incidentId?.toString(),
|
|
507
|
+
} as LogAttributes,
|
|
508
|
+
);
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
|
|
488
512
|
const stateName: string = incidentState?.name || "";
|
|
489
513
|
let stateEmoji: string = "➡️";
|
|
490
514
|
|
package/Server/Services/Index.ts
CHANGED
|
@@ -106,6 +106,12 @@ import VMwareVCenterOwnerRuleService from "./VMwareVCenterOwnerRuleService";
|
|
|
106
106
|
import VMwareVCenterOwnerTeamService from "./VMwareVCenterOwnerTeamService";
|
|
107
107
|
import VMwareVCenterOwnerUserService from "./VMwareVCenterOwnerUserService";
|
|
108
108
|
import CephClusterOwnerUserService from "./CephClusterOwnerUserService";
|
|
109
|
+
import DatabaseServerService from "./DatabaseServerService";
|
|
110
|
+
import DatabaseServerEndpointService from "./DatabaseServerEndpointService";
|
|
111
|
+
import DatabaseServerLabelRuleService from "./DatabaseServerLabelRuleService";
|
|
112
|
+
import DatabaseServerOwnerRuleService from "./DatabaseServerOwnerRuleService";
|
|
113
|
+
import DatabaseServerOwnerTeamService from "./DatabaseServerOwnerTeamService";
|
|
114
|
+
import DatabaseServerOwnerUserService from "./DatabaseServerOwnerUserService";
|
|
109
115
|
import LlmProviderService from "./LlmProviderService";
|
|
110
116
|
import DataSourceService from "./DataSourceService";
|
|
111
117
|
import AuditLogService from "./AuditLogService";
|
|
@@ -150,6 +156,7 @@ import KubernetesClusterFeedService from "./KubernetesClusterFeedService";
|
|
|
150
156
|
import DockerHostFeedService from "./DockerHostFeedService";
|
|
151
157
|
import DockerSwarmClusterFeedService from "./DockerSwarmClusterFeedService";
|
|
152
158
|
import CephClusterFeedService from "./CephClusterFeedService";
|
|
159
|
+
import DatabaseServerFeedService from "./DatabaseServerFeedService";
|
|
153
160
|
import PodmanHostFeedService from "./PodmanHostFeedService";
|
|
154
161
|
import ProxmoxClusterFeedService from "./ProxmoxClusterFeedService";
|
|
155
162
|
import VMwareVCenterFeedService from "./VMwareVCenterFeedService";
|
|
@@ -291,6 +298,7 @@ import UserOnCallLogService from "./UserOnCallLogService";
|
|
|
291
298
|
import UserOnCallLogTimelineService from "./UserOnCallLogTimelineService";
|
|
292
299
|
import UserService from "./UserService";
|
|
293
300
|
import UserSessionService from "./UserSessionService";
|
|
301
|
+
import UserProjectSsoConsentService from "./UserProjectSsoConsentService";
|
|
294
302
|
import UserTotpAuthService from "./UserTotpAuthService";
|
|
295
303
|
import UserTwoFactorBackupCodeService from "./UserTwoFactorBackupCodeService";
|
|
296
304
|
import UserWebAuthnService from "./UserWebAuthnService";
|
|
@@ -361,6 +369,7 @@ import IncidentEpisodeLabelRuleService from "./IncidentEpisodeLabelRuleService";
|
|
|
361
369
|
import IncidentEpisodeFeedService from "./IncidentEpisodeFeedService";
|
|
362
370
|
import IncidentEpisodeInternalNoteService from "./IncidentEpisodeInternalNoteService";
|
|
363
371
|
import IncidentEpisodeMemberService from "./IncidentEpisodeMemberService";
|
|
372
|
+
import IncidentAlertService from "./IncidentAlertService";
|
|
364
373
|
import IncidentEpisodeRoleMemberService from "./IncidentEpisodeRoleMemberService";
|
|
365
374
|
import IncidentEpisodeOwnerTeamService from "./IncidentEpisodeOwnerTeamService";
|
|
366
375
|
import IncidentEpisodeOwnerRuleService from "./IncidentEpisodeOwnerRuleService";
|
|
@@ -572,6 +581,12 @@ const services: Array<BaseService> = [
|
|
|
572
581
|
VMwareVCenterOwnerRuleService,
|
|
573
582
|
VMwareVCenterOwnerTeamService,
|
|
574
583
|
VMwareVCenterOwnerUserService,
|
|
584
|
+
DatabaseServerService,
|
|
585
|
+
DatabaseServerEndpointService,
|
|
586
|
+
DatabaseServerLabelRuleService,
|
|
587
|
+
DatabaseServerOwnerRuleService,
|
|
588
|
+
DatabaseServerOwnerTeamService,
|
|
589
|
+
DatabaseServerOwnerUserService,
|
|
575
590
|
LlmProviderService,
|
|
576
591
|
DataSourceService,
|
|
577
592
|
|
|
@@ -599,6 +614,7 @@ const services: Array<BaseService> = [
|
|
|
599
614
|
DockerHostFeedService,
|
|
600
615
|
DockerSwarmClusterFeedService,
|
|
601
616
|
CephClusterFeedService,
|
|
617
|
+
DatabaseServerFeedService,
|
|
602
618
|
PodmanHostFeedService,
|
|
603
619
|
ProxmoxClusterFeedService,
|
|
604
620
|
VMwareVCenterFeedService,
|
|
@@ -690,6 +706,7 @@ const services: Array<BaseService> = [
|
|
|
690
706
|
|
|
691
707
|
UserService,
|
|
692
708
|
UserSessionService,
|
|
709
|
+
UserProjectSsoConsentService,
|
|
693
710
|
UserCallService,
|
|
694
711
|
UserEmailService,
|
|
695
712
|
UserNotificationRuleService,
|
|
@@ -797,6 +814,7 @@ const services: Array<BaseService> = [
|
|
|
797
814
|
IncidentEpisodeFeedService,
|
|
798
815
|
IncidentEpisodeInternalNoteService,
|
|
799
816
|
IncidentEpisodeMemberService,
|
|
817
|
+
IncidentAlertService,
|
|
800
818
|
IncidentEpisodeRoleMemberService,
|
|
801
819
|
IncidentEpisodeOwnerTeamService,
|
|
802
820
|
IncidentEpisodeOwnerRuleService,
|
|
@@ -31,6 +31,11 @@ import {
|
|
|
31
31
|
shouldWarnEntityBudgetOnce,
|
|
32
32
|
} from "../Utils/Telemetry/EntityRegistry";
|
|
33
33
|
|
|
34
|
+
// A database node's port, as its calls named it (deriveDatabaseDisplayName).
|
|
35
|
+
const PORT_REGEX: RegExp = /^\d{1,5}$/;
|
|
36
|
+
// A bare IPv6 address - bracketed before a port.
|
|
37
|
+
const IPV6_LITERAL_REGEX: RegExp = /^[0-9a-f:.]+$/i;
|
|
38
|
+
|
|
34
39
|
export class InventoryItemService extends DatabaseService<Model> {
|
|
35
40
|
public constructor() {
|
|
36
41
|
super(Model);
|
|
@@ -427,6 +432,39 @@ export class InventoryItemService extends DatabaseService<Model> {
|
|
|
427
432
|
}
|
|
428
433
|
}
|
|
429
434
|
|
|
435
|
+
/*
|
|
436
|
+
* A database dependency node named by the old rule - its bare namespace,
|
|
437
|
+
* "orders" for every Postgres a project calls - is renamed to
|
|
438
|
+
* "<namespace> @ <server>" the next time it is seen. Same guard as above:
|
|
439
|
+
* only a name this service generated is replaced, never one a person
|
|
440
|
+
* typed, and a later sighting that cannot name the port does not undo a
|
|
441
|
+
* name that has it.
|
|
442
|
+
*/
|
|
443
|
+
if (entity.entityType === EntityType.Database) {
|
|
444
|
+
const desiredDisplayName: string =
|
|
445
|
+
InventoryItemService.deriveDatabaseDisplayName(entity).substring(
|
|
446
|
+
0,
|
|
447
|
+
ColumnLength.ShortText,
|
|
448
|
+
);
|
|
449
|
+
const existingDisplayName: string = existing.displayName || "";
|
|
450
|
+
const generatedBefore: Array<string> = [
|
|
451
|
+
InventoryItemService.deriveLegacyDatabaseDisplayName(entity),
|
|
452
|
+
InventoryItemService.deriveDatabaseDisplayName(entity, {
|
|
453
|
+
withPort: false,
|
|
454
|
+
}),
|
|
455
|
+
].map((name: string): string => {
|
|
456
|
+
return name.substring(0, ColumnLength.ShortText);
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
if (
|
|
460
|
+
desiredDisplayName &&
|
|
461
|
+
existingDisplayName !== desiredDisplayName &&
|
|
462
|
+
(!existingDisplayName || generatedBefore.includes(existingDisplayName))
|
|
463
|
+
) {
|
|
464
|
+
update.displayName = desiredDisplayName;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
430
468
|
const incoming: Record<string, string> = entity.descriptiveAttributes || {};
|
|
431
469
|
if (Object.keys(incoming).length > 0) {
|
|
432
470
|
const current: Record<string, unknown> =
|
|
@@ -498,6 +536,13 @@ export class InventoryItemService extends DatabaseService<Model> {
|
|
|
498
536
|
}
|
|
499
537
|
}
|
|
500
538
|
|
|
539
|
+
if (entity.entityType === EntityType.Database) {
|
|
540
|
+
const databaseName: string = this.deriveDatabaseDisplayName(entity);
|
|
541
|
+
if (databaseName) {
|
|
542
|
+
return databaseName;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
|
|
501
546
|
for (const key of this.dependencyDisplayNameOrderByType[
|
|
502
547
|
entity.entityType
|
|
503
548
|
] || []) {
|
|
@@ -509,13 +554,76 @@ export class InventoryItemService extends DatabaseService<Model> {
|
|
|
509
554
|
return this.deriveFallbackDisplayName(entity);
|
|
510
555
|
}
|
|
511
556
|
|
|
557
|
+
/*
|
|
558
|
+
* A database dependency node is named after the logical database AND the
|
|
559
|
+
* server it lives on: "<db.namespace> @ <host[:port]>". The namespace alone
|
|
560
|
+
* ("orders") is shared by every copy of an application's schema - an e2e
|
|
561
|
+
* project showed ten different PostgreSQL servers all named "orders" on
|
|
562
|
+
* the Service Map and in Inventory. The host is the node's identifying
|
|
563
|
+
* `server.address`; the port is the descriptive `server.port` its calls
|
|
564
|
+
* named (left off when they named none, or several). Only the name
|
|
565
|
+
* changes: the node's identity (engine, host, namespace) does not.
|
|
566
|
+
* Without a namespace it is the server alone, without a host the
|
|
567
|
+
* namespace, and with neither the engine. '' when nothing names it.
|
|
568
|
+
*/
|
|
569
|
+
public static deriveDatabaseDisplayName(
|
|
570
|
+
entity: ExtractedEntity,
|
|
571
|
+
options?: { withPort?: boolean | undefined },
|
|
572
|
+
): string {
|
|
573
|
+
const id: Record<string, string> = entity.identifyingAttributes || {};
|
|
574
|
+
const descriptive: Record<string, string> =
|
|
575
|
+
entity.descriptiveAttributes || {};
|
|
576
|
+
|
|
577
|
+
const namespace: string = (id["db.namespace"] || "").trim();
|
|
578
|
+
const host: string = (id["server.address"] || "").trim();
|
|
579
|
+
const port: string = (descriptive["server.port"] || "").trim();
|
|
580
|
+
|
|
581
|
+
let server: string = host;
|
|
582
|
+
if (host && options?.withPort !== false && PORT_REGEX.test(port)) {
|
|
583
|
+
if (!host.includes(":")) {
|
|
584
|
+
server = `${host}:${port}`;
|
|
585
|
+
} else if (IPV6_LITERAL_REGEX.test(host)) {
|
|
586
|
+
// A bare IPv6 address takes brackets before a port.
|
|
587
|
+
server = `[${host}]:${port}`;
|
|
588
|
+
}
|
|
589
|
+
// Anything else with a colon (a host list) already names its ports.
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
if (namespace && server) {
|
|
593
|
+
return `${namespace} @ ${server}`;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
return server || namespace || (id["db.system.name"] || "").trim();
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/*
|
|
600
|
+
* What deriveDisplayName named a database node before it named the server
|
|
601
|
+
* too: the first of namespace, host, engine. Only a row still carrying
|
|
602
|
+
* this (or the port-less new name) is renamed - see buildDescriptiveUpdate.
|
|
603
|
+
*/
|
|
604
|
+
private static deriveLegacyDatabaseDisplayName(
|
|
605
|
+
entity: ExtractedEntity,
|
|
606
|
+
): string {
|
|
607
|
+
const id: Record<string, string> = entity.identifyingAttributes || {};
|
|
608
|
+
|
|
609
|
+
for (const key of this.dependencyDisplayNameOrderByType[
|
|
610
|
+
EntityType.Database
|
|
611
|
+
] || []) {
|
|
612
|
+
if (id[key]) {
|
|
613
|
+
return id[key]!;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
return this.deriveFallbackDisplayName(entity);
|
|
618
|
+
}
|
|
619
|
+
|
|
512
620
|
/*
|
|
513
621
|
* Dependency endpoints have composite identities in which the most
|
|
514
|
-
* recognisable part is not a `*.name` key
|
|
515
|
-
*
|
|
516
|
-
*
|
|
517
|
-
*
|
|
518
|
-
* them, then their host.
|
|
622
|
+
* recognisable part is not a `*.name` key. A database is named by
|
|
623
|
+
* deriveDatabaseDisplayName; its order here is the old rule (namespace,
|
|
624
|
+
* then host, then engine), which deriveLegacyDatabaseDisplayName reads to
|
|
625
|
+
* recognise the names it generated. Remote endpoints read best as the
|
|
626
|
+
* service name their callers gave them, then their host.
|
|
519
627
|
*/
|
|
520
628
|
private static readonly dependencyDisplayNameOrderByType: Partial<
|
|
521
629
|
Record<EntityType, Array<string>>
|