@oneuptime/common 14.0.3 → 14.0.6
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/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/Index.ts +16 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +26 -0
- 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/1795000000000-AddDatabaseServerTables.ts +673 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -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/IncidentReminderRuleService.ts +103 -23
- package/Server/Services/Index.ts +16 -0
- package/Server/Services/InventoryItemService.ts +113 -5
- package/Server/Services/IoTDeviceService.ts +145 -37
- package/Server/Services/MetricService.ts +1 -1
- 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 +84 -2
- package/Server/Utils/AI/Toolbox/MetricTools.ts +13 -2
- package/Server/Utils/AI/Toolbox/ResourceTools.ts +81 -2
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +1 -1
- package/Server/Utils/Database/AffectedResourceRelations.ts +6 -0
- package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +33 -0
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +192 -9
- package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +2264 -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/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/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/EventOverlayScope.test.ts +147 -0
- package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +1 -0
- package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +1 -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/NetworkTopologyExplorerSearch.test.tsx +1267 -0
- package/Tests/App/Dashboard/ProductOrientation.test.tsx +4 -3
- 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 +4 -1
- package/Tests/App/Dashboard/RumOverviewPage.test.tsx +127 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +2 -0
- package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +1085 -0
- package/Tests/App/Dashboard/SiteSearchBox.test.tsx +2110 -0
- package/Tests/App/Dashboard/TelemetryMetricsSignals.test.ts +168 -8
- package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +10 -0
- package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +2 -1
- 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/ResourceFeedModels.test.ts +24 -5
- 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/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/IncidentAlertSloLinkSurvivesEdit.test.ts +2 -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/MetricServiceAggregate.test.ts +12 -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/SavedViewDefaults.test.ts +325 -0
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
- package/Tests/Server/Services/StatusPageCertificateService.test.ts +169 -0
- package/Tests/Server/Services/TeamComplianceSettingService.test.ts +191 -0
- 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/Types/Database/QueryHelperSearchAllWords.test.ts +651 -0
- package/Tests/Server/Utils/AI/AlertWriteTools.test.ts +256 -0
- package/Tests/Server/Utils/AI/IncidentWriteTools.test.ts +482 -0
- package/Tests/Server/Utils/AI/ResourceTools.test.ts +134 -0
- package/Tests/Server/Utils/Monitor/Criteria/CompareCriteria.test.ts +54 -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/MetricDecimalThreshold.test.ts +417 -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 +1815 -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/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/BaseDatabase/AggregationType.test.ts +5 -1
- package/Tests/Types/Dashboard/KubernetesDashboardTemplate.test.ts +184 -0
- package/Tests/Types/Dashboard/KubernetesDashboardTemplates.test.ts +107 -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 +292 -0
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +272 -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 +202 -0
- package/Tests/Types/NetworkDevice/DiscoveredHostNamingStatus.test.ts +401 -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/ForeignHiddenRuleResilience.test.tsx +1147 -0
- package/Tests/UI/Components/HeaderRightRail.test.tsx +41 -1
- package/Tests/UI/Components/LogsEntityNames.test.ts +16 -1
- package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +7 -3
- 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/TelemetryFacetSidebarHiddenFacets.test.tsx +4 -1
- package/Tests/UI/ForeignHiddenRuleGuard.test.ts +1951 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +76 -0
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +19 -1
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +53 -0
- package/Tests/UI/Rum/ReplaySignals.test.ts +54 -0
- package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +19 -1
- package/Tests/UI/TailwindPlayCdnForeignHiddenRule.test.ts +1005 -0
- package/Tests/UI/ThemeGroupHoverReveal.test.ts +847 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +70 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +21 -0
- package/Tests/UI/Utils/ModelAPISsoRedirect.test.ts +127 -0
- package/Tests/UI/Utils/Navigation.test.ts +102 -0
- package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +23 -0
- package/Tests/Utils/Dashboard/KubernetesClusterCpuTileRepair.test.ts +370 -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/Rules/MonitorTypeRuleCriteria.test.ts +181 -0
- package/Tests/Utils/ValueFormatter.test.ts +50 -0
- package/Tests/tsconfig.json +16 -0
- package/Types/AI/AIResourceContext.ts +7 -0
- package/Types/BaseDatabase/AggregationType.ts +7 -0
- package/Types/Dashboard/DashboardTemplates.ts +22 -8
- 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/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 +267 -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/SessionReplayCustomEvents.ts +29 -3
- package/Types/Rum/WebVitals.ts +13 -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/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/Input/Input.tsx +11 -0
- 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 +4 -4
- 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/TelemetryViewer/components/TelemetryFacetSidebar.tsx +1 -1
- package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +1 -1
- 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/Telemetry/TelemetryEntityNames.ts +7 -0
- package/UI/Utils/TelemetryService.ts +4 -3
- package/Utils/Dashboard/KubernetesClusterCpuTileRepair.ts +147 -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/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/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/Index.js +16 -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/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/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 +4 -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/IncidentReminderRuleService.js +73 -23
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +16 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemService.js +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/MetricService.js +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 +73 -2
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js +13 -2
- package/build/dist/Server/Utils/AI/Toolbox/MetricTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +58 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +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/CompareCriteria.js +31 -0
- package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +135 -14
- 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/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/BaseDatabase/AggregationType.js +7 -0
- package/build/dist/Types/BaseDatabase/AggregationType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +22 -8
- 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/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 +234 -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/SessionReplayCustomEvents.js.map +1 -1
- package/build/dist/Types/Rum/WebVitals.js +12 -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/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/Input/Input.js +1 -1
- package/build/dist/UI/Components/Input/Input.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 +4 -4
- 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/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/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/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/Dashboard/KubernetesClusterCpuTileRepair.js +110 -0
- package/build/dist/Utils/Dashboard/KubernetesClusterCpuTileRepair.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/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
|
@@ -0,0 +1,688 @@
|
|
|
1
|
+
import { SpanKind } from "../../../Models/AnalyticsModels/Span";
|
|
2
|
+
import AnalyticsTableName from "../../../Types/AnalyticsDatabase/AnalyticsTableName";
|
|
3
|
+
import {
|
|
4
|
+
DATABASE_INSTANCE_NAME_ATTRIBUTE,
|
|
5
|
+
DatabaseCallerContext,
|
|
6
|
+
DatabaseEndpoint,
|
|
7
|
+
DatabaseEndpointScope,
|
|
8
|
+
NETWORK_SCOPED_NAME_SUFFIXES,
|
|
9
|
+
buildDatabaseServerDisplayName,
|
|
10
|
+
formatDatabaseEndpoint,
|
|
11
|
+
getDatabaseClusterHost,
|
|
12
|
+
isIpLiteralHost,
|
|
13
|
+
} from "../../../Types/DatabaseServer/DatabaseEndpoint";
|
|
14
|
+
import {
|
|
15
|
+
getDatabaseSystemFamily,
|
|
16
|
+
getMoreSpecificDatabaseSystem,
|
|
17
|
+
isAutoCreatableDatabaseSystem,
|
|
18
|
+
} from "../../../Types/DatabaseServer/DatabaseSystem";
|
|
19
|
+
import {
|
|
20
|
+
DATABASE_ADDRESS_ATTRIBUTES,
|
|
21
|
+
DATABASE_PORT_ATTRIBUTES,
|
|
22
|
+
DATABASE_SYSTEM_ATTRIBUTES,
|
|
23
|
+
resolveDatabaseCallTarget,
|
|
24
|
+
} from "../../../Types/DatabaseServer/DatabaseTelemetryResolver";
|
|
25
|
+
import { DATABASE_CONNECTION_SPAN_NAMES } from "../../../Types/DatabaseServer/DatabaseConnectionSpan";
|
|
26
|
+
import {
|
|
27
|
+
CALLER_CLUSTER_ATTRIBUTE,
|
|
28
|
+
CALLER_NAMESPACE_ATTRIBUTE,
|
|
29
|
+
DatabaseCallerContextSql,
|
|
30
|
+
NON_BLANK_TEXT_PATTERN,
|
|
31
|
+
ORDINAL_SUFFIX_PATTERN,
|
|
32
|
+
PLAIN_HOST_ADDRESS_PATTERN,
|
|
33
|
+
PRIVATE_IP_ADDRESS_PATTERN,
|
|
34
|
+
QUERY_SETTINGS,
|
|
35
|
+
databaseCallerContextSql,
|
|
36
|
+
databaseInstanceSql,
|
|
37
|
+
escapeSql,
|
|
38
|
+
firstNonEmptyAttributeSql,
|
|
39
|
+
} from "./ServiceDependencyDiscovery";
|
|
40
|
+
|
|
41
|
+
// Defined beside the dependency query, which reads DB calls the same way.
|
|
42
|
+
export {
|
|
43
|
+
CALLER_CLUSTER_ATTRIBUTE,
|
|
44
|
+
CALLER_NAMESPACE_ATTRIBUTE,
|
|
45
|
+
NON_BLANK_TEXT_PATTERN,
|
|
46
|
+
ORDINAL_SUFFIX_PATTERN,
|
|
47
|
+
PLAIN_HOST_ADDRESS_PATTERN,
|
|
48
|
+
PRIVATE_IP_ADDRESS_PATTERN,
|
|
49
|
+
databaseCallerContextSql,
|
|
50
|
+
databaseInstanceSql,
|
|
51
|
+
firstNonEmptyAttributeSql,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
* Database endpoint discovery from CLIENT spans — the pure half of the
|
|
56
|
+
* client-spans step of "TelemetryEntity:ComputeServiceDependencies".
|
|
57
|
+
*
|
|
58
|
+
* Ingest already stamps every DB CLIENT span with the entity key of the
|
|
59
|
+
* database endpoint it calls (resolveDatabaseCallTarget, per row). This step
|
|
60
|
+
* turns the same evidence into DatabaseServer rows: one grouped query over
|
|
61
|
+
* the window, then the SAME resolver ingest ran (resolveDatabaseCallTarget,
|
|
62
|
+
* fed the row's grouped attributes), so the endpoint a row is found or
|
|
63
|
+
* created under is byte-for-byte the endpoint whose key the spans carry.
|
|
64
|
+
*
|
|
65
|
+
* The query selects the system / address / port / SQL Server instance with
|
|
66
|
+
* the precedence the ingest resolver uses (first attribute that is present
|
|
67
|
+
* and not '', stable semconv names first). The caller's Kubernetes context
|
|
68
|
+
* only changes the canonical endpoint of some addresses, so the query keeps
|
|
69
|
+
* it ONLY for those and groups on '' otherwise — decided on the raw address,
|
|
70
|
+
* lowercased, by databaseCallerContextSql, which the client-span dependency
|
|
71
|
+
* query shares (see it for the rules).
|
|
72
|
+
*
|
|
73
|
+
* That is what keeps the grouping bounded: a thousand pods calling
|
|
74
|
+
* `orders.cjd8.eu-west-1.rds.amazonaws.com` are ONE group, not one per pod,
|
|
75
|
+
* namespace or cluster. getDatabaseEndpointCallerContextNeeds is the
|
|
76
|
+
* predicates' TypeScript twin, and the test suite proves the reduced
|
|
77
|
+
* context canonicalizes identically — and, against a real ClickHouse, that
|
|
78
|
+
* the SQL and the twin agree.
|
|
79
|
+
*
|
|
80
|
+
* Everything here is synchronous and side-effect free apart from reading one
|
|
81
|
+
* environment variable, so it can be tested without ClickHouse or Postgres.
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
// Unique marker comment, so the query can be told apart in logs and tests.
|
|
85
|
+
export const DATABASE_ENDPOINT_SQL_MARKER: string =
|
|
86
|
+
"oneuptime:database-endpoint-discovery";
|
|
87
|
+
|
|
88
|
+
export const DATABASE_SERVER_MIN_CALLS_ENV: string =
|
|
89
|
+
"DATABASE_SERVER_MIN_CALLS";
|
|
90
|
+
export const DEFAULT_DATABASE_SERVER_MIN_CALLS: number = 10;
|
|
91
|
+
|
|
92
|
+
const PLAIN_HOST_ADDRESS_REGEX: RegExp = new RegExp(PLAIN_HOST_ADDRESS_PATTERN);
|
|
93
|
+
const PRIVATE_IP_ADDRESS_REGEX: RegExp = new RegExp(PRIVATE_IP_ADDRESS_PATTERN);
|
|
94
|
+
const UPPERCASE_ASCII_REGEX: RegExp = /[A-Z]+/g;
|
|
95
|
+
|
|
96
|
+
const SPAN_TABLE: string = `oneuptime.${AnalyticsTableName.Span}`;
|
|
97
|
+
|
|
98
|
+
// SQL over the lowercased raw address, for the row order.
|
|
99
|
+
const ADDRESS_SQL: string = "lower(serverAddress)";
|
|
100
|
+
const HOST_PART_SQL: string = `splitByChar(':', ${ADDRESS_SQL})[1]`;
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
* An IP-literal address (IPv4 host[:port], bare or bracketed IPv6). Only
|
|
104
|
+
* orders the rows — IP groups never create a database (they can only match
|
|
105
|
+
* one that owns them), so when the row cap bites, host-named groups win.
|
|
106
|
+
*/
|
|
107
|
+
const IP_LITERAL_ADDRESS_SQL: string = `(isIPv4String(${HOST_PART_SQL}) OR isIPv6String(${ADDRESS_SQL}) OR isIPv6String(extract(${ADDRESS_SQL}, '${escapeSql(
|
|
108
|
+
"^\\[([^\\]]*)\\]",
|
|
109
|
+
)}')))`;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* ClickHouse predicate: true when the span in `nameColumn` is a query, not
|
|
113
|
+
* connection management (DATABASE_CONNECTION_SPAN_NAMES, compared trimmed
|
|
114
|
+
* and lowercased, exactly as isDatabaseConnectionSpanName does). A span
|
|
115
|
+
* with no name is a query. The discovery threshold counts only these, so
|
|
116
|
+
* a pooled client's `pg-pool.connect` / `pg.connect` around every query no
|
|
117
|
+
* longer doubles its calls.
|
|
118
|
+
*/
|
|
119
|
+
export function databaseQuerySpanSql(nameColumn: string = "name"): string {
|
|
120
|
+
const names: string = DATABASE_CONNECTION_SPAN_NAMES.map(
|
|
121
|
+
(name: string): string => {
|
|
122
|
+
return `'${escapeSql(name.toLowerCase())}'`;
|
|
123
|
+
},
|
|
124
|
+
).join(", ");
|
|
125
|
+
|
|
126
|
+
return `NOT has([${names}], lower(trimBoth(ifNull(${nameColumn}, ''))))`;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export interface DatabaseEndpointQueryWindow {
|
|
130
|
+
projectId: string;
|
|
131
|
+
// ClickHouse DateTime64 expressions, e.g. toDateTime64('...', 9).
|
|
132
|
+
startSql: string;
|
|
133
|
+
endSql: string;
|
|
134
|
+
// Cap on the grouped rows returned per run.
|
|
135
|
+
maxRows: number;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/*
|
|
139
|
+
* ClickHouse serializes UInt64 aggregates as JSON strings, so callCount can
|
|
140
|
+
* arrive as a string and is Number()-coerced. callCount counts queries only
|
|
141
|
+
* (databaseQuerySpanSql): a group of nothing but connection spans comes
|
|
142
|
+
* back with 0, and still matches and sights a row that owns its endpoint.
|
|
143
|
+
*/
|
|
144
|
+
export interface DatabaseEndpointRow {
|
|
145
|
+
dbSystem?: string | undefined;
|
|
146
|
+
serverAddress?: string | undefined;
|
|
147
|
+
serverPort?: string | number | undefined;
|
|
148
|
+
// SQL Server instance named beside the address (see readDatabaseInstanceName).
|
|
149
|
+
dbInstance?: string | undefined;
|
|
150
|
+
callerNamespace?: string | undefined;
|
|
151
|
+
// 1 when the caller had a namespace, for the addresses that keep only that.
|
|
152
|
+
callerInKubernetes?: string | number | boolean | undefined;
|
|
153
|
+
callerCluster?: string | undefined;
|
|
154
|
+
callCount?: string | number | undefined;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export interface DiscoveredDatabaseEndpoint {
|
|
158
|
+
system: string;
|
|
159
|
+
endpoint: DatabaseEndpoint;
|
|
160
|
+
scope: DatabaseEndpointScope;
|
|
161
|
+
// Calls to this endpoint (and its siblings) in the window, across every row.
|
|
162
|
+
callCount: number;
|
|
163
|
+
/*
|
|
164
|
+
* The other endpoints of the same logical database seen in the window —
|
|
165
|
+
* the members of one managed cluster (getDatabaseClusterHost). They are
|
|
166
|
+
* claimed as aliases of the row `endpoint` resolves to, never rows of
|
|
167
|
+
* their own. Absent when there are none.
|
|
168
|
+
*/
|
|
169
|
+
siblings?: Array<DatabaseEndpoint> | undefined;
|
|
170
|
+
// The name a row created for a managed cluster gets (its cluster name).
|
|
171
|
+
displayName?: string | undefined;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Lowercase A-Z only, as ClickHouse `lower` does.
|
|
175
|
+
function asciiLowerCase(value: string): string {
|
|
176
|
+
return value.replace(UPPERCASE_ASCII_REGEX, (match: string): string => {
|
|
177
|
+
return match.toLowerCase();
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function hasOrdinalSuffix(label: string): boolean {
|
|
182
|
+
const dash: number = label.lastIndexOf("-");
|
|
183
|
+
if (dash < 0 || dash === label.length - 1) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
for (let index: number = dash + 1; index < label.length; index++) {
|
|
187
|
+
const code: number = label.charCodeAt(index);
|
|
188
|
+
if (code < 48 || code > 57) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Which parts of the caller's context can change the canonical endpoint of
|
|
197
|
+
* this raw address: its namespace, whether it runs in Kubernetes (the
|
|
198
|
+
* `callerInKubernetes` flag — only for plain two-label hosts, where nothing
|
|
199
|
+
* else of the namespace matters) and its cluster. The TypeScript twin of the
|
|
200
|
+
* three caller columns of buildDatabaseEndpointSql (databaseCallerContextSql)
|
|
201
|
+
* — keep them in step.
|
|
202
|
+
*/
|
|
203
|
+
export function getDatabaseEndpointCallerContextNeeds(address: string): {
|
|
204
|
+
namespace: boolean;
|
|
205
|
+
kubernetes: boolean;
|
|
206
|
+
cluster: boolean;
|
|
207
|
+
} {
|
|
208
|
+
const value: string =
|
|
209
|
+
typeof address === "string" ? asciiLowerCase(address) : "";
|
|
210
|
+
|
|
211
|
+
if (!PLAIN_HOST_ADDRESS_REGEX.test(value)) {
|
|
212
|
+
return { namespace: true, kubernetes: false, cluster: true };
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const hostPart: string = value.split(":")[0]!;
|
|
216
|
+
const labels: Array<string> = hostPart.split(".");
|
|
217
|
+
|
|
218
|
+
let networkScopedName: boolean = false;
|
|
219
|
+
for (const suffix of NETWORK_SCOPED_NAME_SUFFIXES) {
|
|
220
|
+
if (hostPart.endsWith(suffix)) {
|
|
221
|
+
networkScopedName = true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return {
|
|
226
|
+
namespace:
|
|
227
|
+
labels.length === 1 ||
|
|
228
|
+
(labels.length === 2 && hasOrdinalSuffix(labels[0]!)),
|
|
229
|
+
kubernetes: labels.length === 2,
|
|
230
|
+
cluster:
|
|
231
|
+
labels.length <= 2 ||
|
|
232
|
+
labels.includes("svc") ||
|
|
233
|
+
networkScopedName ||
|
|
234
|
+
PRIVATE_IP_ADDRESS_REGEX.test(value),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* One row per (system, address, port, instance, caller context that
|
|
240
|
+
* matters) with its call count, over the CLIENT spans of the window that
|
|
241
|
+
* name a database system and an address. Spans without those attributes are
|
|
242
|
+
* dropped on `attributeKeys` (bloom-indexed, far smaller than the attribute
|
|
243
|
+
* map) before the map is read. The call count is of queries only:
|
|
244
|
+
* connection-management spans (databaseQuerySpanSql) keep a group in the
|
|
245
|
+
* result - an existing row is still matched and sighted - but never count
|
|
246
|
+
* towards the min-calls threshold. Ordered host-named groups first, then by
|
|
247
|
+
* calls, so the endpoints that can create a database survive the row cap.
|
|
248
|
+
*/
|
|
249
|
+
export function buildDatabaseEndpointSql(
|
|
250
|
+
window: DatabaseEndpointQueryWindow,
|
|
251
|
+
): string {
|
|
252
|
+
const maxRows: number =
|
|
253
|
+
Number.isFinite(window.maxRows) && window.maxRows > 0
|
|
254
|
+
? Math.floor(window.maxRows)
|
|
255
|
+
: 1;
|
|
256
|
+
|
|
257
|
+
const keyList: (keys: ReadonlyArray<string>) => string = (
|
|
258
|
+
keys: ReadonlyArray<string>,
|
|
259
|
+
): string => {
|
|
260
|
+
return `[${keys
|
|
261
|
+
.map((key: string): string => {
|
|
262
|
+
return `'${escapeSql(key)}'`;
|
|
263
|
+
})
|
|
264
|
+
.join(", ")}]`;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const callerContext: DatabaseCallerContextSql =
|
|
268
|
+
databaseCallerContextSql("serverAddress");
|
|
269
|
+
|
|
270
|
+
return `
|
|
271
|
+
/* ${DATABASE_ENDPOINT_SQL_MARKER} */
|
|
272
|
+
SELECT
|
|
273
|
+
${firstNonEmptyAttributeSql(DATABASE_SYSTEM_ATTRIBUTES)} AS dbSystem,
|
|
274
|
+
${firstNonEmptyAttributeSql(DATABASE_ADDRESS_ATTRIBUTES)} AS serverAddress,
|
|
275
|
+
${firstNonEmptyAttributeSql(DATABASE_PORT_ATTRIBUTES)} AS serverPort,
|
|
276
|
+
${databaseInstanceSql()} AS dbInstance,
|
|
277
|
+
${callerContext.callerNamespace} AS callerNamespace,
|
|
278
|
+
${callerContext.callerInKubernetes} AS callerInKubernetes,
|
|
279
|
+
${callerContext.callerCluster} AS callerCluster,
|
|
280
|
+
countIf(${databaseQuerySpanSql()}) AS callCount
|
|
281
|
+
FROM ${SPAN_TABLE}
|
|
282
|
+
WHERE projectId = '${escapeSql(window.projectId)}'
|
|
283
|
+
AND startTime >= ${window.startSql}
|
|
284
|
+
AND startTime < ${window.endSql}
|
|
285
|
+
AND kind = '${SpanKind.Client}'
|
|
286
|
+
AND hasAny(attributeKeys, ${keyList(DATABASE_SYSTEM_ATTRIBUTES)})
|
|
287
|
+
AND hasAny(attributeKeys, ${keyList(DATABASE_ADDRESS_ATTRIBUTES)})
|
|
288
|
+
AND dbSystem != ''
|
|
289
|
+
AND serverAddress != ''
|
|
290
|
+
GROUP BY dbSystem, serverAddress, serverPort, dbInstance, callerNamespace, callerInKubernetes, callerCluster
|
|
291
|
+
ORDER BY ${IP_LITERAL_ADDRESS_SQL} ASC, callCount DESC
|
|
292
|
+
LIMIT ${maxRows}
|
|
293
|
+
${QUERY_SETTINGS}
|
|
294
|
+
`;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function toCount(value: unknown): number {
|
|
298
|
+
const parsed: number = Math.round(Number(value));
|
|
299
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function nonEmptyText(value: unknown): string | null {
|
|
303
|
+
if (typeof value !== "string") {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
const trimmed: string = value.trim();
|
|
307
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function isFlagSet(value: unknown): boolean {
|
|
311
|
+
return value === true || value === 1 || value === "1" || value === "true";
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
interface EndpointAccumulator {
|
|
315
|
+
key: string;
|
|
316
|
+
endpoint: DatabaseEndpoint;
|
|
317
|
+
scope: DatabaseEndpointScope;
|
|
318
|
+
callCount: number;
|
|
319
|
+
callsBySystem: Map<string, number>;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
interface FamilyAccumulator {
|
|
323
|
+
key: string;
|
|
324
|
+
// The managed cluster's host, for a family of cluster members.
|
|
325
|
+
clusterHost: string | null;
|
|
326
|
+
members: Array<EndpointAccumulator>;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
interface EngineFamilyCalls {
|
|
330
|
+
// The most specific engine of the family the rows named.
|
|
331
|
+
system: string;
|
|
332
|
+
// Calls of every engine of the family.
|
|
333
|
+
calls: number;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function compareSystemsByCallsThenName(
|
|
337
|
+
a: [string, number],
|
|
338
|
+
b: [string, number],
|
|
339
|
+
): number {
|
|
340
|
+
if (a[1] !== b[1]) {
|
|
341
|
+
return b[1] - a[1];
|
|
342
|
+
}
|
|
343
|
+
if (a[0] < b[0]) {
|
|
344
|
+
return -1;
|
|
345
|
+
}
|
|
346
|
+
return a[0] > b[0] ? 1 : 0;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/*
|
|
350
|
+
* The engines rows named for one endpoint, folded per engine family
|
|
351
|
+
* (getDatabaseSystemFamily). A client library cannot tell a fork from the
|
|
352
|
+
* engine it forks, so for one MariaDB server the MariaDB connector says
|
|
353
|
+
* "mariadb" while every MySQL driver says "mysql": the family's calls are
|
|
354
|
+
* one database's calls, and its engine is the most specific one named —
|
|
355
|
+
* folded with getMoreSpecificDatabaseSystem, the rule a row's engine is
|
|
356
|
+
* refined by, busiest first, so the busiest fork wins over the family and
|
|
357
|
+
* a family value never undoes a fork.
|
|
358
|
+
*/
|
|
359
|
+
function foldSystemsByFamily(
|
|
360
|
+
callsBySystem: Map<string, number>,
|
|
361
|
+
): Array<EngineFamilyCalls> {
|
|
362
|
+
const byFamily: Map<string, Array<[string, number]>> = new Map<
|
|
363
|
+
string,
|
|
364
|
+
Array<[string, number]>
|
|
365
|
+
>();
|
|
366
|
+
|
|
367
|
+
for (const entry of callsBySystem) {
|
|
368
|
+
const family: string = getDatabaseSystemFamily(entry[0]) || entry[0];
|
|
369
|
+
const members: Array<[string, number]> = byFamily.get(family) || [];
|
|
370
|
+
members.push(entry);
|
|
371
|
+
byFamily.set(family, members);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
const families: Array<EngineFamilyCalls> = [];
|
|
375
|
+
for (const members of byFamily.values()) {
|
|
376
|
+
members.sort(compareSystemsByCallsThenName);
|
|
377
|
+
|
|
378
|
+
let system: string = "";
|
|
379
|
+
let calls: number = 0;
|
|
380
|
+
for (const [memberSystem, memberCalls] of members) {
|
|
381
|
+
system =
|
|
382
|
+
getMoreSpecificDatabaseSystem(system, memberSystem) || memberSystem;
|
|
383
|
+
calls += memberCalls;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
families.push({ system: system, calls: calls });
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
return families;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/*
|
|
393
|
+
* The engine an endpoint is recorded under when rows disagree. Engines of
|
|
394
|
+
* one family are one database seen by different clients (a CockroachDB
|
|
395
|
+
* reached by some as "postgresql", a MariaDB as "mysql"), so they are
|
|
396
|
+
* folded first (foldSystemsByFamily); between families — which can only be
|
|
397
|
+
* a misreport — an engine that may create a row wins, then the family with
|
|
398
|
+
* the most calls, then the name, so the answer is stable.
|
|
399
|
+
*/
|
|
400
|
+
function pickSystem(callsBySystem: Map<string, number>): string {
|
|
401
|
+
let best: string = "";
|
|
402
|
+
let bestCreatable: boolean = false;
|
|
403
|
+
let bestCalls: number = -1;
|
|
404
|
+
|
|
405
|
+
for (const family of foldSystemsByFamily(callsBySystem)) {
|
|
406
|
+
const creatable: boolean = isAutoCreatableDatabaseSystem(family.system);
|
|
407
|
+
const better: boolean =
|
|
408
|
+
best === "" ||
|
|
409
|
+
(creatable && !bestCreatable) ||
|
|
410
|
+
(creatable === bestCreatable &&
|
|
411
|
+
(family.calls > bestCalls ||
|
|
412
|
+
(family.calls === bestCalls && family.system < best)));
|
|
413
|
+
if (better) {
|
|
414
|
+
best = family.system;
|
|
415
|
+
bestCreatable = creatable;
|
|
416
|
+
bestCalls = family.calls;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
return best;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
function compareByCallsThenKey(
|
|
424
|
+
a: { key: string; callCount: number },
|
|
425
|
+
b: { key: string; callCount: number },
|
|
426
|
+
): number {
|
|
427
|
+
if (a.callCount !== b.callCount) {
|
|
428
|
+
return b.callCount - a.callCount;
|
|
429
|
+
}
|
|
430
|
+
if (a.key < b.key) {
|
|
431
|
+
return -1;
|
|
432
|
+
}
|
|
433
|
+
return a.key > b.key ? 1 : 0;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/*
|
|
437
|
+
* The member a family is recorded under: the one reached by the cluster's
|
|
438
|
+
* own name when a client used it, else the busiest, then by endpoint.
|
|
439
|
+
*/
|
|
440
|
+
function pickPrimaryMember(family: FamilyAccumulator): EndpointAccumulator {
|
|
441
|
+
const members: Array<EndpointAccumulator> = [...family.members].sort(
|
|
442
|
+
compareByCallsThenKey,
|
|
443
|
+
);
|
|
444
|
+
if (family.clusterHost) {
|
|
445
|
+
for (const member of members) {
|
|
446
|
+
if (member.endpoint.host === family.clusterHost) {
|
|
447
|
+
return member;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
return members[0]!;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* Query rows → the unique databases they name. Each row goes through
|
|
456
|
+
* resolveDatabaseCallTarget — the ingest resolver itself — with the grouped
|
|
457
|
+
* attributes and the caller context the row kept, exactly as ingest
|
|
458
|
+
* resolved the span: loopback / host-relative / unparseable addresses
|
|
459
|
+
* resolve to nothing, and rows that land on the same formatted endpoint are
|
|
460
|
+
* merged with their calls summed. Endpoints that are members of one managed
|
|
461
|
+
* cluster (getDatabaseClusterHost) are merged into ONE entry for the
|
|
462
|
+
* cluster, recorded under one member with the others as `siblings`.
|
|
463
|
+
* Busiest first.
|
|
464
|
+
*/
|
|
465
|
+
export function resolveDatabaseEndpointRows(
|
|
466
|
+
rows: Array<DatabaseEndpointRow>,
|
|
467
|
+
): Array<DiscoveredDatabaseEndpoint> {
|
|
468
|
+
const byEndpoint: Map<string, EndpointAccumulator> = new Map<
|
|
469
|
+
string,
|
|
470
|
+
EndpointAccumulator
|
|
471
|
+
>();
|
|
472
|
+
|
|
473
|
+
for (const row of Array.isArray(rows) ? rows : []) {
|
|
474
|
+
if (!row || typeof row !== "object") {
|
|
475
|
+
continue;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
const attributes: Record<string, unknown> = {
|
|
479
|
+
[DATABASE_SYSTEM_ATTRIBUTES[0]!]: row.dbSystem,
|
|
480
|
+
[DATABASE_ADDRESS_ATTRIBUTES[0]!]: row.serverAddress,
|
|
481
|
+
[DATABASE_PORT_ATTRIBUTES[0]!]: row.serverPort,
|
|
482
|
+
[DATABASE_INSTANCE_NAME_ATTRIBUTE]: row.dbInstance,
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
const caller: DatabaseCallerContext = {
|
|
486
|
+
kubernetesNamespace: nonEmptyText(row.callerNamespace),
|
|
487
|
+
kubernetesClusterName: nonEmptyText(row.callerCluster),
|
|
488
|
+
hostName: null,
|
|
489
|
+
// Only the collector purpose reads these; a client call never does.
|
|
490
|
+
isEphemeral: true,
|
|
491
|
+
runsInKubernetes: isFlagSet(row.callerInKubernetes),
|
|
492
|
+
};
|
|
493
|
+
|
|
494
|
+
const target: {
|
|
495
|
+
system: string;
|
|
496
|
+
endpoint: DatabaseEndpoint;
|
|
497
|
+
scope: DatabaseEndpointScope;
|
|
498
|
+
} | null = resolveDatabaseCallTarget({
|
|
499
|
+
getAttribute: (key: string): unknown => {
|
|
500
|
+
return attributes[key];
|
|
501
|
+
},
|
|
502
|
+
caller: caller,
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
if (!target) {
|
|
506
|
+
continue;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
const key: string = formatDatabaseEndpoint(target.endpoint);
|
|
510
|
+
const calls: number = toCount(row.callCount);
|
|
511
|
+
|
|
512
|
+
let accumulator: EndpointAccumulator | undefined = byEndpoint.get(key);
|
|
513
|
+
if (!accumulator) {
|
|
514
|
+
accumulator = {
|
|
515
|
+
key: key,
|
|
516
|
+
endpoint: target.endpoint,
|
|
517
|
+
scope: target.scope,
|
|
518
|
+
callCount: 0,
|
|
519
|
+
callsBySystem: new Map<string, number>(),
|
|
520
|
+
};
|
|
521
|
+
byEndpoint.set(key, accumulator);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
accumulator.callCount += calls;
|
|
525
|
+
accumulator.callsBySystem.set(
|
|
526
|
+
target.system,
|
|
527
|
+
(accumulator.callsBySystem.get(target.system) || 0) + calls,
|
|
528
|
+
);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
const families: Map<string, FamilyAccumulator> = new Map<
|
|
532
|
+
string,
|
|
533
|
+
FamilyAccumulator
|
|
534
|
+
>();
|
|
535
|
+
|
|
536
|
+
for (const accumulator of byEndpoint.values()) {
|
|
537
|
+
const clusterHost: string | null = getDatabaseClusterHost(
|
|
538
|
+
accumulator.endpoint.host,
|
|
539
|
+
);
|
|
540
|
+
// The cluster's own name keys like its members, so it joins them.
|
|
541
|
+
const familyKey: string = clusterHost
|
|
542
|
+
? formatDatabaseEndpoint({
|
|
543
|
+
host: clusterHost,
|
|
544
|
+
port: accumulator.endpoint.port,
|
|
545
|
+
kubernetesClusterName: accumulator.endpoint.kubernetesClusterName,
|
|
546
|
+
})
|
|
547
|
+
: accumulator.key;
|
|
548
|
+
|
|
549
|
+
let family: FamilyAccumulator | undefined = families.get(familyKey);
|
|
550
|
+
if (!family) {
|
|
551
|
+
family = { key: familyKey, clusterHost: null, members: [] };
|
|
552
|
+
families.set(familyKey, family);
|
|
553
|
+
}
|
|
554
|
+
if (clusterHost) {
|
|
555
|
+
family.clusterHost = clusterHost;
|
|
556
|
+
}
|
|
557
|
+
family.members.push(accumulator);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
const discovered: Array<{ key: string; value: DiscoveredDatabaseEndpoint }> =
|
|
561
|
+
[];
|
|
562
|
+
|
|
563
|
+
for (const family of families.values()) {
|
|
564
|
+
const primary: EndpointAccumulator = pickPrimaryMember(family);
|
|
565
|
+
|
|
566
|
+
let callCount: number = 0;
|
|
567
|
+
const callsBySystem: Map<string, number> = new Map<string, number>();
|
|
568
|
+
for (const member of family.members) {
|
|
569
|
+
callCount += member.callCount;
|
|
570
|
+
for (const [system, calls] of member.callsBySystem) {
|
|
571
|
+
callsBySystem.set(system, (callsBySystem.get(system) || 0) + calls);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
const system: string = pickSystem(callsBySystem);
|
|
576
|
+
const value: DiscoveredDatabaseEndpoint = {
|
|
577
|
+
system: system,
|
|
578
|
+
endpoint: primary.endpoint,
|
|
579
|
+
scope: primary.scope,
|
|
580
|
+
callCount: callCount,
|
|
581
|
+
};
|
|
582
|
+
|
|
583
|
+
const siblings: Array<EndpointAccumulator> = family.members
|
|
584
|
+
.filter((member: EndpointAccumulator): boolean => {
|
|
585
|
+
return member !== primary;
|
|
586
|
+
})
|
|
587
|
+
.sort((a: EndpointAccumulator, b: EndpointAccumulator): number => {
|
|
588
|
+
return a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
|
|
589
|
+
});
|
|
590
|
+
if (siblings.length > 0) {
|
|
591
|
+
value.siblings = siblings.map(
|
|
592
|
+
(member: EndpointAccumulator): DatabaseEndpoint => {
|
|
593
|
+
return member.endpoint;
|
|
594
|
+
},
|
|
595
|
+
);
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
if (family.clusterHost) {
|
|
599
|
+
value.displayName = buildDatabaseServerDisplayName({
|
|
600
|
+
system: system,
|
|
601
|
+
endpoint: { host: family.clusterHost, port: primary.endpoint.port },
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
discovered.push({ key: family.key, value: value });
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
discovered.sort(
|
|
609
|
+
(
|
|
610
|
+
a: { key: string; value: DiscoveredDatabaseEndpoint },
|
|
611
|
+
b: { key: string; value: DiscoveredDatabaseEndpoint },
|
|
612
|
+
): number => {
|
|
613
|
+
return compareByCallsThenKey(
|
|
614
|
+
{ key: a.key, callCount: a.value.callCount },
|
|
615
|
+
{ key: b.key, callCount: b.value.callCount },
|
|
616
|
+
);
|
|
617
|
+
},
|
|
618
|
+
);
|
|
619
|
+
|
|
620
|
+
return discovered.map(
|
|
621
|
+
(entry: {
|
|
622
|
+
key: string;
|
|
623
|
+
value: DiscoveredDatabaseEndpoint;
|
|
624
|
+
}): DiscoveredDatabaseEndpoint => {
|
|
625
|
+
return entry.value;
|
|
626
|
+
},
|
|
627
|
+
);
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
/**
|
|
631
|
+
* Every endpoint of a discovered database: the one it is recorded under,
|
|
632
|
+
* then its siblings.
|
|
633
|
+
*/
|
|
634
|
+
export function getDiscoveredDatabaseEndpoints(
|
|
635
|
+
discovered: DiscoveredDatabaseEndpoint,
|
|
636
|
+
): Array<DatabaseEndpoint> {
|
|
637
|
+
return [
|
|
638
|
+
discovered.endpoint,
|
|
639
|
+
...(Array.isArray(discovered.siblings) ? discovered.siblings : []),
|
|
640
|
+
];
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/*
|
|
644
|
+
* Calls an endpoint needs inside one window before client spans may create a
|
|
645
|
+
* row for it on their own (env DATABASE_SERVER_MIN_CALLS, default 10, at
|
|
646
|
+
* least 1). Only queries count - a connection span is not a call (see
|
|
647
|
+
* databaseQuerySpanSql). One stray connection string in a trace is not a
|
|
648
|
+
* database worth listing; an existing row is matched and sighted whatever
|
|
649
|
+
* the count.
|
|
650
|
+
*/
|
|
651
|
+
export function getDatabaseServerMinCalls(): number {
|
|
652
|
+
const raw: string | undefined = process.env[DATABASE_SERVER_MIN_CALLS_ENV];
|
|
653
|
+
|
|
654
|
+
if (raw === undefined || raw.trim() === "") {
|
|
655
|
+
return DEFAULT_DATABASE_SERVER_MIN_CALLS;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
const parsed: number = Number(raw.trim());
|
|
659
|
+
|
|
660
|
+
if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) {
|
|
661
|
+
return DEFAULT_DATABASE_SERVER_MIN_CALLS;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
return Math.max(parsed, 1);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* The conservative create policy for client-span discovery, minus the
|
|
669
|
+
* project budget (which needs the database): a GLOBAL-scope endpoint (never
|
|
670
|
+
* a single-label name, an unqualified cluster-local / private-network
|
|
671
|
+
* address or a link-local one), named by host rather than a bare IP (an IP
|
|
672
|
+
* says nothing stable about which server it is), of a known engine that is
|
|
673
|
+
* not a cloud-API or in-process database, and called at least `minCalls`
|
|
674
|
+
* times in the window (a managed cluster's members counted together).
|
|
675
|
+
*/
|
|
676
|
+
export function isDatabaseEndpointAutoCreateCandidate(data: {
|
|
677
|
+
discovered: DiscoveredDatabaseEndpoint;
|
|
678
|
+
minCalls: number;
|
|
679
|
+
}): boolean {
|
|
680
|
+
const discovered: DiscoveredDatabaseEndpoint = data.discovered;
|
|
681
|
+
|
|
682
|
+
return (
|
|
683
|
+
discovered.scope === "global" &&
|
|
684
|
+
!isIpLiteralHost(discovered.endpoint.host) &&
|
|
685
|
+
isAutoCreatableDatabaseSystem(discovered.system) &&
|
|
686
|
+
discovered.callCount >= data.minCalls
|
|
687
|
+
);
|
|
688
|
+
}
|
|
@@ -39,13 +39,17 @@ import crypto from "crypto";
|
|
|
39
39
|
* pid reuse would otherwise mint unbounded registry rows. Everything
|
|
40
40
|
* else promotes. `service.instance` is membership-only too: semconv
|
|
41
41
|
* `service.instance.id` is typically a per-restart UUID, so each deploy
|
|
42
|
-
* would mint a fresh registry row per instance.
|
|
42
|
+
* would mint a fresh registry row per instance. `database.server` is
|
|
43
|
+
* membership-only by design: its keys are appended to signals so the
|
|
44
|
+
* Databases product can scope telemetry, and the typed DatabaseServer table
|
|
45
|
+
* (not the registry) is the row a user sees.
|
|
43
46
|
*/
|
|
44
47
|
const MEMBERSHIP_ONLY_TYPES: ReadonlySet<EntityType> = new Set<EntityType>([
|
|
45
48
|
EntityType.Container,
|
|
46
49
|
EntityType.Process,
|
|
47
50
|
EntityType.ServiceInstance,
|
|
48
51
|
EntityType.TelemetrySdk,
|
|
52
|
+
EntityType.DatabaseServer,
|
|
49
53
|
]);
|
|
50
54
|
|
|
51
55
|
/*
|