@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
|
@@ -4,6 +4,8 @@ import MetricQueryConfigData from "../../../Types/Metrics/MetricQueryConfigData"
|
|
|
4
4
|
import MetricsViewConfig from "../../../Types/Metrics/MetricsViewConfig";
|
|
5
5
|
import MonitorStep from "../../../Types/Monitor/MonitorStep";
|
|
6
6
|
import MonitorType from "../../../Types/Monitor/MonitorType";
|
|
7
|
+
import SqlConnectionConfig from "../../../Types/Monitor/SqlConnectionConfig";
|
|
8
|
+
import SqlDatabaseType from "../../../Types/Monitor/SqlDatabaseType";
|
|
7
9
|
import ObjectID from "../../../Types/ObjectID";
|
|
8
10
|
import SeriesResourceLabels, {
|
|
9
11
|
SeriesResourceRefs,
|
|
@@ -23,10 +25,12 @@ import SeriesResourceLabels, {
|
|
|
23
25
|
* This module answers the same question from the other, always-present
|
|
24
26
|
* side: "which resources does this MONITOR'S OWN CONFIGURATION point
|
|
25
27
|
* at". A host monitor names its host, a Kubernetes monitor names its
|
|
26
|
-
* cluster, a log monitor names its telemetry services,
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
28
|
+
* cluster, a log monitor names its telemetry services, a Database Health
|
|
29
|
+
* or SQL Query monitor names the host:port of the database it connects
|
|
30
|
+
* to, and any monitor with a metric query can carry resource identity in
|
|
31
|
+
* its attribute filters (e.g. `oneuptime.service.name = checkout-api`,
|
|
32
|
+
* `oneuptime.database.server.id = <id>`, `server.address = db.prod`).
|
|
33
|
+
* None of that depends on the criteria being grouped.
|
|
30
34
|
*
|
|
31
35
|
* Both modules emit the SAME `SeriesResourceRefs` shape, so the single
|
|
32
36
|
* nine-way resolver in SeriesResourceLinker serves both, and the two can
|
|
@@ -150,6 +154,210 @@ export default class MonitorStepResourceIdentity {
|
|
|
150
154
|
monitorType: input.monitorType,
|
|
151
155
|
refs: input.refs,
|
|
152
156
|
});
|
|
157
|
+
|
|
158
|
+
/*
|
|
159
|
+
* 4. Databases. The two probe monitors that connect to a database — the
|
|
160
|
+
* Database Health monitor and the SQL Query monitor — name its
|
|
161
|
+
* host:port; metric and trace queries over database telemetry name it
|
|
162
|
+
* by `server.address` filter; a log query names it by the
|
|
163
|
+
* `oneuptime.database.server.id` stamp its lines carry. All resolve
|
|
164
|
+
* to the DatabaseServer that owns the endpoint (or has the id), so
|
|
165
|
+
* their alerts and incidents land on that database.
|
|
166
|
+
*/
|
|
167
|
+
this.collectDatabaseRefs({
|
|
168
|
+
stepData: stepData,
|
|
169
|
+
monitorType: input.monitorType,
|
|
170
|
+
refs: input.refs,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private static collectDatabaseRefs(input: {
|
|
175
|
+
stepData: NonNullable<MonitorStep["data"]>;
|
|
176
|
+
monitorType: MonitorType;
|
|
177
|
+
refs: SeriesResourceRefs;
|
|
178
|
+
}): void {
|
|
179
|
+
const stepData: NonNullable<MonitorStep["data"]> = input.stepData;
|
|
180
|
+
|
|
181
|
+
const probeEndpoint: string | null = this.getProbeDatabaseEndpoint({
|
|
182
|
+
stepData: stepData,
|
|
183
|
+
monitorType: input.monitorType,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
if (probeEndpoint) {
|
|
187
|
+
input.refs.databaseServerEndpoints.push(probeEndpoint);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/*
|
|
191
|
+
* Per QUERY, not over the merged filter map the other resource types
|
|
192
|
+
* use: a port and an engine only mean something next to the address
|
|
193
|
+
* they were written with, and one step can hold queries on two servers.
|
|
194
|
+
*/
|
|
195
|
+
for (const viewConfig of this.getMetricViewConfigs(stepData)) {
|
|
196
|
+
const queryConfigs: Array<MetricQueryConfigData> = Array.isArray(
|
|
197
|
+
viewConfig?.queryConfigs,
|
|
198
|
+
)
|
|
199
|
+
? viewConfig.queryConfigs
|
|
200
|
+
: [];
|
|
201
|
+
|
|
202
|
+
for (const queryConfig of queryConfigs) {
|
|
203
|
+
const filterData: unknown = queryConfig?.metricQueryData?.filterData;
|
|
204
|
+
|
|
205
|
+
if (!filterData || typeof filterData !== "object") {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const metricName: unknown = (filterData as Record<string, unknown>)[
|
|
210
|
+
"metricName"
|
|
211
|
+
];
|
|
212
|
+
|
|
213
|
+
input.refs.databaseServerEndpoints.push(
|
|
214
|
+
...SeriesResourceLabels.extractDatabaseEndpoints({
|
|
215
|
+
attributes: this.asAttributeRecord(
|
|
216
|
+
(filterData as Record<string, unknown>)["attributes"],
|
|
217
|
+
),
|
|
218
|
+
metricName: typeof metricName === "string" ? metricName : null,
|
|
219
|
+
}),
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/*
|
|
225
|
+
* Trace monitors filter span attributes. A DB client span names its
|
|
226
|
+
* server by `server.address` / `server.port` / `db.system.name`, so a
|
|
227
|
+
* Traces monitor on "error spans calling orders-db" names that database.
|
|
228
|
+
*/
|
|
229
|
+
const traceAttributes: Record<string, unknown> = this.asAttributeRecord(
|
|
230
|
+
stepData.traceMonitor?.attributes,
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
input.refs.databaseServerEndpoints.push(
|
|
234
|
+
...SeriesResourceLabels.extractDatabaseEndpoints({
|
|
235
|
+
attributes: traceAttributes,
|
|
236
|
+
}),
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
/*
|
|
240
|
+
* Log monitors filter log attributes, and a database's own log lines
|
|
241
|
+
* (the receiver's query events, or the engine log file the Database
|
|
242
|
+
* Agent ships) carry the `oneuptime.database.server.id` stamp. Id keys
|
|
243
|
+
* only — the log query's other attribute filters are left to the
|
|
244
|
+
* resource types that already read them.
|
|
245
|
+
*/
|
|
246
|
+
input.refs.databaseServerIds.push(
|
|
247
|
+
...SeriesResourceLabels.extractDatabaseServerIds(
|
|
248
|
+
this.asAttributeRecord(stepData.logMonitor?.attributes) as JSONObject,
|
|
249
|
+
),
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/*
|
|
254
|
+
* The canonical endpoint a Database Health or SQL Query monitor connects
|
|
255
|
+
* to, or null.
|
|
256
|
+
*
|
|
257
|
+
* A host holding a `{{monitorSecrets.x}}` reference is skipped: the secret
|
|
258
|
+
* is only resolved when the step is handed to a probe, and the reference
|
|
259
|
+
* text is not an address. The probe's port is explicit in the form, and
|
|
260
|
+
* the engine supplies the default when it is missing.
|
|
261
|
+
*/
|
|
262
|
+
private static getProbeDatabaseEndpoint(input: {
|
|
263
|
+
stepData: NonNullable<MonitorStep["data"]>;
|
|
264
|
+
monitorType: MonitorType;
|
|
265
|
+
}): string | null {
|
|
266
|
+
let connection: SqlConnectionConfig | undefined;
|
|
267
|
+
|
|
268
|
+
if (input.monitorType === MonitorType.Database) {
|
|
269
|
+
connection = input.stepData.databaseMonitor;
|
|
270
|
+
} else if (input.monitorType === MonitorType.SQLQuery) {
|
|
271
|
+
connection = input.stepData.sqlMonitor;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
if (!connection || typeof connection !== "object") {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const host: unknown = connection.host;
|
|
279
|
+
|
|
280
|
+
if (typeof host !== "string" || !host.trim() || host.includes("{{")) {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const system: string | null = this.getSqlDatabaseSystem(
|
|
285
|
+
connection.databaseType,
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
const port: unknown = this.isSqlServerNamedInstance({
|
|
289
|
+
host: host,
|
|
290
|
+
system: system,
|
|
291
|
+
})
|
|
292
|
+
? null
|
|
293
|
+
: connection.port;
|
|
294
|
+
|
|
295
|
+
return SeriesResourceLabels.buildDatabaseEndpointRef({
|
|
296
|
+
address: host,
|
|
297
|
+
port:
|
|
298
|
+
typeof port === "number" ||
|
|
299
|
+
(typeof port === "string" && !port.includes("{{"))
|
|
300
|
+
? port
|
|
301
|
+
: null,
|
|
302
|
+
system: system,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/*
|
|
307
|
+
* True when a SQL Server probe connects to a NAMED instance
|
|
308
|
+
* (`host\instance`). The probe's driver (mssql) splits the host at its
|
|
309
|
+
* last backslash into an instance name and, when that name is non-empty,
|
|
310
|
+
* drops the port: it asks SQL Browser for the instance's own port. So the
|
|
311
|
+
* form's port — pre-filled with 1433 — names nothing, and passing it on
|
|
312
|
+
* would canonicalize the endpoint to `host:1433`, the DEFAULT instance, and
|
|
313
|
+
* land a named instance's outage on another server. Without it the
|
|
314
|
+
* endpoint stays `host\instance` (MSSQLSERVER, the default instance, still
|
|
315
|
+
* becomes `host:1433`).
|
|
316
|
+
*/
|
|
317
|
+
private static isSqlServerNamedInstance(input: {
|
|
318
|
+
host: string;
|
|
319
|
+
system: string | null;
|
|
320
|
+
}): boolean {
|
|
321
|
+
if (input.system !== "microsoft.sql_server") {
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const backslashIndex: number = input.host.lastIndexOf("\\");
|
|
326
|
+
|
|
327
|
+
return (
|
|
328
|
+
backslashIndex >= 0 &&
|
|
329
|
+
input.host.substring(backslashIndex + 1).trim().length > 0
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/*
|
|
334
|
+
* The semconv `db.system.name` of a probe engine, for the default port.
|
|
335
|
+
* SqlDatabaseType's values are display names ("Microsoft SQL Server") that
|
|
336
|
+
* normalizeDatabaseSystem does not know, so they are mapped here.
|
|
337
|
+
*/
|
|
338
|
+
private static getSqlDatabaseSystem(databaseType: unknown): string | null {
|
|
339
|
+
switch (databaseType) {
|
|
340
|
+
case SqlDatabaseType.PostgreSQL:
|
|
341
|
+
return "postgresql";
|
|
342
|
+
case SqlDatabaseType.MySQL:
|
|
343
|
+
return "mysql";
|
|
344
|
+
case SqlDatabaseType.MicrosoftSqlServer:
|
|
345
|
+
return "microsoft.sql_server";
|
|
346
|
+
default:
|
|
347
|
+
return null;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/*
|
|
352
|
+
* A filter map as a plain record, or {} — step JSON is not schema-checked,
|
|
353
|
+
* so the value here can be anything the API or an import wrote.
|
|
354
|
+
*/
|
|
355
|
+
private static asAttributeRecord(value: unknown): Record<string, unknown> {
|
|
356
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
357
|
+
return {};
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return value as Record<string, unknown>;
|
|
153
361
|
}
|
|
154
362
|
|
|
155
363
|
private static getDeclaredIdentifier(input: {
|
|
@@ -313,11 +521,31 @@ export default class MonitorStepResourceIdentity {
|
|
|
313
521
|
this.mergeRefs({ target: input.refs, source: filterRefs });
|
|
314
522
|
}
|
|
315
523
|
|
|
524
|
+
/*
|
|
525
|
+
* Every metric view config a step can carry. Each infra monitor type
|
|
526
|
+
* keeps its metric view config under its own key, so read them all —
|
|
527
|
+
* exactly the set MonitorStep's own metric-view-config resolver knows
|
|
528
|
+
* about.
|
|
529
|
+
*/
|
|
530
|
+
private static getMetricViewConfigs(
|
|
531
|
+
stepData: NonNullable<MonitorStep["data"]>,
|
|
532
|
+
): Array<MetricsViewConfig | undefined> {
|
|
533
|
+
return [
|
|
534
|
+
stepData.metricMonitor?.metricViewConfig,
|
|
535
|
+
stepData.hostMonitor?.metricViewConfig,
|
|
536
|
+
stepData.kubernetesMonitor?.metricViewConfig,
|
|
537
|
+
stepData.dockerMonitor?.metricViewConfig,
|
|
538
|
+
stepData.podmanMonitor?.metricViewConfig,
|
|
539
|
+
stepData.proxmoxMonitor?.metricViewConfig,
|
|
540
|
+
stepData.vmwareMonitor?.metricViewConfig,
|
|
541
|
+
stepData.cephMonitor?.metricViewConfig,
|
|
542
|
+
stepData.dockerSwarmMonitor?.metricViewConfig,
|
|
543
|
+
stepData.iotMonitor?.metricViewConfig,
|
|
544
|
+
];
|
|
545
|
+
}
|
|
546
|
+
|
|
316
547
|
/*
|
|
317
548
|
* The attribute filters of every metric query on the step, merged.
|
|
318
|
-
* Each infra monitor type keeps its metric view config under its own
|
|
319
|
-
* key, so read them all — exactly the set MonitorStep's own
|
|
320
|
-
* metric-view-config resolver knows about.
|
|
321
549
|
*
|
|
322
550
|
* Values accumulate into an ARRAY per key rather than overwriting: a
|
|
323
551
|
* step can hold several queries, and two of them filtering
|
|
@@ -330,20 +558,8 @@ export default class MonitorStepResourceIdentity {
|
|
|
330
558
|
private static collectMetricFilterAttributes(input: {
|
|
331
559
|
stepData: NonNullable<MonitorStep["data"]>;
|
|
332
560
|
}): JSONObject {
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
const viewConfigs: Array<MetricsViewConfig | undefined> = [
|
|
336
|
-
stepData.metricMonitor?.metricViewConfig,
|
|
337
|
-
stepData.hostMonitor?.metricViewConfig,
|
|
338
|
-
stepData.kubernetesMonitor?.metricViewConfig,
|
|
339
|
-
stepData.dockerMonitor?.metricViewConfig,
|
|
340
|
-
stepData.podmanMonitor?.metricViewConfig,
|
|
341
|
-
stepData.proxmoxMonitor?.metricViewConfig,
|
|
342
|
-
stepData.vmwareMonitor?.metricViewConfig,
|
|
343
|
-
stepData.cephMonitor?.metricViewConfig,
|
|
344
|
-
stepData.dockerSwarmMonitor?.metricViewConfig,
|
|
345
|
-
stepData.iotMonitor?.metricViewConfig,
|
|
346
|
-
];
|
|
561
|
+
const viewConfigs: Array<MetricsViewConfig | undefined> =
|
|
562
|
+
this.getMetricViewConfigs(input.stepData);
|
|
347
563
|
|
|
348
564
|
const valuesByKey: Map<string, Array<string>> = new Map<
|
|
349
565
|
string,
|
|
@@ -439,6 +655,8 @@ export default class MonitorStepResourceIdentity {
|
|
|
439
655
|
iotFleetNames: [],
|
|
440
656
|
serviceIds: [],
|
|
441
657
|
serviceNames: [],
|
|
658
|
+
databaseServerIds: [],
|
|
659
|
+
databaseServerEndpoints: [],
|
|
442
660
|
};
|
|
443
661
|
}
|
|
444
662
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import Dictionary from "../../../Types/Dictionary";
|
|
2
|
+
import { JSONObject } from "../../../Types/JSON";
|
|
3
|
+
import MonitorCriteriaInstance from "../../../Types/Monitor/MonitorCriteriaInstance";
|
|
4
|
+
import SeriesLabelDisplay from "../../../Types/Monitor/SeriesContext/SeriesLabelDisplay";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* Why one series' alert or incident was auto-resolved.
|
|
8
|
+
*
|
|
9
|
+
* In per-series mode a series that has recovered is resolved on a tick
|
|
10
|
+
* where other series can still be breaching. That tick's root cause
|
|
11
|
+
* describes the series that are still breaching, and it used to be
|
|
12
|
+
* written onto the recovered series' state timeline as-is — so node A's
|
|
13
|
+
* "resolved" email listed, under "Root Cause", the nodes that were still
|
|
14
|
+
* down. This names the series that recovered and the criteria it no
|
|
15
|
+
* longer satisfies instead.
|
|
16
|
+
*/
|
|
17
|
+
export default class PerSeriesResolutionRootCause {
|
|
18
|
+
public static build(input: {
|
|
19
|
+
seriesLabels: JSONObject | undefined;
|
|
20
|
+
createdCriteriaId: string | undefined;
|
|
21
|
+
criteriaInstancesById?: Dictionary<MonitorCriteriaInstance> | undefined;
|
|
22
|
+
}): string {
|
|
23
|
+
const seriesSummary: string = SeriesLabelDisplay.buildInlineSummary(
|
|
24
|
+
input.seriesLabels,
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const criteriaName: string = input.createdCriteriaId
|
|
28
|
+
? input.criteriaInstancesById?.[
|
|
29
|
+
input.createdCriteriaId
|
|
30
|
+
]?.data?.name?.trim() || ""
|
|
31
|
+
: "";
|
|
32
|
+
|
|
33
|
+
const series: string = seriesSummary
|
|
34
|
+
? `Series "${seriesSummary}"`
|
|
35
|
+
: "This series";
|
|
36
|
+
|
|
37
|
+
const criteria: string = criteriaName
|
|
38
|
+
? `criteria "${criteriaName}"`
|
|
39
|
+
: "the criteria that raised it";
|
|
40
|
+
|
|
41
|
+
return `${series} no longer satisfies ${criteria}.`;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { JSONObject } from "../../../Types/JSON";
|
|
2
|
+
import ObjectID from "../../../Types/ObjectID";
|
|
3
|
+
import {
|
|
4
|
+
DatabaseEndpoint,
|
|
5
|
+
canonicalizeDatabaseEndpoint,
|
|
6
|
+
formatDatabaseEndpoint,
|
|
7
|
+
} from "../../../Types/DatabaseServer/DatabaseEndpoint";
|
|
8
|
+
import {
|
|
9
|
+
DATABASE_SYSTEMS,
|
|
10
|
+
normalizeDatabaseSystem,
|
|
11
|
+
} from "../../../Types/DatabaseServer/DatabaseSystem";
|
|
2
12
|
|
|
3
13
|
/*
|
|
4
14
|
* A grouped metric monitor (e.g. group-by `resource.host.name`) emits
|
|
@@ -155,6 +165,84 @@ export const IoTFleetNameLabelKeys: ReadonlyArray<string> = [
|
|
|
155
165
|
"iot.fleet.name",
|
|
156
166
|
];
|
|
157
167
|
|
|
168
|
+
/*
|
|
169
|
+
* Database identity rides the `oneuptime.database.server.id` stamp ingest
|
|
170
|
+
* adds to a database's own telemetry (collector / Database Agent receiver
|
|
171
|
+
* batches — see Telemetry.getAttributesForDatabaseServerIdAndName) and its
|
|
172
|
+
* ClickHouse `resource.`-prefixed twin, which the Database Agent also sets
|
|
173
|
+
* as an input resource attribute. Id keys only, on purpose: the
|
|
174
|
+
* `oneuptime.database.server.name` stamp is a display name ("PostgreSQL
|
|
175
|
+
* db.prod:5432"), which is neither unique per project (it drops the
|
|
176
|
+
* endpoint's `@cluster` qualifier, and the same namespace/workload can run
|
|
177
|
+
* in two clusters) nor stable (users rename databases). Resolving it would
|
|
178
|
+
* link an incident to — and let maintenance on one database silence — every
|
|
179
|
+
* same-named database. A monitor that should link its events to a database
|
|
180
|
+
* groups (or filters) by `oneuptime.database.server.id`.
|
|
181
|
+
*
|
|
182
|
+
* Unlike the host id stamp, the `resource.`-prefixed value can be typed by a
|
|
183
|
+
* user (the agent's DATABASE_SERVER_ID), so extractResourceRefs keeps only
|
|
184
|
+
* UUID-shaped values: a malformed one would make the primary-key lookup
|
|
185
|
+
* throw out of alert / incident creation.
|
|
186
|
+
*/
|
|
187
|
+
export const DatabaseServerIdLabelKeys: ReadonlyArray<string> = [
|
|
188
|
+
"resource.oneuptime.database.server.id",
|
|
189
|
+
"oneuptime.database.server.id",
|
|
190
|
+
];
|
|
191
|
+
|
|
192
|
+
/*
|
|
193
|
+
* The attributes that name a database by the ENDPOINT it listens on: the
|
|
194
|
+
* semconv `server.address` / `server.port` a DB client span, a `db.client.*`
|
|
195
|
+
* datapoint and a Database Agent batch all carry, plus the engine
|
|
196
|
+
* (`db.system.name`, legacy `db.system`) that supplies the default port
|
|
197
|
+
* semconv leaves out, and the Kubernetes namespace / cluster that
|
|
198
|
+
* canonicalization needs for cluster-local names.
|
|
199
|
+
*
|
|
200
|
+
* Read ONLY from a monitor's own configuration — an attribute FILTER on a
|
|
201
|
+
* metric or trace query (see MonitorStepResourceIdentity) — and resolved
|
|
202
|
+
* through the project's DatabaseServerEndpoint rows. Never from series
|
|
203
|
+
* labels, on purpose:
|
|
204
|
+
*
|
|
205
|
+
* - `server.address` is the generic OTel peer attribute, set on every HTTP
|
|
206
|
+
* client span too. A filter the user wrote is a deliberate statement of
|
|
207
|
+
* which server a monitor watches; a group-by value is whatever peer a
|
|
208
|
+
* series happened to call.
|
|
209
|
+
* - Series identity also drives maintenance suppression
|
|
210
|
+
* (MonitorMaintenanceSuppression), which matches databases by id only.
|
|
211
|
+
* Linking a series by endpoint without suppressing it by endpoint is the
|
|
212
|
+
* linked-but-not-silenced divergence the header of this file exists to
|
|
213
|
+
* prevent.
|
|
214
|
+
*
|
|
215
|
+
* For the same first reason these keys are NOT resource-identity keys and are
|
|
216
|
+
* absent from AllResourceIdentityLabelKeys: a monitor script may legitimately
|
|
217
|
+
* record which server it measured.
|
|
218
|
+
*/
|
|
219
|
+
export const DatabaseServerAddressLabelKeys: ReadonlyArray<string> = [
|
|
220
|
+
"resource.server.address",
|
|
221
|
+
"server.address",
|
|
222
|
+
];
|
|
223
|
+
|
|
224
|
+
export const DatabaseServerPortLabelKeys: ReadonlyArray<string> = [
|
|
225
|
+
"resource.server.port",
|
|
226
|
+
"server.port",
|
|
227
|
+
];
|
|
228
|
+
|
|
229
|
+
export const DatabaseSystemLabelKeys: ReadonlyArray<string> = [
|
|
230
|
+
"resource.db.system.name",
|
|
231
|
+
"db.system.name",
|
|
232
|
+
"resource.db.system",
|
|
233
|
+
"db.system",
|
|
234
|
+
];
|
|
235
|
+
|
|
236
|
+
export const DatabaseKubernetesNamespaceLabelKeys: ReadonlyArray<string> = [
|
|
237
|
+
"resource.k8s.namespace.name",
|
|
238
|
+
"k8s.namespace.name",
|
|
239
|
+
];
|
|
240
|
+
|
|
241
|
+
export const DatabaseKubernetesClusterLabelKeys: ReadonlyArray<string> = [
|
|
242
|
+
"resource.k8s.cluster.name",
|
|
243
|
+
"k8s.cluster.name",
|
|
244
|
+
];
|
|
245
|
+
|
|
158
246
|
/*
|
|
159
247
|
* Services come from OTel-ingested telemetry. The ingest pipeline
|
|
160
248
|
* auto-creates a Service row keyed by `service.name`, so any series
|
|
@@ -211,6 +299,7 @@ export const AllResourceIdentityLabelKeys: ReadonlyArray<string> = [
|
|
|
211
299
|
...VMwareVCenterNameLabelKeys,
|
|
212
300
|
...CephClusterNameLabelKeys,
|
|
213
301
|
...IoTFleetNameLabelKeys,
|
|
302
|
+
...DatabaseServerIdLabelKeys,
|
|
214
303
|
...ServiceIdLabelKeys,
|
|
215
304
|
...ServiceNameLabelKeys,
|
|
216
305
|
];
|
|
@@ -238,6 +327,16 @@ export interface SeriesResourceRefs {
|
|
|
238
327
|
iotFleetNames: Array<string>;
|
|
239
328
|
serviceIds: Array<string>;
|
|
240
329
|
serviceNames: Array<string>;
|
|
330
|
+
// Id-only: see DatabaseServerIdLabelKeys for why there is no name list.
|
|
331
|
+
databaseServerIds: Array<string>;
|
|
332
|
+
/*
|
|
333
|
+
* Canonical endpoints ("db.prod:5432", formatDatabaseEndpoint) a monitor's
|
|
334
|
+
* configuration names — a probe Database Health / SQL Query target, or a
|
|
335
|
+
* `server.address` filter. Resolved to databaseServerIds through the
|
|
336
|
+
* project's DatabaseServerEndpoint rows. Always empty from series labels:
|
|
337
|
+
* see DatabaseServerAddressLabelKeys.
|
|
338
|
+
*/
|
|
339
|
+
databaseServerEndpoints: Array<string>;
|
|
241
340
|
}
|
|
242
341
|
|
|
243
342
|
export default class SeriesResourceLabels {
|
|
@@ -324,6 +423,198 @@ export default class SeriesResourceLabels {
|
|
|
324
423
|
),
|
|
325
424
|
serviceIds: this.collectLabelValues(seriesLabels, ServiceIdLabelKeys),
|
|
326
425
|
serviceNames: this.collectLabelValues(seriesLabels, ServiceNameLabelKeys),
|
|
426
|
+
databaseServerIds: this.extractDatabaseServerIds(seriesLabels),
|
|
427
|
+
// Never from series labels — see DatabaseServerAddressLabelKeys.
|
|
428
|
+
databaseServerEndpoints: [],
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/*
|
|
433
|
+
* The `oneuptime.database.server.id` values an attribute map carries, UUID
|
|
434
|
+
* shaped only (see DatabaseServerIdLabelKeys for why).
|
|
435
|
+
*/
|
|
436
|
+
public static extractDatabaseServerIds(
|
|
437
|
+
attributes: JSONObject,
|
|
438
|
+
): Array<string> {
|
|
439
|
+
return this.collectLabelValues(
|
|
440
|
+
attributes,
|
|
441
|
+
DatabaseServerIdLabelKeys,
|
|
442
|
+
).filter((value: string): boolean => {
|
|
443
|
+
return ObjectID.isValidUUID(value);
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/*
|
|
448
|
+
* The canonical database endpoint a (host, port, engine) triple names, as
|
|
449
|
+
* it is stored on DatabaseServerEndpoint rows — or null when it names no
|
|
450
|
+
* identifiable server.
|
|
451
|
+
*
|
|
452
|
+
* Canonicalized exactly as ingest canonicalizes what a client call saw
|
|
453
|
+
* (`canonicalizeDatabaseEndpoint`, purpose "client-call"), so the lookup is
|
|
454
|
+
* an exact string match: one host spelling, the engine's default port when
|
|
455
|
+
* none is given, Kubernetes service names expanded with the namespace, and
|
|
456
|
+
* cluster-local names qualified with the cluster when one is known.
|
|
457
|
+
* Loopback and host-relative names are null — "localhost:5432" is a
|
|
458
|
+
* different server for every caller, so it can never identify one row.
|
|
459
|
+
*/
|
|
460
|
+
public static buildDatabaseEndpointRef(input: {
|
|
461
|
+
address: unknown;
|
|
462
|
+
port?: unknown;
|
|
463
|
+
system?: string | null | undefined;
|
|
464
|
+
kubernetesNamespace?: string | null | undefined;
|
|
465
|
+
kubernetesClusterName?: string | null | undefined;
|
|
466
|
+
}): string | null {
|
|
467
|
+
if (typeof input.address !== "string" || !input.address.trim()) {
|
|
468
|
+
return null;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
const port: string | number | null =
|
|
472
|
+
typeof input.port === "number" || typeof input.port === "string"
|
|
473
|
+
? input.port
|
|
474
|
+
: null;
|
|
475
|
+
|
|
476
|
+
const endpoint: DatabaseEndpoint | null = canonicalizeDatabaseEndpoint({
|
|
477
|
+
system: normalizeDatabaseSystem(input.system) || "",
|
|
478
|
+
address: input.address,
|
|
479
|
+
port: port,
|
|
480
|
+
caller: {
|
|
481
|
+
kubernetesNamespace: input.kubernetesNamespace || null,
|
|
482
|
+
kubernetesClusterName: input.kubernetesClusterName || null,
|
|
483
|
+
hostName: null,
|
|
484
|
+
isEphemeral: true,
|
|
485
|
+
},
|
|
486
|
+
purpose: "client-call",
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
return endpoint ? formatDatabaseEndpoint(endpoint) : null;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/*
|
|
493
|
+
* Every database endpoint ONE query's attribute filter names: each
|
|
494
|
+
* `server.address` value, with the port the filter gives, else the default
|
|
495
|
+
* port of the engine the filter (or, failing that, the metric's receiver
|
|
496
|
+
* prefix — `postgresql.backends` is PostgreSQL's) names.
|
|
497
|
+
*
|
|
498
|
+
* Takes one query's raw filter, not a merged map, because the port and the
|
|
499
|
+
* engine only mean something next to the address they were written with.
|
|
500
|
+
* Values may be strings, numbers or arrays of either; anything else (a
|
|
501
|
+
* Search or Includes matcher) names no single server and is skipped.
|
|
502
|
+
*/
|
|
503
|
+
public static extractDatabaseEndpoints(input: {
|
|
504
|
+
attributes: Record<string, unknown> | null | undefined;
|
|
505
|
+
metricName?: string | null | undefined;
|
|
506
|
+
}): Array<string> {
|
|
507
|
+
const attributes: Record<string, unknown> =
|
|
508
|
+
input.attributes && typeof input.attributes === "object"
|
|
509
|
+
? input.attributes
|
|
510
|
+
: {};
|
|
511
|
+
|
|
512
|
+
const addresses: Array<string> = this.collectScalarValues(
|
|
513
|
+
attributes,
|
|
514
|
+
DatabaseServerAddressLabelKeys,
|
|
515
|
+
);
|
|
516
|
+
|
|
517
|
+
if (addresses.length === 0) {
|
|
518
|
+
return [];
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
const ports: Array<string> = this.collectScalarValues(
|
|
522
|
+
attributes,
|
|
523
|
+
DatabaseServerPortLabelKeys,
|
|
524
|
+
);
|
|
525
|
+
|
|
526
|
+
const system: string | null =
|
|
527
|
+
this.collectScalarValues(attributes, DatabaseSystemLabelKeys)[0] ||
|
|
528
|
+
this.getDatabaseSystemFromMetricName(input.metricName);
|
|
529
|
+
|
|
530
|
+
const kubernetesNamespace: string | undefined = this.collectScalarValues(
|
|
531
|
+
attributes,
|
|
532
|
+
DatabaseKubernetesNamespaceLabelKeys,
|
|
533
|
+
)[0];
|
|
534
|
+
|
|
535
|
+
const kubernetesClusterName: string | undefined = this.collectScalarValues(
|
|
536
|
+
attributes,
|
|
537
|
+
DatabaseKubernetesClusterLabelKeys,
|
|
538
|
+
)[0];
|
|
539
|
+
|
|
540
|
+
const endpoints: Set<string> = new Set<string>();
|
|
541
|
+
|
|
542
|
+
for (const address of addresses) {
|
|
543
|
+
for (const port of ports.length > 0 ? ports : [null]) {
|
|
544
|
+
const endpoint: string | null = this.buildDatabaseEndpointRef({
|
|
545
|
+
address: address,
|
|
546
|
+
port: port,
|
|
547
|
+
system: system,
|
|
548
|
+
kubernetesNamespace: kubernetesNamespace,
|
|
549
|
+
kubernetesClusterName: kubernetesClusterName,
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
if (endpoint) {
|
|
553
|
+
endpoints.add(endpoint);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
return Array.from(endpoints);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/*
|
|
562
|
+
* The engine whose collector receiver emits `metricName`, from the
|
|
563
|
+
* receivers' metric prefixes (`postgresql.`, `redis.`, ...). Null for
|
|
564
|
+
* anything else — `db.client.*` included, which every engine's clients
|
|
565
|
+
* emit alike.
|
|
566
|
+
*/
|
|
567
|
+
private static getDatabaseSystemFromMetricName(
|
|
568
|
+
metricName: string | null | undefined,
|
|
569
|
+
): string | null {
|
|
570
|
+
if (typeof metricName !== "string" || !metricName) {
|
|
571
|
+
return null;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
const name: string = metricName.trim().toLowerCase();
|
|
575
|
+
|
|
576
|
+
for (const descriptor of DATABASE_SYSTEMS) {
|
|
577
|
+
for (const prefix of descriptor.receiverMetricPrefixes) {
|
|
578
|
+
if (name.startsWith(prefix)) {
|
|
579
|
+
return descriptor.system;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
return null;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/*
|
|
588
|
+
* Like collectLabelValues, but a filter value may also be a number (a port
|
|
589
|
+
* typed into the query form) — stringified — and anything that is not a
|
|
590
|
+
* plain scalar is dropped rather than coerced into "[object Object]".
|
|
591
|
+
*/
|
|
592
|
+
private static collectScalarValues(
|
|
593
|
+
attributes: Record<string, unknown>,
|
|
594
|
+
keys: ReadonlyArray<string>,
|
|
595
|
+
): Array<string> {
|
|
596
|
+
const found: Set<string> = new Set<string>();
|
|
597
|
+
|
|
598
|
+
const add: (value: unknown) => void = (value: unknown): void => {
|
|
599
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
600
|
+
found.add(value.trim());
|
|
601
|
+
} else if (typeof value === "number" && Number.isFinite(value)) {
|
|
602
|
+
found.add(String(value));
|
|
603
|
+
}
|
|
327
604
|
};
|
|
605
|
+
|
|
606
|
+
for (const key of keys) {
|
|
607
|
+
const value: unknown = attributes[key];
|
|
608
|
+
|
|
609
|
+
if (Array.isArray(value)) {
|
|
610
|
+
for (const item of value) {
|
|
611
|
+
add(item);
|
|
612
|
+
}
|
|
613
|
+
} else {
|
|
614
|
+
add(value);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
return Array.from(found);
|
|
328
619
|
}
|
|
329
620
|
}
|