@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
|
@@ -11,6 +11,7 @@ import ServerlessFunction from "../../../../Models/DatabaseModels/ServerlessFunc
|
|
|
11
11
|
import CloudResource from "../../../../Models/DatabaseModels/CloudResource";
|
|
12
12
|
import IoTFleet from "../../../../Models/DatabaseModels/IoTFleet";
|
|
13
13
|
import NetworkDevice from "../../../../Models/DatabaseModels/NetworkDevice";
|
|
14
|
+
import DatabaseServer from "../../../../Models/DatabaseModels/DatabaseServer";
|
|
14
15
|
import Metric from "../../../../Models/AnalyticsModels/Metric";
|
|
15
16
|
import Log from "../../../../Models/AnalyticsModels/Log";
|
|
16
17
|
import Span from "../../../../Models/AnalyticsModels/Span";
|
|
@@ -55,6 +56,7 @@ import ServerlessFunctionService from "../../../Services/ServerlessFunctionServi
|
|
|
55
56
|
import CloudResourceService from "../../../Services/CloudResourceService";
|
|
56
57
|
import IoTFleetService from "../../../Services/IoTFleetService";
|
|
57
58
|
import NetworkDeviceService from "../../../Services/NetworkDeviceService";
|
|
59
|
+
import DatabaseServerService from "../../../Services/DatabaseServerService";
|
|
58
60
|
import MetricService from "../../../Services/MetricService";
|
|
59
61
|
import LogAggregationService, {
|
|
60
62
|
HistogramBucket,
|
|
@@ -66,7 +68,9 @@ import FindBy from "../../../Types/Database/FindBy";
|
|
|
66
68
|
import QueryHelper from "../../../Types/Database/QueryHelper";
|
|
67
69
|
import DatabaseRequestType from "../../../Types/BaseDatabase/DatabaseRequestType";
|
|
68
70
|
import ModelPermission from "../../../Types/AnalyticsDatabase/ModelPermission";
|
|
69
|
-
import {
|
|
71
|
+
import ResourceEntityFilter, {
|
|
72
|
+
ResourceEntityScope,
|
|
73
|
+
} from "../../Telemetry/ResourceEntityFilter";
|
|
70
74
|
import ToolResultSerializer, { SerializedResult } from "./Serializer";
|
|
71
75
|
import {
|
|
72
76
|
ObservabilityTool,
|
|
@@ -87,6 +91,17 @@ interface ResourceDescriptor {
|
|
|
87
91
|
attributeKey?: string;
|
|
88
92
|
keyFor?: (projectId: string, identifier: string) => string;
|
|
89
93
|
runtime?: string;
|
|
94
|
+
/*
|
|
95
|
+
* For a resource whose telemetry is not named by one identifier (a
|
|
96
|
+
* Database owns several endpoints plus the pods / containers it runs as):
|
|
97
|
+
* its scope, resolved exactly the way the explorer's resource facet and
|
|
98
|
+
* the resource's own pages resolve it. Called only after the
|
|
99
|
+
* permission-checked parent read.
|
|
100
|
+
*/
|
|
101
|
+
resolveResourceScopes?: (data: {
|
|
102
|
+
projectId: ObjectID;
|
|
103
|
+
id: ObjectID;
|
|
104
|
+
}) => Promise<Array<ResourceEntityScope>>;
|
|
90
105
|
}
|
|
91
106
|
|
|
92
107
|
/*
|
|
@@ -274,6 +289,30 @@ const RESOURCE_DESCRIPTORS: Record<AIResourceType, ResourceDescriptor> = {
|
|
|
274
289
|
"lastPolledAt",
|
|
275
290
|
],
|
|
276
291
|
},
|
|
292
|
+
[AIResourceType.DatabaseServer]: {
|
|
293
|
+
model: DatabaseServer,
|
|
294
|
+
findBy: (data: FindBy<BaseModel>) => {
|
|
295
|
+
return DatabaseServerService.findBy(data as never);
|
|
296
|
+
},
|
|
297
|
+
fields: [
|
|
298
|
+
"dbSystem",
|
|
299
|
+
"dbVersion",
|
|
300
|
+
"serverAddress",
|
|
301
|
+
"serverPort",
|
|
302
|
+
"discoverySource",
|
|
303
|
+
"instanceCount",
|
|
304
|
+
"collectorLastSeenAt",
|
|
305
|
+
],
|
|
306
|
+
resolveResourceScopes: (data: {
|
|
307
|
+
projectId: ObjectID;
|
|
308
|
+
id: ObjectID;
|
|
309
|
+
}): Promise<Array<ResourceEntityScope>> => {
|
|
310
|
+
return ResourceEntityFilter.resolveScopes({
|
|
311
|
+
projectId: data.projectId,
|
|
312
|
+
selections: { databaseServerId: [data.id.toString()] },
|
|
313
|
+
});
|
|
314
|
+
},
|
|
315
|
+
},
|
|
277
316
|
};
|
|
278
317
|
|
|
279
318
|
function getResourceType(args: JSONObject): AIResourceType {
|
|
@@ -503,10 +542,33 @@ export function buildAIResourceTelemetryScope(data: {
|
|
|
503
542
|
resource: JSONObject;
|
|
504
543
|
projectId: ObjectID;
|
|
505
544
|
signal: ResourceSignal;
|
|
545
|
+
// From the descriptor's resolveResourceScopes, when it has one.
|
|
546
|
+
resolvedScopes?: Array<ResourceEntityScope> | undefined;
|
|
506
547
|
}): AIResourceTelemetryScope {
|
|
507
548
|
const descriptor: ResourceDescriptor = RESOURCE_DESCRIPTORS[data.type];
|
|
508
549
|
const note: string =
|
|
509
550
|
"Scope is the parent resource; no individual child identity or namespace was selected. Missing telemetry is not evidence of health.";
|
|
551
|
+
if (data.type === AIResourceType.DatabaseServer) {
|
|
552
|
+
/*
|
|
553
|
+
* Only a resolved scope of THIS database is used; one that could not be
|
|
554
|
+
* resolved narrows to the row's own collector / agent data, never widens.
|
|
555
|
+
*/
|
|
556
|
+
const scopes: Array<ResourceEntityScope> = (
|
|
557
|
+
data.resolvedScopes || []
|
|
558
|
+
).filter((scope: ResourceEntityScope): boolean => {
|
|
559
|
+
return (
|
|
560
|
+
scope.entityIds.length === 1 &&
|
|
561
|
+
scope.entityIds[0] === data.id.toString()
|
|
562
|
+
);
|
|
563
|
+
});
|
|
564
|
+
return {
|
|
565
|
+
resourceScopes:
|
|
566
|
+
scopes.length > 0
|
|
567
|
+
? scopes
|
|
568
|
+
: [{ entityIds: [data.id.toString()], entityKeys: [] }],
|
|
569
|
+
note: `${note} A database's telemetry is its own collector / Database Agent data plus everything carrying one of its endpoints or workload members: application database calls, and the logs and metrics of the pods and containers it runs as.`,
|
|
570
|
+
};
|
|
571
|
+
}
|
|
510
572
|
if (data.type === AIResourceType.CloudResource) {
|
|
511
573
|
const attributes: Record<string, string> = {};
|
|
512
574
|
for (const [column, key] of [
|
|
@@ -611,7 +673,18 @@ export const QueryResourceTelemetryTool: ObservabilityTool = {
|
|
|
611
673
|
},
|
|
612
674
|
aggregationType: {
|
|
613
675
|
type: "string",
|
|
614
|
-
enum: [
|
|
676
|
+
enum: [
|
|
677
|
+
"Avg",
|
|
678
|
+
"Min",
|
|
679
|
+
"Max",
|
|
680
|
+
"Sum",
|
|
681
|
+
"Count",
|
|
682
|
+
"P50",
|
|
683
|
+
"P75",
|
|
684
|
+
"P90",
|
|
685
|
+
"P95",
|
|
686
|
+
"P99",
|
|
687
|
+
],
|
|
615
688
|
description:
|
|
616
689
|
"Metric aggregation (defaultAvg); counter sums are exported values, not derived rates.",
|
|
617
690
|
},
|
|
@@ -707,6 +780,12 @@ export const QueryResourceTelemetryTool: ObservabilityTool = {
|
|
|
707
780
|
resource: resources[0] as unknown as JSONObject,
|
|
708
781
|
projectId: ctx.projectId,
|
|
709
782
|
signal,
|
|
783
|
+
resolvedScopes: descriptor.resolveResourceScopes
|
|
784
|
+
? await descriptor.resolveResourceScopes({
|
|
785
|
+
projectId: ctx.projectId,
|
|
786
|
+
id,
|
|
787
|
+
})
|
|
788
|
+
: undefined,
|
|
710
789
|
});
|
|
711
790
|
const target: AIChatCitationTarget = resourceTarget(type, id);
|
|
712
791
|
const label: string = `${getAIResourceDefinition(type).label} ${signal}, ${startTime.toISOString()} – ${endTime.toISOString()}`;
|
|
@@ -1938,7 +1938,7 @@ export default class StatementGenerator<TBaseModel extends AnalyticsBaseModel> {
|
|
|
1938
1938
|
* EXAMPLE:
|
|
1939
1939
|
* SELECT sum(Metric.value) as avg_value, date_trunc('hour', toStartOfInterval(createdAt, INTERVAL 1 hour)) as createdAt
|
|
1940
1940
|
*
|
|
1941
|
-
* Percentile aggregations (P50/P90/P95/P99) compile to ClickHouse's
|
|
1941
|
+
* Percentile aggregations (P50/P75/P90/P95/P99) compile to ClickHouse's
|
|
1942
1942
|
* `quantile(level)(column)`. This is the right thing for scalar
|
|
1943
1943
|
* columns (Span.duration, Metric.value when the metric is a Sum or
|
|
1944
1944
|
* Gauge, etc.). MetricService overrides this method when it has
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import CephClusterService from "../../Services/CephClusterService";
|
|
2
|
+
import DatabaseServerService from "../../Services/DatabaseServerService";
|
|
2
3
|
import DockerHostService from "../../Services/DockerHostService";
|
|
3
4
|
import DockerResourceService from "../../Services/DockerResourceService";
|
|
4
5
|
import DockerSwarmClusterService from "../../Services/DockerSwarmClusterService";
|
|
@@ -108,6 +109,11 @@ function getAllAffectedResourceRelations(): Array<ProjectScopedRelation> {
|
|
|
108
109
|
modelName: "Ceph Cluster",
|
|
109
110
|
service: CephClusterService,
|
|
110
111
|
},
|
|
112
|
+
{
|
|
113
|
+
column: "databaseServers",
|
|
114
|
+
modelName: "Database",
|
|
115
|
+
service: DatabaseServerService,
|
|
116
|
+
},
|
|
111
117
|
{
|
|
112
118
|
column: "dockerResources",
|
|
113
119
|
modelName: "Docker Resource",
|
|
@@ -280,6 +280,39 @@ export default class CompareCriteria {
|
|
|
280
280
|
return threshold as number;
|
|
281
281
|
}
|
|
282
282
|
|
|
283
|
+
/*
|
|
284
|
+
* A metric-value threshold as a number, fraction included.
|
|
285
|
+
*
|
|
286
|
+
* The criteria form saves what the user typed as a STRING, and
|
|
287
|
+
* convertToNumber's parseInt truncated it: "0.9" on a ratio metric was
|
|
288
|
+
* compared as 0 and fired on every non-zero sample, and "85.5" was
|
|
289
|
+
* compared as 85. Metric values are where a fractional threshold is the
|
|
290
|
+
* natural one to type (ratios, seconds, load averages), so they are
|
|
291
|
+
* parsed with parseFloat. Every other checkOn keeps convertToNumber.
|
|
292
|
+
*
|
|
293
|
+
* Anything that does not parse to a finite number is treated as missing,
|
|
294
|
+
* so the caller ignores the filter instead of comparing against NaN.
|
|
295
|
+
*/
|
|
296
|
+
@CaptureSpan()
|
|
297
|
+
public static convertMetricThresholdToNumber(
|
|
298
|
+
threshold: string | number | undefined,
|
|
299
|
+
): number | null {
|
|
300
|
+
if (threshold === undefined || threshold === null) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const parsed: number =
|
|
305
|
+
typeof threshold === Typeof.String
|
|
306
|
+
? parseFloat(threshold as string)
|
|
307
|
+
: (threshold as number);
|
|
308
|
+
|
|
309
|
+
if (typeof parsed !== Typeof.Number || !Number.isFinite(parsed)) {
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
return parsed;
|
|
314
|
+
}
|
|
315
|
+
|
|
283
316
|
@CaptureSpan()
|
|
284
317
|
public static checkEqualToOrNotEqualTo(data: {
|
|
285
318
|
value: string | number;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import AggregateModel from "../../../../Types/BaseDatabase/AggregatedModel";
|
|
2
2
|
import AggregatedResult from "../../../../Types/BaseDatabase/AggregatedResult";
|
|
3
|
+
import MetricAliasData from "../../../../Types/Metrics/MetricAliasData";
|
|
3
4
|
import MetricFormulaConfigData from "../../../../Types/Metrics/MetricFormulaConfigData";
|
|
4
5
|
import MetricQueryConfigData from "../../../../Types/Metrics/MetricQueryConfigData";
|
|
5
6
|
import MetricsAggregationType from "../../../../Types/Metrics/MetricsAggregationType";
|
|
@@ -179,9 +180,10 @@ export default class MetricMonitorCriteria {
|
|
|
179
180
|
projectId: { toString(): string } | undefined;
|
|
180
181
|
nativeUnitsByMetricName?: { [key: string]: string } | undefined;
|
|
181
182
|
}): Promise<MetricSeriesEvaluationResult> {
|
|
182
|
-
const rawThreshold: number | null =
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
const rawThreshold: number | null =
|
|
184
|
+
CompareCriteria.convertMetricThresholdToNumber(
|
|
185
|
+
input.criteriaFilter.value,
|
|
186
|
+
);
|
|
185
187
|
|
|
186
188
|
const metricAlias: string =
|
|
187
189
|
input.criteriaFilter.metricMonitorOptions?.metricAlias || "";
|
|
@@ -274,6 +276,7 @@ export default class MetricMonitorCriteria {
|
|
|
274
276
|
seriesFingerprint: input.seriesFingerprint,
|
|
275
277
|
seriesLabels: input.seriesLabels,
|
|
276
278
|
projectId: input.projectId,
|
|
279
|
+
nativeUnitsByMetricName: input.nativeUnitsByMetricName,
|
|
277
280
|
});
|
|
278
281
|
}
|
|
279
282
|
|
|
@@ -363,6 +366,19 @@ export default class MetricMonitorCriteria {
|
|
|
363
366
|
},
|
|
364
367
|
);
|
|
365
368
|
|
|
369
|
+
const finiteNumbers: Array<number> = numbersInDisplayUnit.filter(
|
|
370
|
+
(n: number) => {
|
|
371
|
+
return Number.isFinite(n);
|
|
372
|
+
},
|
|
373
|
+
);
|
|
374
|
+
|
|
375
|
+
if (finiteNumbers.length > 0) {
|
|
376
|
+
metricContext.sampleValueRange = {
|
|
377
|
+
min: Math.min(...finiteNumbers),
|
|
378
|
+
max: Math.max(...finiteNumbers),
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
|
|
366
382
|
const comparisonMessage: string | null =
|
|
367
383
|
CompareCriteria.compareCriteriaNumbers({
|
|
368
384
|
value: numbersInDisplayUnit.length > 0 ? numbersInDisplayUnit : 0,
|
|
@@ -438,7 +454,10 @@ export default class MetricMonitorCriteria {
|
|
|
438
454
|
} = {
|
|
439
455
|
value: convertedValue,
|
|
440
456
|
timestamp: sample.timestamp,
|
|
441
|
-
attributes: MetricMonitorCriteria.extractLabelAttributes(
|
|
457
|
+
attributes: MetricMonitorCriteria.extractLabelAttributes(
|
|
458
|
+
sample,
|
|
459
|
+
input.seriesLabels,
|
|
460
|
+
),
|
|
442
461
|
};
|
|
443
462
|
|
|
444
463
|
if (componentValueLookup && metricContext.components) {
|
|
@@ -571,7 +590,10 @@ export default class MetricMonitorCriteria {
|
|
|
571
590
|
}
|
|
572
591
|
}
|
|
573
592
|
|
|
574
|
-
private static extractLabelAttributes(
|
|
593
|
+
private static extractLabelAttributes(
|
|
594
|
+
sample: AggregateModel,
|
|
595
|
+
seriesLabels?: JSONObject | undefined,
|
|
596
|
+
): JSONObject {
|
|
575
597
|
/*
|
|
576
598
|
* AggregatedModel has a string index signature that holds group-by
|
|
577
599
|
* attributes alongside `timestamp` and `value`. Strip the known keys
|
|
@@ -579,7 +601,7 @@ export default class MetricMonitorCriteria {
|
|
|
579
601
|
*/
|
|
580
602
|
const labels: JSONObject = {};
|
|
581
603
|
for (const key of Object.keys(sample)) {
|
|
582
|
-
if (key === "timestamp" || key === "value") {
|
|
604
|
+
if (key === "timestamp" || key === "value" || key === "attributes") {
|
|
583
605
|
continue;
|
|
584
606
|
}
|
|
585
607
|
const v: unknown = (sample as unknown as JSONObject)[key];
|
|
@@ -588,6 +610,50 @@ export default class MetricMonitorCriteria {
|
|
|
588
610
|
}
|
|
589
611
|
labels[key] = v as JSONObject[string];
|
|
590
612
|
}
|
|
613
|
+
|
|
614
|
+
/*
|
|
615
|
+
* Grouped rows carry their labels NESTED under `attributes` — both
|
|
616
|
+
* MetricService.aggregateBy with groupByAttributeKeys and the
|
|
617
|
+
* infrastructure monitors' raw-scan path return them that way. The
|
|
618
|
+
* map used to be copied through as a single `attributes` label, which
|
|
619
|
+
* the Breaching Samples list rendered as "`attributes`:
|
|
620
|
+
* `[object Object]`".
|
|
621
|
+
*
|
|
622
|
+
* The raw scan nests EVERY datapoint attribute of the bucket's first
|
|
623
|
+
* row, not just the grouped ones, so when the series labels are known
|
|
624
|
+
* only those keys are lifted out: they are what identifies the series.
|
|
625
|
+
* A formula's rows carry no attributes at all, so each key falls back
|
|
626
|
+
* to the series' own label — every sample of a series belongs to it.
|
|
627
|
+
*/
|
|
628
|
+
const nested: unknown = (sample as unknown as JSONObject)["attributes"];
|
|
629
|
+
const nestedAttributes: JSONObject =
|
|
630
|
+
nested && typeof nested === "object" && !Array.isArray(nested)
|
|
631
|
+
? (nested as JSONObject)
|
|
632
|
+
: {};
|
|
633
|
+
|
|
634
|
+
if (nested !== undefined && nested !== null && typeof nested !== "object") {
|
|
635
|
+
// A flat label that happens to be called `attributes`.
|
|
636
|
+
labels["attributes"] = nested as JSONObject[string];
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
const labelKeys: Array<string> = Object.keys(seriesLabels || {});
|
|
640
|
+
const keys: Array<string> =
|
|
641
|
+
labelKeys.length > 0 ? labelKeys : Object.keys(nestedAttributes);
|
|
642
|
+
|
|
643
|
+
for (const key of keys) {
|
|
644
|
+
if (key in labels) {
|
|
645
|
+
continue;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
const v: unknown = nestedAttributes[key] ?? seriesLabels?.[key];
|
|
649
|
+
|
|
650
|
+
if (v === undefined || v === null || v === "" || typeof v === "object") {
|
|
651
|
+
continue;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
labels[key] = v as JSONObject[string];
|
|
655
|
+
}
|
|
656
|
+
|
|
591
657
|
return labels;
|
|
592
658
|
}
|
|
593
659
|
|
|
@@ -659,12 +725,20 @@ export default class MetricMonitorCriteria {
|
|
|
659
725
|
formulaConfig: f,
|
|
660
726
|
queryConfigs: input.queryConfigs,
|
|
661
727
|
formulaConfigs: input.formulaConfigs,
|
|
728
|
+
nativeUnitsByMetricName: input.nativeUnitsByMetricName,
|
|
662
729
|
})
|
|
663
730
|
: undefined;
|
|
664
731
|
|
|
732
|
+
const displayName: string | undefined =
|
|
733
|
+
MetricMonitorCriteria.getAliasDisplayName({
|
|
734
|
+
aliasData: q?.metricAliasData || f?.metricAliasData,
|
|
735
|
+
metricAlias: input.metricAlias,
|
|
736
|
+
});
|
|
737
|
+
|
|
665
738
|
return {
|
|
666
739
|
metricName,
|
|
667
740
|
alias: input.metricAlias,
|
|
741
|
+
...(displayName ? { displayName } : {}),
|
|
668
742
|
unit,
|
|
669
743
|
aggregationType,
|
|
670
744
|
isFormula: Boolean(f),
|
|
@@ -677,6 +751,36 @@ export default class MetricMonitorCriteria {
|
|
|
677
751
|
};
|
|
678
752
|
}
|
|
679
753
|
|
|
754
|
+
/**
|
|
755
|
+
* The human legend of a query or formula, or undefined when it is empty
|
|
756
|
+
* or just repeats the alias. The shipped templates title every single
|
|
757
|
+
* query with its own alias ("container_restarts"), which is not a name
|
|
758
|
+
* worth promoting over the metric name; the ratio templates give their
|
|
759
|
+
* formula a real legend ("Node Memory Utilization (%)").
|
|
760
|
+
*/
|
|
761
|
+
public static getAliasDisplayName(input: {
|
|
762
|
+
aliasData: MetricAliasData | undefined;
|
|
763
|
+
metricAlias: string;
|
|
764
|
+
}): string | undefined {
|
|
765
|
+
const candidates: Array<string | undefined> = [
|
|
766
|
+
input.aliasData?.legend,
|
|
767
|
+
input.aliasData?.title,
|
|
768
|
+
];
|
|
769
|
+
|
|
770
|
+
for (const candidate of candidates) {
|
|
771
|
+
const trimmed: string = (candidate || "").trim();
|
|
772
|
+
|
|
773
|
+
if (
|
|
774
|
+
trimmed &&
|
|
775
|
+
trimmed.toLowerCase() !== input.metricAlias.trim().toLowerCase()
|
|
776
|
+
) {
|
|
777
|
+
return trimmed;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
return undefined;
|
|
782
|
+
}
|
|
783
|
+
|
|
680
784
|
/**
|
|
681
785
|
* Resolve the variables the formula references to their source
|
|
682
786
|
* query/formula definitions so the root cause can label each
|
|
@@ -686,6 +790,7 @@ export default class MetricMonitorCriteria {
|
|
|
686
790
|
formulaConfig: MetricFormulaConfigData;
|
|
687
791
|
queryConfigs: Array<MetricQueryConfigData>;
|
|
688
792
|
formulaConfigs: Array<MetricFormulaConfigData>;
|
|
793
|
+
nativeUnitsByMetricName?: { [key: string]: string } | undefined;
|
|
689
794
|
}): Array<MetricComponent> {
|
|
690
795
|
const formula: string =
|
|
691
796
|
input.formulaConfig.metricFormulaData?.metricFormula || "";
|
|
@@ -717,10 +822,25 @@ export default class MetricMonitorCriteria {
|
|
|
717
822
|
| undefined) ||
|
|
718
823
|
queryMatch.metricAliasData?.title ||
|
|
719
824
|
normalizedAlias;
|
|
825
|
+
/*
|
|
826
|
+
* A component's values are in its legendUnit when it has one (the
|
|
827
|
+
* worker converted them), and in the metric's own unit when it
|
|
828
|
+
* does not — the ratio templates leave both sides unconverted, so
|
|
829
|
+
* `used_mem` and `alloc_mem` are bytes. Without the fallback those
|
|
830
|
+
* printed as bare 12-digit numbers under a formula that read
|
|
831
|
+
* "88.82%".
|
|
832
|
+
*/
|
|
833
|
+
const rawMetricName: string | undefined =
|
|
834
|
+
(queryMatch.metricQueryData?.filterData?.metricName as
|
|
835
|
+
| string
|
|
836
|
+
| undefined) || undefined;
|
|
837
|
+
const nativeUnit: string | undefined = rawMetricName
|
|
838
|
+
? input.nativeUnitsByMetricName?.[rawMetricName.toLowerCase()]
|
|
839
|
+
: undefined;
|
|
720
840
|
components.push({
|
|
721
841
|
alias: normalizedAlias,
|
|
722
842
|
name,
|
|
723
|
-
unit: queryMatch.metricAliasData?.legendUnit || null,
|
|
843
|
+
unit: queryMatch.metricAliasData?.legendUnit || nativeUnit || null,
|
|
724
844
|
isFormula: false,
|
|
725
845
|
});
|
|
726
846
|
continue;
|
|
@@ -774,6 +894,7 @@ export default class MetricMonitorCriteria {
|
|
|
774
894
|
seriesFingerprint: string | undefined;
|
|
775
895
|
seriesLabels: JSONObject;
|
|
776
896
|
projectId: { toString(): string } | undefined;
|
|
897
|
+
nativeUnitsByMetricName?: { [key: string]: string } | undefined;
|
|
777
898
|
}): Promise<MetricSeriesEvaluationResult> {
|
|
778
899
|
const { criteriaFilter, metricContext } = input;
|
|
779
900
|
|
|
@@ -858,6 +979,19 @@ export default class MetricMonitorCriteria {
|
|
|
858
979
|
return noBreach();
|
|
859
980
|
}
|
|
860
981
|
|
|
982
|
+
/*
|
|
983
|
+
* The baseline is aggregated from the raw stored values, so it is in
|
|
984
|
+
* the metric's NATIVE unit — but the samples were already converted
|
|
985
|
+
* into the query's legendUnit by the worker. Rescale the baseline
|
|
986
|
+
* into the sample unit before anything compares against it or
|
|
987
|
+
* renders it; otherwise a "By" baseline read as "MB" puts the mean a
|
|
988
|
+
* million times too high — AnomalouslyHigh can never fire,
|
|
989
|
+
* AnomalouslyLow fires on every sample, and the root cause prints
|
|
990
|
+
* the mean in TB.
|
|
991
|
+
*/
|
|
992
|
+
const baselineUnit: string | undefined =
|
|
993
|
+
input.nativeUnitsByMetricName?.[metricContext.metricName.toLowerCase()];
|
|
994
|
+
|
|
861
995
|
const baselineByHour: Map<number, BaselineSummary> = new Map();
|
|
862
996
|
for (const hour of hoursInWindow) {
|
|
863
997
|
const baseline: BaselineSummary | null =
|
|
@@ -869,7 +1003,14 @@ export default class MetricMonitorCriteria {
|
|
|
869
1003
|
minSamples,
|
|
870
1004
|
});
|
|
871
1005
|
if (baseline && baseline.isReliable) {
|
|
872
|
-
baselineByHour.set(
|
|
1006
|
+
baselineByHour.set(
|
|
1007
|
+
hour,
|
|
1008
|
+
MetricMonitorCriteria.convertBaselineToUnit({
|
|
1009
|
+
baseline,
|
|
1010
|
+
fromUnit: baselineUnit,
|
|
1011
|
+
toUnit: metricContext.unit || undefined,
|
|
1012
|
+
}),
|
|
1013
|
+
);
|
|
873
1014
|
}
|
|
874
1015
|
}
|
|
875
1016
|
|
|
@@ -945,7 +1086,10 @@ export default class MetricMonitorCriteria {
|
|
|
945
1086
|
breachingSamples.push({
|
|
946
1087
|
value: sample.value,
|
|
947
1088
|
timestamp: ts,
|
|
948
|
-
attributes: MetricMonitorCriteria.extractLabelAttributes(
|
|
1089
|
+
attributes: MetricMonitorCriteria.extractLabelAttributes(
|
|
1090
|
+
sample,
|
|
1091
|
+
input.seriesLabels,
|
|
1092
|
+
),
|
|
949
1093
|
});
|
|
950
1094
|
if (!firstBreach) {
|
|
951
1095
|
firstBreach = { sample, baseline, sigma: observedSigma };
|
|
@@ -1035,6 +1179,45 @@ export default class MetricMonitorCriteria {
|
|
|
1035
1179
|
};
|
|
1036
1180
|
}
|
|
1037
1181
|
|
|
1182
|
+
/**
|
|
1183
|
+
* Rescale every quantity in a baseline from one unit into another.
|
|
1184
|
+
* Every supported unit family converts by a pure multiplier (no
|
|
1185
|
+
* offsets), so the spread terms (stddev, MAD) scale by the same
|
|
1186
|
+
* factor as the location terms. When the units match, either is
|
|
1187
|
+
* missing, or they aren't convertible, the baseline is returned
|
|
1188
|
+
* unchanged — the same pass-through the worker applies to samples.
|
|
1189
|
+
*/
|
|
1190
|
+
private static convertBaselineToUnit(input: {
|
|
1191
|
+
baseline: BaselineSummary;
|
|
1192
|
+
fromUnit: string | undefined;
|
|
1193
|
+
toUnit: string | undefined;
|
|
1194
|
+
}): BaselineSummary {
|
|
1195
|
+
const { baseline, fromUnit, toUnit } = input;
|
|
1196
|
+
|
|
1197
|
+
if (!fromUnit || !toUnit || fromUnit === toUnit) {
|
|
1198
|
+
return baseline;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
const convert: (value: number) => number = (value: number): number => {
|
|
1202
|
+
return MetricUnitUtil.convertToMetricUnit({
|
|
1203
|
+
value,
|
|
1204
|
+
fromUnit,
|
|
1205
|
+
metricUnit: toUnit,
|
|
1206
|
+
});
|
|
1207
|
+
};
|
|
1208
|
+
|
|
1209
|
+
return {
|
|
1210
|
+
...baseline,
|
|
1211
|
+
mean: convert(baseline.mean),
|
|
1212
|
+
stddev: convert(baseline.stddev),
|
|
1213
|
+
median: convert(baseline.median),
|
|
1214
|
+
p95: convert(baseline.p95),
|
|
1215
|
+
minObserved: convert(baseline.minObserved),
|
|
1216
|
+
maxObserved: convert(baseline.maxObserved),
|
|
1217
|
+
...(baseline.mad !== undefined ? { mad: convert(baseline.mad) } : {}),
|
|
1218
|
+
};
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1038
1221
|
private static anomalyBreaches(
|
|
1039
1222
|
value: number,
|
|
1040
1223
|
expectedHigh: number,
|
|
@@ -37,6 +37,7 @@ import SeriesResourceLinker, {
|
|
|
37
37
|
import MonitorDependencySuppression, {
|
|
38
38
|
DependencySuppressionResult,
|
|
39
39
|
} from "./MonitorDependencySuppression";
|
|
40
|
+
import PerSeriesResolutionRootCause from "./PerSeriesResolutionRootCause";
|
|
40
41
|
import { JSONObject } from "../../../Types/JSON";
|
|
41
42
|
import OneUptimeDate from "../../../Types/Date";
|
|
42
43
|
import MonitorEvaluationSummary from "../../../Types/Monitor/MonitorEvaluationSummary";
|
|
@@ -76,6 +77,13 @@ export default class MonitorAlert {
|
|
|
76
77
|
* code paths for grouped incoming-request monitors.
|
|
77
78
|
*/
|
|
78
79
|
disableSeriesAbsenceResolution?: boolean | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* Every criteria on the monitor, keyed by id. Used to name the
|
|
82
|
+
* criteria a recovered series no longer satisfies when its alert is
|
|
83
|
+
* resolved per series; without it the resolution text falls back to
|
|
84
|
+
* "the criteria that raised it".
|
|
85
|
+
*/
|
|
86
|
+
criteriaInstancesById?: Dictionary<MonitorCriteriaInstance> | undefined;
|
|
79
87
|
}): Promise<Array<Alert>> {
|
|
80
88
|
// check active alerts and if there are open alerts, do not create another alert.
|
|
81
89
|
const openAlerts: Array<Alert> = await AlertService.findBy({
|
|
@@ -123,10 +131,29 @@ export default class MonitorAlert {
|
|
|
123
131
|
if (shouldClose) {
|
|
124
132
|
resolvedAlertIds.add(openAlert.id!.toString());
|
|
125
133
|
|
|
134
|
+
/*
|
|
135
|
+
* A series resolved per series closes on a tick where other series
|
|
136
|
+
* may still breach, and input.rootCause describes those. Record why
|
|
137
|
+
* THIS series resolved instead. Whole-monitor resolves keep the
|
|
138
|
+
* caller's root cause.
|
|
139
|
+
*/
|
|
140
|
+
const isPerSeriesResolution: boolean =
|
|
141
|
+
input.breachingSeriesFingerprints !== undefined &&
|
|
142
|
+
Boolean(openAlert.seriesFingerprint);
|
|
143
|
+
|
|
144
|
+
const rootCause: string = isPerSeriesResolution
|
|
145
|
+
? PerSeriesResolutionRootCause.build({
|
|
146
|
+
seriesLabels: openAlert.seriesLabels,
|
|
147
|
+
createdCriteriaId:
|
|
148
|
+
openAlert.createdCriteriaId?.toString() || undefined,
|
|
149
|
+
criteriaInstancesById: input.criteriaInstancesById,
|
|
150
|
+
})
|
|
151
|
+
: input.rootCause;
|
|
152
|
+
|
|
126
153
|
// then resolve alert.
|
|
127
154
|
await this.resolveOpenAlert({
|
|
128
155
|
openAlert: openAlert,
|
|
129
|
-
rootCause:
|
|
156
|
+
rootCause: rootCause,
|
|
130
157
|
dataToProcess: input.dataToProcess,
|
|
131
158
|
});
|
|
132
159
|
|