@oneuptime/common 14.0.3 → 14.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Models/DatabaseModels/Alert.ts +55 -0
- package/Models/DatabaseModels/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/OpenTelemetryIngestService.ts +19 -0
- package/Server/Services/PodmanResourceService.ts +43 -2
- package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +107 -23
- package/Server/Services/ServiceService.ts +1 -1
- package/Server/Services/TelemetryUsageBillingService.ts +29 -2
- package/Server/Services/UserProjectSsoConsentService.ts +74 -0
- package/Server/Services/UserService.ts +14 -1
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +18 -0
- package/Server/Types/Database/QueryHelper.ts +30 -1
- package/Server/Utils/AI/Toolbox/ResourceTools.ts +69 -1
- package/Server/Utils/Database/AffectedResourceRelations.ts +6 -0
- package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +188 -6
- package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +2262 -755
- package/Server/Utils/Monitor/MonitorIncident.ts +28 -1
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +268 -6
- package/Server/Utils/Monitor/MonitorResource.ts +47 -11
- package/Server/Utils/Monitor/MonitorResourceContext.ts +1 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +239 -21
- package/Server/Utils/Monitor/PerSeriesResolutionRootCause.ts +43 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +291 -0
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +111 -12
- package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
- package/Server/Utils/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/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/ScheduledMaintenanceOverviewPage.test.tsx +2 -0
- package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +1085 -0
- 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/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
- package/Tests/Server/Services/OwnerRowUniqueness.test.ts +61 -9
- package/Tests/Server/Services/ReminderRuleLookupPostgres.test.ts +2250 -0
- package/Tests/Server/Services/ReminderRuleRefreshOpenSubjectsPaging.test.ts +653 -0
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +68 -20
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
- package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +9 -0
- package/Tests/Server/Services/UserProjectSsoConsentPostgres.test.ts +153 -0
- package/Tests/Server/Services/UserProjectSsoConsentService.test.ts +192 -0
- package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +71 -0
- package/Tests/Server/Services/UserSignupIdTakeoverPostgres.test.ts +238 -0
- package/Tests/Server/Services/WorkspaceNotificationSummaryHelpers.test.ts +592 -0
- package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +3 -0
- package/Tests/Server/Types/Database/EventOverlayScopePostgres.test.ts +1 -0
- package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +11 -0
- package/Tests/Server/Types/Database/Permissions/InfrastructureOwnershipScope.test.ts +8 -0
- package/Tests/Server/Types/Database/QueryHelperBooleanForCriteriaBackedRule.test.ts +1094 -0
- package/Tests/Server/Utils/AI/ResourceTools.test.ts +134 -0
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +41 -0
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +279 -9
- package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaDisplayContext.test.ts +933 -0
- package/Tests/Server/Utils/Monitor/DatabaseMaintenanceSuppression.test.ts +582 -0
- package/Tests/Server/Utils/Monitor/DatabaseServerMonitorLinking.test.ts +753 -0
- package/Tests/Server/Utils/Monitor/MonitorActionTimestamps.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertCriteriaReferences.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +119 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +60 -25
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorAffectedResourceEdgeCases.test.ts +1719 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorKubernetesAffectedResources.test.ts +1447 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorKubernetesRatioEmail.test.ts +352 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformMetricUnits.test.ts +717 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformRawScan.test.ts +2125 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformSeriesAffectedResources.test.ts +1288 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentCriteriaReferences.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentMemberRoleMembership.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +88 -0
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +205 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +62 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceDatabaseMaintenance.test.ts +803 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +133 -3
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/PerSeriesRecoveryResolution.test.ts +472 -1
- package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +236 -2
- package/Tests/Server/Utils/SeriesResourceLabels.test.ts +70 -0
- package/Tests/Server/Utils/StartServerProtobufContentType.test.ts +54 -0
- package/Tests/Server/Utils/Telemetry/DatabaseEndpointDiscovery.test.ts +1895 -0
- package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +7 -0
- package/Tests/Server/Utils/Telemetry/LogExceptionExtractorSeverityGate.test.ts +90 -0
- package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +570 -0
- package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +97 -2
- package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +1337 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +295 -0
- package/Tests/Types/AI/AIResourceContext.test.ts +30 -0
- package/Tests/Types/DatabaseServer/DatabaseContainerClassifier.test.ts +3644 -0
- package/Tests/Types/DatabaseServer/DatabaseContainerCommand.test.ts +340 -0
- package/Tests/Types/DatabaseServer/DatabaseContainerCommandCorpus.ts +826 -0
- package/Tests/Types/DatabaseServer/DatabaseContainerCommandPostgres.test.ts +150 -0
- package/Tests/Types/DatabaseServer/DatabaseEndpoint.test.ts +2657 -0
- package/Tests/Types/DatabaseServer/DatabaseServerDiscoverySource.test.ts +64 -0
- package/Tests/Types/DatabaseServer/DatabaseServerEntityKeys.test.ts +952 -0
- package/Tests/Types/DatabaseServer/DatabaseServerMetricCatalog.test.ts +1161 -0
- package/Tests/Types/DatabaseServer/DatabaseSystem.test.ts +1514 -0
- package/Tests/Types/DatabaseServer/DatabaseTelemetryResolver.test.ts +1558 -0
- package/Tests/Types/Monitor/CephAlertTemplates.test.ts +255 -6
- package/Tests/Types/Monitor/DatabaseAlertTemplates.test.ts +2254 -0
- package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +298 -0
- package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +271 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +253 -9
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +13 -5
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +4 -2
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +111 -2
- package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +61 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +114 -0
- package/Tests/Types/Monitor/Utils/KubernetesAgentEmittedMetrics.ts +181 -0
- package/Tests/Types/NetworkDevice/DiscoveredHostNamingStatus.test.ts +401 -0
- package/Tests/Types/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/ReplayPlayerChrome.test.tsx +19 -1
- 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/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/ValueFormatter.test.ts +50 -0
- package/Tests/tsconfig.json +16 -0
- package/Types/AI/AIResourceContext.ts +7 -0
- package/Types/Dashboard/DashboardTemplates.ts +2 -1
- package/Types/DatabaseServer/DatabaseConnectionSpan.ts +77 -0
- package/Types/DatabaseServer/DatabaseContainerClassifier.ts +2068 -0
- package/Types/DatabaseServer/DatabaseContainerCommand.ts +801 -0
- package/Types/DatabaseServer/DatabaseEndpoint.ts +1943 -0
- package/Types/DatabaseServer/DatabaseServerDiscoverySource.ts +68 -0
- package/Types/DatabaseServer/DatabaseServerMetricCatalog.ts +966 -0
- package/Types/DatabaseServer/DatabaseSystem.ts +2124 -0
- package/Types/DatabaseServer/DatabaseTelemetryResolver.ts +555 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/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/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/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/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/OpenTelemetryIngestService.js +24 -9
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PodmanResourceService.js +30 -3
- package/build/dist/Server/Services/PodmanResourceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +75 -23
- package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/ServiceService.js +1 -1
- package/build/dist/Server/Services/ServiceService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +23 -2
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/UserProjectSsoConsentService.js +79 -0
- package/build/dist/Server/Services/UserProjectSsoConsentService.js.map +1 -0
- package/build/dist/Server/Services/UserService.js +13 -1
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +18 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +26 -1
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +46 -0
- package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
- package/build/dist/Server/Utils/Database/AffectedResourceRelations.js +6 -0
- package/build/dist/Server/Utils/Database/AffectedResourceRelations.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +134 -13
- package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +22 -6
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +1489 -524
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +196 -6
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +36 -9
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +175 -17
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/PerSeriesResolutionRootCause.js +29 -0
- package/build/dist/Server/Utils/Monitor/PerSeriesResolutionRootCause.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +211 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +82 -10
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +20 -4
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js +442 -0
- package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +5 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +15 -1
- package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +121 -5
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +12 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +438 -36
- package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +12 -0
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +17 -18
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +16 -10
- package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -1
- package/build/dist/Types/AI/AIResourceContext.js +7 -0
- package/build/dist/Types/AI/AIResourceContext.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +2 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/DatabaseServer/DatabaseConnectionSpan.js +71 -0
- package/build/dist/Types/DatabaseServer/DatabaseConnectionSpan.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseContainerClassifier.js +1462 -0
- package/build/dist/Types/DatabaseServer/DatabaseContainerClassifier.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseContainerCommand.js +691 -0
- package/build/dist/Types/DatabaseServer/DatabaseContainerCommand.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js +1407 -0
- package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseServerDiscoverySource.js +60 -0
- package/build/dist/Types/DatabaseServer/DatabaseServerDiscoverySource.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseServerMetricCatalog.js +804 -0
- package/build/dist/Types/DatabaseServer/DatabaseServerMetricCatalog.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseSystem.js +1860 -0
- package/build/dist/Types/DatabaseServer/DatabaseSystem.js.map +1 -0
- package/build/dist/Types/DatabaseServer/DatabaseTelemetryResolver.js +406 -0
- package/build/dist/Types/DatabaseServer/DatabaseTelemetryResolver.js.map +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/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/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/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/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,8 +4,13 @@ import {
|
|
|
4
4
|
getAllKubernetesAlertTemplates,
|
|
5
5
|
getKubernetesAlertTemplateById,
|
|
6
6
|
} from "../../../Types/Monitor/KubernetesAlertTemplates";
|
|
7
|
+
import {
|
|
8
|
+
KubernetesMetricDefinition,
|
|
9
|
+
getKubernetesMetricByMetricName,
|
|
10
|
+
} from "../../../Types/Monitor/KubernetesMetricCatalog";
|
|
7
11
|
import MonitorStep from "../../../Types/Monitor/MonitorStep";
|
|
8
12
|
import { hasRecoveryDeadBand } from "./Utils/RecommendationCriteriaAssertions";
|
|
13
|
+
import { AGENT_EMITTED_METRIC_NAMES } from "./Utils/KubernetesAgentEmittedMetrics";
|
|
9
14
|
import MonitorStepKubernetesMonitor from "../../../Types/Monitor/MonitorStepKubernetesMonitor";
|
|
10
15
|
import MetricsAggregationType from "../../../Types/Metrics/MetricsAggregationType";
|
|
11
16
|
import { FilterType } from "../../../Types/Monitor/CriteriaFilter";
|
|
@@ -953,3 +958,296 @@ describe("KubernetesAlertTemplates - grouped alerts point at the right field", (
|
|
|
953
958
|
}
|
|
954
959
|
});
|
|
955
960
|
});
|
|
961
|
+
|
|
962
|
+
/*
|
|
963
|
+
* BUG: a k8s-high-memory incident email listed each node with a value of
|
|
964
|
+
* `257760964608` — bytes of `k8s.node.allocatable_memory`, with no unit.
|
|
965
|
+
* The "Affected Resources" list takes its unit (and friendly name) from
|
|
966
|
+
* KubernetesMetricCatalog by metric name, and that metric — like seven
|
|
967
|
+
* others the templates query — had no catalog entry, so the value went
|
|
968
|
+
* out bare.
|
|
969
|
+
*
|
|
970
|
+
* Enumerated over every template and every query, so a template added or
|
|
971
|
+
* rewired later against a metric the catalog does not know fails here
|
|
972
|
+
* rather than in an on-call engineer's inbox.
|
|
973
|
+
*/
|
|
974
|
+
describe("KubernetesAlertTemplates - references only catalog metrics", () => {
|
|
975
|
+
/*
|
|
976
|
+
* k8s.node.cpu.usage (the High Node CPU Utilization numerator) is not a
|
|
977
|
+
* metric the kubeletstats receiver the agent pins (0.96.0) emits — see
|
|
978
|
+
* Utils/KubernetesAgentEmittedMetrics — so the catalog, which only
|
|
979
|
+
* offers what the agent sends, deliberately leaves it out. The template
|
|
980
|
+
* querying it is a separate defect; until it is fixed it is the one
|
|
981
|
+
* exception here.
|
|
982
|
+
*/
|
|
983
|
+
const NOT_EMITTED_BY_THE_PINNED_AGENT: ReadonlySet<string> = new Set<string>([
|
|
984
|
+
"k8s.node.cpu.usage",
|
|
985
|
+
]);
|
|
986
|
+
|
|
987
|
+
function getMetricNames(template: KubernetesAlertTemplate): Array<string> {
|
|
988
|
+
return (
|
|
989
|
+
getKubernetesMonitor(template.getMonitorStep(buildArgs()))
|
|
990
|
+
.metricViewConfig.queryConfigs as Array<any>
|
|
991
|
+
).map((query: any) => {
|
|
992
|
+
return query.metricQueryData.filterData.metricName as string;
|
|
993
|
+
});
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
test("every template queries at least one metric (guards the guard)", () => {
|
|
997
|
+
for (const template of getAllKubernetesAlertTemplates()) {
|
|
998
|
+
expect(getMetricNames(template).length).toBeGreaterThan(0);
|
|
999
|
+
}
|
|
1000
|
+
});
|
|
1001
|
+
|
|
1002
|
+
test.each(
|
|
1003
|
+
getAllKubernetesAlertTemplates().map((t: KubernetesAlertTemplate) => {
|
|
1004
|
+
return [t.id, t];
|
|
1005
|
+
}),
|
|
1006
|
+
)("%s references only catalog metrics", (_id: unknown, template: unknown) => {
|
|
1007
|
+
for (const metricName of getMetricNames(
|
|
1008
|
+
template as KubernetesAlertTemplate,
|
|
1009
|
+
)) {
|
|
1010
|
+
if (NOT_EMITTED_BY_THE_PINNED_AGENT.has(metricName)) {
|
|
1011
|
+
continue;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
const entry: KubernetesMetricDefinition | undefined =
|
|
1015
|
+
getKubernetesMetricByMetricName(metricName);
|
|
1016
|
+
|
|
1017
|
+
expect({ metricName, inCatalog: entry !== undefined }).toEqual({
|
|
1018
|
+
metricName,
|
|
1019
|
+
inCatalog: true,
|
|
1020
|
+
});
|
|
1021
|
+
}
|
|
1022
|
+
});
|
|
1023
|
+
|
|
1024
|
+
test("the metrics that were missing now resolve, with a unit", () => {
|
|
1025
|
+
const expectedUnits: Record<string, string> = {
|
|
1026
|
+
"k8s.node.allocatable_memory": "bytes",
|
|
1027
|
+
"k8s.node.allocatable_cpu": "cores",
|
|
1028
|
+
"k8s.pod.memory_limit_utilization": "ratio",
|
|
1029
|
+
"k8s.pod.cpu_limit_utilization": "ratio",
|
|
1030
|
+
// A 0/1 flag: no dimension to print, deliberately.
|
|
1031
|
+
etcd_server_has_leader: "",
|
|
1032
|
+
apiserver_current_inflight_requests: "count",
|
|
1033
|
+
scheduler_pending_pods: "count",
|
|
1034
|
+
};
|
|
1035
|
+
|
|
1036
|
+
for (const [metricName, unit] of Object.entries(expectedUnits)) {
|
|
1037
|
+
expect(getKubernetesMetricByMetricName(metricName)?.unit).toBe(unit);
|
|
1038
|
+
}
|
|
1039
|
+
});
|
|
1040
|
+
});
|
|
1041
|
+
|
|
1042
|
+
/*
|
|
1043
|
+
* BUG: k8s-deployment-replica-mismatch queried
|
|
1044
|
+
* `k8s.deployment.unavailable_replicas`. The agent's k8s_cluster receiver
|
|
1045
|
+
* has no such series — it reports a Deployment as `k8s.deployment.desired`
|
|
1046
|
+
* and `k8s.deployment.available` — and the chart renames nothing, so the
|
|
1047
|
+
* query matched zero rows and the monitor could never fire. The shortfall
|
|
1048
|
+
* is now computed per deployment as desired - available.
|
|
1049
|
+
*/
|
|
1050
|
+
describe("KubernetesAlertTemplates - deployment replica mismatch", () => {
|
|
1051
|
+
const ID: string = "k8s-deployment-replica-mismatch";
|
|
1052
|
+
|
|
1053
|
+
test("queries only metrics the shipped agent emits", () => {
|
|
1054
|
+
const queryConfigs: Array<any> = getQueryConfigs(ID);
|
|
1055
|
+
|
|
1056
|
+
expect(queryConfigs.length).toBeGreaterThan(0);
|
|
1057
|
+
|
|
1058
|
+
for (const query of queryConfigs) {
|
|
1059
|
+
const metricName: string = query.metricQueryData.filterData.metricName;
|
|
1060
|
+
|
|
1061
|
+
expect(
|
|
1062
|
+
`${metricName} emitted: ${AGENT_EMITTED_METRIC_NAMES.has(metricName)}`,
|
|
1063
|
+
).toBe(`${metricName} emitted: true`);
|
|
1064
|
+
}
|
|
1065
|
+
});
|
|
1066
|
+
|
|
1067
|
+
test("computes desired - available, per namespace + deployment, on both queries", () => {
|
|
1068
|
+
const monitor: MonitorStepKubernetesMonitor = getKubernetesMonitor(
|
|
1069
|
+
getStep(ID),
|
|
1070
|
+
);
|
|
1071
|
+
const queryConfigs: Array<any> = monitor.metricViewConfig
|
|
1072
|
+
.queryConfigs as Array<any>;
|
|
1073
|
+
const formulaConfigs: Array<any> = monitor.metricViewConfig
|
|
1074
|
+
.formulaConfigs as Array<any>;
|
|
1075
|
+
|
|
1076
|
+
expect(queryConfigs).toHaveLength(2);
|
|
1077
|
+
expect(formulaConfigs).toHaveLength(1);
|
|
1078
|
+
|
|
1079
|
+
const [desired, available] = queryConfigs;
|
|
1080
|
+
|
|
1081
|
+
expect(desired.metricQueryData.filterData.metricName).toBe(
|
|
1082
|
+
"k8s.deployment.desired",
|
|
1083
|
+
);
|
|
1084
|
+
expect(desired.metricAliasData.metricVariable).toBe("desired_replicas");
|
|
1085
|
+
expect(available.metricQueryData.filterData.metricName).toBe(
|
|
1086
|
+
"k8s.deployment.available",
|
|
1087
|
+
);
|
|
1088
|
+
expect(available.metricAliasData.metricVariable).toBe("available_replicas");
|
|
1089
|
+
|
|
1090
|
+
expect(formulaConfigs[0].metricFormulaData.metricFormula).toBe(
|
|
1091
|
+
"desired_replicas - available_replicas",
|
|
1092
|
+
);
|
|
1093
|
+
// A pod count. "%" would render a shortfall of 2 replicas as "2%".
|
|
1094
|
+
expect(formulaConfigs[0].metricAliasData.legendUnit).toBe("");
|
|
1095
|
+
|
|
1096
|
+
for (const query of queryConfigs) {
|
|
1097
|
+
/*
|
|
1098
|
+
* Both sides carry exactly this key set, or the formula's
|
|
1099
|
+
* fingerprint join finds nothing and the monitor goes silent.
|
|
1100
|
+
*/
|
|
1101
|
+
expect(query.metricQueryData.groupByAttributeKeys).toEqual([
|
|
1102
|
+
"resource.k8s.namespace.name",
|
|
1103
|
+
"resource.k8s.deployment.name",
|
|
1104
|
+
]);
|
|
1105
|
+
/*
|
|
1106
|
+
* One series per deployment per side, from one scrape: Avg is the
|
|
1107
|
+
* per-minute count. Sum would scale the shortfall by scrape count.
|
|
1108
|
+
*/
|
|
1109
|
+
expect(query.metricQueryData.filterData.aggegationType).toBe(
|
|
1110
|
+
MetricsAggregationType.Avg,
|
|
1111
|
+
);
|
|
1112
|
+
// An attribute filter nothing stamps would match zero rows.
|
|
1113
|
+
expect(query.metricQueryData.filterData.attributes).toEqual({});
|
|
1114
|
+
}
|
|
1115
|
+
});
|
|
1116
|
+
|
|
1117
|
+
test("fires on any shortfall and recovers at or below zero", () => {
|
|
1118
|
+
const [offline, online] = getCriteriaInstances(ID);
|
|
1119
|
+
const offlineFilter: any = offline.data.filters[0];
|
|
1120
|
+
const onlineFilter: any = online.data.filters[0];
|
|
1121
|
+
|
|
1122
|
+
// Both compare the FORMULA, never a raw operand.
|
|
1123
|
+
expect(offlineFilter.metricMonitorOptions.metricAlias).toBe(
|
|
1124
|
+
"replica_shortfall",
|
|
1125
|
+
);
|
|
1126
|
+
expect(onlineFilter.metricMonitorOptions.metricAlias).toBe(
|
|
1127
|
+
"replica_shortfall",
|
|
1128
|
+
);
|
|
1129
|
+
|
|
1130
|
+
expect(offlineFilter.filterType).toBe(FilterType.GreaterThan);
|
|
1131
|
+
expect(offlineFilter.value).toBe(0);
|
|
1132
|
+
|
|
1133
|
+
/*
|
|
1134
|
+
* `<= 0`, not `= 0`: a surge rollout makes available exceed desired,
|
|
1135
|
+
* and a negative shortfall that matched neither criteria would leave
|
|
1136
|
+
* the monitor stuck in whatever status it last had.
|
|
1137
|
+
*/
|
|
1138
|
+
expect(onlineFilter.filterType).toBe(FilterType.LessThanOrEqualTo);
|
|
1139
|
+
expect(onlineFilter.value).toBe(0);
|
|
1140
|
+
|
|
1141
|
+
expect(offline.data.createIncidents).toBe(true);
|
|
1142
|
+
expect(online.data.createIncidents).toBe(false);
|
|
1143
|
+
});
|
|
1144
|
+
|
|
1145
|
+
test("names no metric the receiver does not have", () => {
|
|
1146
|
+
const template: KubernetesAlertTemplate | undefined =
|
|
1147
|
+
getKubernetesAlertTemplateById(ID);
|
|
1148
|
+
const [offline] = getCriteriaInstances(ID);
|
|
1149
|
+
|
|
1150
|
+
for (const text of [
|
|
1151
|
+
template!.description,
|
|
1152
|
+
offline.data.name as string,
|
|
1153
|
+
offline.data.description as string,
|
|
1154
|
+
offline.data.incidents[0].description as string,
|
|
1155
|
+
]) {
|
|
1156
|
+
expect(text).not.toContain("unavailable_replicas");
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
expect(template!.description).toContain("k8s.deployment.desired");
|
|
1160
|
+
expect(template!.description).toContain("k8s.deployment.available");
|
|
1161
|
+
});
|
|
1162
|
+
|
|
1163
|
+
/*
|
|
1164
|
+
* The same bug, generalised: any template reading a k8s_cluster or
|
|
1165
|
+
* kubeletstats series must read one the agent actually sends. That
|
|
1166
|
+
* covers node, pod and container metrics too, including the kubeletstats
|
|
1167
|
+
* ones that are off upstream and on only because the chart enables them
|
|
1168
|
+
* (see the high node CPU block below). Undotted names come from the
|
|
1169
|
+
* chart's Prometheus scrapes (control plane, cAdvisor, kube-state-metrics),
|
|
1170
|
+
* which this list does not cover.
|
|
1171
|
+
*/
|
|
1172
|
+
test("no template queries a k8s_cluster or kubeletstats metric the agent does not emit", () => {
|
|
1173
|
+
const receiverMetric: RegExp = /^(k8s|container)\./;
|
|
1174
|
+
|
|
1175
|
+
for (const template of getAllKubernetesAlertTemplates()) {
|
|
1176
|
+
for (const query of getQueryConfigs(template.id)) {
|
|
1177
|
+
const metricName: string = query.metricQueryData.filterData.metricName;
|
|
1178
|
+
|
|
1179
|
+
if (!receiverMetric.test(metricName)) {
|
|
1180
|
+
continue;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
expect(`${template.id}: ${metricName}`).toBe(
|
|
1184
|
+
AGENT_EMITTED_METRIC_NAMES.has(metricName)
|
|
1185
|
+
? `${template.id}: ${metricName}`
|
|
1186
|
+
: "a metric the agent emits",
|
|
1187
|
+
);
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
});
|
|
1191
|
+
});
|
|
1192
|
+
|
|
1193
|
+
/*
|
|
1194
|
+
* BUG: k8s-high-cpu divides `k8s.node.cpu.usage` by
|
|
1195
|
+
* `k8s.node.allocatable_cpu`. The kubeletstats receiver in the collector the
|
|
1196
|
+
* agent chart ships (0.96.0) defines `k8s.node.cpu.usage` but leaves it
|
|
1197
|
+
* `enabled: false`, and the chart only switched on the
|
|
1198
|
+
* *_limit/_request_utilization family, so the numerator never arrived: the
|
|
1199
|
+
* formula had no operand and the monitor could never fire. The chart now
|
|
1200
|
+
* enables it unconditionally (HelmChart/Public/kubernetes-agent/tests/
|
|
1201
|
+
* kubeletstats-cpu-usage_test.yaml pins that), and these tests pin the
|
|
1202
|
+
* template to the names the agent sends.
|
|
1203
|
+
*/
|
|
1204
|
+
describe("KubernetesAlertTemplates - high node CPU", () => {
|
|
1205
|
+
const ID: string = "k8s-high-cpu";
|
|
1206
|
+
|
|
1207
|
+
test("queries only metrics the shipped agent emits", () => {
|
|
1208
|
+
const queryConfigs: Array<any> = getQueryConfigs(ID);
|
|
1209
|
+
|
|
1210
|
+
expect(queryConfigs.length).toBeGreaterThan(0);
|
|
1211
|
+
|
|
1212
|
+
for (const query of queryConfigs) {
|
|
1213
|
+
const metricName: string = query.metricQueryData.filterData.metricName;
|
|
1214
|
+
|
|
1215
|
+
expect(
|
|
1216
|
+
`${metricName} emitted: ${AGENT_EMITTED_METRIC_NAMES.has(metricName)}`,
|
|
1217
|
+
).toBe(`${metricName} emitted: true`);
|
|
1218
|
+
}
|
|
1219
|
+
});
|
|
1220
|
+
|
|
1221
|
+
test("divides node CPU usage by node allocatable CPU, both in cores", () => {
|
|
1222
|
+
const monitor: MonitorStepKubernetesMonitor = getKubernetesMonitor(
|
|
1223
|
+
getStep(ID),
|
|
1224
|
+
);
|
|
1225
|
+
const queryConfigs: Array<any> = monitor.metricViewConfig
|
|
1226
|
+
.queryConfigs as Array<any>;
|
|
1227
|
+
const formulaConfigs: Array<any> = monitor.metricViewConfig
|
|
1228
|
+
.formulaConfigs as Array<any>;
|
|
1229
|
+
|
|
1230
|
+
/*
|
|
1231
|
+
* Not `k8s.node.cpu.utilization`, although the receiver sends it by
|
|
1232
|
+
* default with the same value (cores, despite the name). It is
|
|
1233
|
+
* deprecated upstream in favour of `k8s.node.cpu.usage`, and later
|
|
1234
|
+
* collectors switch it off and then drop it, so reading it would put
|
|
1235
|
+
* this monitor back where it started on the next collector bump.
|
|
1236
|
+
*/
|
|
1237
|
+
expect(
|
|
1238
|
+
queryConfigs.map((query: any) => {
|
|
1239
|
+
return query.metricQueryData.filterData.metricName;
|
|
1240
|
+
}),
|
|
1241
|
+
).toEqual(["k8s.node.cpu.usage", "k8s.node.allocatable_cpu"]);
|
|
1242
|
+
expect(
|
|
1243
|
+
queryConfigs.map((query: any) => {
|
|
1244
|
+
return query.metricAliasData.metricVariable;
|
|
1245
|
+
}),
|
|
1246
|
+
).toEqual(["used_cpu", "alloc_cpu"]);
|
|
1247
|
+
|
|
1248
|
+
expect(formulaConfigs).toHaveLength(1);
|
|
1249
|
+
expect(formulaConfigs[0].metricFormulaData.metricFormula).toBe(
|
|
1250
|
+
"(used_cpu / alloc_cpu) * 100",
|
|
1251
|
+
);
|
|
1252
|
+
});
|
|
1253
|
+
});
|
|
@@ -5,9 +5,17 @@ import {
|
|
|
5
5
|
getAllKubernetesMetrics,
|
|
6
6
|
getKubernetesMetricById,
|
|
7
7
|
getKubernetesMetricByMetricName,
|
|
8
|
+
getKubernetesMetricCategoryLabel,
|
|
8
9
|
getKubernetesMetricsByCategory,
|
|
9
10
|
} from "../../../Types/Monitor/KubernetesMetricCatalog";
|
|
11
|
+
import { KubernetesResourceScope } from "../../../Types/Monitor/MonitorStepKubernetesMonitor";
|
|
10
12
|
import AggregationType from "../../../Types/BaseDatabase/AggregationType";
|
|
13
|
+
import MetricValueFormatter from "../../../Utils/Monitor/MetricValueFormatter";
|
|
14
|
+
import {
|
|
15
|
+
AGENT_COLLECTOR_IMAGE_TAG,
|
|
16
|
+
AGENT_EMITTED_METRIC_NAMES,
|
|
17
|
+
readAgentChartValues,
|
|
18
|
+
} from "./Utils/KubernetesAgentEmittedMetrics";
|
|
11
19
|
import { describe, expect, test } from "@jest/globals";
|
|
12
20
|
|
|
13
21
|
describe("KubernetesMetricCatalog", () => {
|
|
@@ -304,4 +312,267 @@ describe("KubernetesMetricCatalog", () => {
|
|
|
304
312
|
}
|
|
305
313
|
});
|
|
306
314
|
});
|
|
315
|
+
|
|
316
|
+
/*
|
|
317
|
+
* The catalog's `unit` is what an incident email prints next to a value
|
|
318
|
+
* in its "Affected Resources" list. An entry that carries a physical
|
|
319
|
+
* quantity without declaring it sends the reader a bare
|
|
320
|
+
* `257760964608` where "258 GB" was meant. These rules are keyed on the
|
|
321
|
+
* metric NAME, so an entry added later is held to them automatically.
|
|
322
|
+
*
|
|
323
|
+
* The one exception on both rules is a kubeletstats `*_utilization`
|
|
324
|
+
* (underscore) metric: usage divided by a limit or request, a 0-1 ratio
|
|
325
|
+
* that renders as a percentage. The dot-spelled `*.cpu.utilization`
|
|
326
|
+
* gauges are NOT ratios — they are misnamed cores gauges — and are held
|
|
327
|
+
* to the cores rule like any other CPU metric.
|
|
328
|
+
*/
|
|
329
|
+
describe("physical quantities carry their unit", () => {
|
|
330
|
+
const utilizationRatioName: RegExp = /_utilization$/;
|
|
331
|
+
const byteQuantityName: RegExp = /memory|filesystem|_bytes$/;
|
|
332
|
+
const cpuQuantityName: RegExp = /cpu/;
|
|
333
|
+
|
|
334
|
+
const isUtilizationRatio: (metricName: string) => boolean = (
|
|
335
|
+
metricName: string,
|
|
336
|
+
): boolean => {
|
|
337
|
+
return utilizationRatioName.test(metricName);
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
const isByteQuantity: (metricName: string) => boolean = (
|
|
341
|
+
metricName: string,
|
|
342
|
+
): boolean => {
|
|
343
|
+
return byteQuantityName.test(metricName);
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
const isCpuQuantity: (metricName: string) => boolean = (
|
|
347
|
+
metricName: string,
|
|
348
|
+
): boolean => {
|
|
349
|
+
return cpuQuantityName.test(metricName);
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
test("the rules below match real entries (guards the guard)", () => {
|
|
353
|
+
const names: Array<string> = allMetrics.map(
|
|
354
|
+
(m: KubernetesMetricDefinition) => {
|
|
355
|
+
return m.metricName;
|
|
356
|
+
},
|
|
357
|
+
);
|
|
358
|
+
|
|
359
|
+
expect(names.filter(isByteQuantity).length).toBeGreaterThanOrEqual(8);
|
|
360
|
+
expect(names.filter(isCpuQuantity).length).toBeGreaterThanOrEqual(6);
|
|
361
|
+
expect(names.filter(isUtilizationRatio).length).toBeGreaterThanOrEqual(2);
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
test("every memory / filesystem / *_bytes metric is in bytes", () => {
|
|
365
|
+
for (const metric of allMetrics) {
|
|
366
|
+
if (
|
|
367
|
+
!isByteQuantity(metric.metricName) ||
|
|
368
|
+
isUtilizationRatio(metric.metricName)
|
|
369
|
+
) {
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
expect({ metricName: metric.metricName, unit: metric.unit }).toEqual({
|
|
374
|
+
metricName: metric.metricName,
|
|
375
|
+
unit: "bytes",
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
test("every CPU usage / allocatable / request / limit metric is in cores", () => {
|
|
381
|
+
for (const metric of allMetrics) {
|
|
382
|
+
if (
|
|
383
|
+
!isCpuQuantity(metric.metricName) ||
|
|
384
|
+
isUtilizationRatio(metric.metricName)
|
|
385
|
+
) {
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
expect({ metricName: metric.metricName, unit: metric.unit }).toEqual({
|
|
390
|
+
metricName: metric.metricName,
|
|
391
|
+
unit: "cores",
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
test("every *_utilization metric is a ratio, never a percent", () => {
|
|
397
|
+
for (const metric of allMetrics) {
|
|
398
|
+
if (!isUtilizationRatio(metric.metricName)) {
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/*
|
|
403
|
+
* "ratio" is what MetricValueFormatter turns into a percentage on a
|
|
404
|
+
* `_utilization` name. "%" would print 0.93 as "0.93%".
|
|
405
|
+
*/
|
|
406
|
+
expect({ metricName: metric.metricName, unit: metric.unit }).toEqual({
|
|
407
|
+
metricName: metric.metricName,
|
|
408
|
+
unit: "ratio",
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
/*
|
|
415
|
+
* etcd, the API server and the scheduler are scraped as Prometheus
|
|
416
|
+
* metrics and are one cluster-wide signal each, so they get a category
|
|
417
|
+
* of their own and the Cluster scope.
|
|
418
|
+
*/
|
|
419
|
+
describe("control-plane metrics", () => {
|
|
420
|
+
test("have a category of their own", () => {
|
|
421
|
+
expect(allCategories).toContain("ControlPlane");
|
|
422
|
+
expect(
|
|
423
|
+
getKubernetesMetricsByCategory("ControlPlane")
|
|
424
|
+
.map((m: KubernetesMetricDefinition) => {
|
|
425
|
+
return m.metricName;
|
|
426
|
+
})
|
|
427
|
+
.sort(),
|
|
428
|
+
).toEqual([
|
|
429
|
+
"apiserver_current_inflight_requests",
|
|
430
|
+
"etcd_server_has_leader",
|
|
431
|
+
"scheduler_pending_pods",
|
|
432
|
+
]);
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
/*
|
|
436
|
+
* The category value matches the alert templates' "ControlPlane"; the
|
|
437
|
+
* metric picker titles its group with the label, not the identifier.
|
|
438
|
+
*/
|
|
439
|
+
test("are titled 'Control Plane' in a picker, other categories as-is", () => {
|
|
440
|
+
expect(getKubernetesMetricCategoryLabel("ControlPlane")).toBe(
|
|
441
|
+
"Control Plane",
|
|
442
|
+
);
|
|
443
|
+
|
|
444
|
+
for (const category of allCategories) {
|
|
445
|
+
if (category !== "ControlPlane") {
|
|
446
|
+
expect(getKubernetesMetricCategoryLabel(category)).toBe(category);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
test("are scoped to the whole cluster", () => {
|
|
452
|
+
for (const metric of getKubernetesMetricsByCategory("ControlPlane")) {
|
|
453
|
+
expect(metric.defaultResourceScope).toBe(
|
|
454
|
+
KubernetesResourceScope.Cluster,
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
test("etcd leadership is a flag with no unit, watched at its minimum", () => {
|
|
460
|
+
const hasLeader: KubernetesMetricDefinition | undefined =
|
|
461
|
+
getKubernetesMetricByMetricName("etcd_server_has_leader");
|
|
462
|
+
|
|
463
|
+
expect(hasLeader?.unit).toBe("");
|
|
464
|
+
expect(hasLeader?.defaultAggregation).toBe(AggregationType.Min);
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
/*
|
|
469
|
+
* What the entries the alert templates were missing look like in a
|
|
470
|
+
* notification, through the same formatter the incident email uses.
|
|
471
|
+
*/
|
|
472
|
+
describe("the entries the alert templates needed render human-readable", () => {
|
|
473
|
+
function formatFor(metricName: string, value: number): string {
|
|
474
|
+
const entry: KubernetesMetricDefinition | undefined =
|
|
475
|
+
getKubernetesMetricByMetricName(metricName);
|
|
476
|
+
|
|
477
|
+
expect(entry).toBeDefined();
|
|
478
|
+
|
|
479
|
+
return MetricValueFormatter.format({
|
|
480
|
+
value: value,
|
|
481
|
+
unit: entry!.unit,
|
|
482
|
+
metricName: entry!.metricName,
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
test("allocatable memory reads in GB, not as twelve digits", () => {
|
|
487
|
+
expect(formatFor("k8s.node.allocatable_memory", 257760964608)).toBe(
|
|
488
|
+
"258 GB",
|
|
489
|
+
);
|
|
490
|
+
expect(formatFor("k8s.node.allocatable_memory", 8235155456)).toBe(
|
|
491
|
+
"8.24 GB",
|
|
492
|
+
);
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
test("allocatable CPU reads in cores", () => {
|
|
496
|
+
expect(formatFor("k8s.node.allocatable_cpu", 31.85)).toBe("31.85 cores");
|
|
497
|
+
expect(formatFor("k8s.node.allocatable_cpu", 4)).toBe("4 cores");
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
test("the pod limit utilizations read as a percentage of the limit", () => {
|
|
501
|
+
expect(formatFor("k8s.pod.memory_limit_utilization", 0.93)).toBe(
|
|
502
|
+
"93.00%",
|
|
503
|
+
);
|
|
504
|
+
expect(formatFor("k8s.pod.cpu_limit_utilization", 0.5)).toBe("50.00%");
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
test("the control-plane flag and counts stay bare numbers", () => {
|
|
508
|
+
expect(formatFor("etcd_server_has_leader", 0)).toBe("0");
|
|
509
|
+
expect(formatFor("etcd_server_has_leader", 1)).toBe("1");
|
|
510
|
+
expect(formatFor("apiserver_current_inflight_requests", 212)).toBe("212");
|
|
511
|
+
expect(formatFor("scheduler_pending_pods", 3)).toBe("3");
|
|
512
|
+
});
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
/*
|
|
516
|
+
* BUG: the Workload entries were named for the Deployment/StatefulSet
|
|
517
|
+
* STATUS fields — `k8s.deployment.available_replicas`,
|
|
518
|
+
* `.desired_replicas`, `.unavailable_replicas`,
|
|
519
|
+
* `k8s.statefulset.ready_replicas` — but the agent's k8s_cluster receiver
|
|
520
|
+
* emits `k8s.deployment.available`, `k8s.deployment.desired` and
|
|
521
|
+
* `k8s.statefulset.ready_pods`, and no "unavailable" series at all. The
|
|
522
|
+
* chart renames nothing, so every one of those entries charted and
|
|
523
|
+
* alerted on a metric that never arrives: an empty chart, and a monitor
|
|
524
|
+
* that is never Met, with no error anywhere.
|
|
525
|
+
*/
|
|
526
|
+
describe("every entry names a metric the shipped agent emits", () => {
|
|
527
|
+
test("the agent chart still pins the collector these names were read from", () => {
|
|
528
|
+
/*
|
|
529
|
+
* AGENT_EMITTED_METRIC_NAMES is the receivers' metadata.yaml at this
|
|
530
|
+
* collector version. Bumping the image fails here until that list is
|
|
531
|
+
* re-read — receivers rename metrics between versions.
|
|
532
|
+
*/
|
|
533
|
+
const values: Record<string, any> = readAgentChartValues();
|
|
534
|
+
|
|
535
|
+
expect(values["image"]["repository"]).toBe(
|
|
536
|
+
"otel/opentelemetry-collector-contrib",
|
|
537
|
+
);
|
|
538
|
+
expect(String(values["image"]["tag"])).toBe(AGENT_COLLECTOR_IMAGE_TAG);
|
|
539
|
+
// The kubeletstats *_utilization names in the list assume this default.
|
|
540
|
+
expect(values["kubeletstats"]["utilizationMetrics"]["enabled"]).toBe(
|
|
541
|
+
true,
|
|
542
|
+
);
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
test.each(
|
|
546
|
+
allMetrics.map((m: KubernetesMetricDefinition) => {
|
|
547
|
+
return [m.id, m.metricName];
|
|
548
|
+
}),
|
|
549
|
+
)("%s queries %s, which the agent emits", (_id: string, name: string) => {
|
|
550
|
+
expect(AGENT_EMITTED_METRIC_NAMES.has(name)).toBe(true);
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
test("deployment replica entries use the receiver's names", () => {
|
|
554
|
+
expect(getKubernetesMetricById("deployment-available-replicas")).toEqual(
|
|
555
|
+
expect.objectContaining({ metricName: "k8s.deployment.available" }),
|
|
556
|
+
);
|
|
557
|
+
expect(getKubernetesMetricById("deployment-desired-replicas")).toEqual(
|
|
558
|
+
expect.objectContaining({ metricName: "k8s.deployment.desired" }),
|
|
559
|
+
);
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
test("the StatefulSet ready entry uses the receiver's name", () => {
|
|
563
|
+
expect(getKubernetesMetricById("statefulset-ready-replicas")).toEqual(
|
|
564
|
+
expect.objectContaining({ metricName: "k8s.statefulset.ready_pods" }),
|
|
565
|
+
);
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
test("no entry offers an unavailable-replicas series the receiver does not have", () => {
|
|
569
|
+
expect(
|
|
570
|
+
getKubernetesMetricById("deployment-unavailable-replicas"),
|
|
571
|
+
).toBeUndefined();
|
|
572
|
+
|
|
573
|
+
for (const metric of allMetrics) {
|
|
574
|
+
expect(metric.metricName).not.toMatch(/unavailable/);
|
|
575
|
+
}
|
|
576
|
+
});
|
|
577
|
+
});
|
|
307
578
|
});
|