@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
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { keyForDatabaseEndpoint, keyForDatabaseServerRow } from "./EntityKey";
|
|
2
|
+
import {
|
|
3
|
+
DatabaseEndpoint,
|
|
4
|
+
parseDatabaseEndpointString,
|
|
5
|
+
} from "../../Types/DatabaseServer/DatabaseEndpoint";
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* The entity-key set of a DatabaseServer row — the ONE definition of "this
|
|
9
|
+
* database's telemetry" shared by the dashboard pages (Logs / Traces /
|
|
10
|
+
* Metrics / Overview), the explorer facet and anything else that scopes by
|
|
11
|
+
* database. A row's keys are:
|
|
12
|
+
*
|
|
13
|
+
* - its ROW key (keyForDatabaseServerRow): ingest stamps it on every batch
|
|
14
|
+
* that resolved to this row — by its `oneuptime.database.server.id`
|
|
15
|
+
* link or by an endpoint it owns — so linked telemetry is this
|
|
16
|
+
* database's whatever address (or none) the batch reported;
|
|
17
|
+
* - one `database.server` key per stored endpoint (DatabaseServerEndpoint
|
|
18
|
+
* rows): exactly the endpoints Settings shows, no derived twins, so what
|
|
19
|
+
* the page queries is what the user can see and edit;
|
|
20
|
+
* - its member keys: the Kubernetes pods / Deployments and Docker / Podman
|
|
21
|
+
* containers it runs as, remembered with a last-seen time so a pod that
|
|
22
|
+
* restarted (new name, new container id) keeps its crash logs visible.
|
|
23
|
+
*
|
|
24
|
+
* Kept out of EntityKey.ts on purpose: that module must stay a leaf, and
|
|
25
|
+
* this one needs the endpoint parser.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** entityKey → ISO timestamp it was last seen as a member. */
|
|
29
|
+
export type DatabaseServerMemberKeys = Record<string, string>;
|
|
30
|
+
|
|
31
|
+
export const DEFAULT_MEMBER_KEY_MAX_AGE_DAYS: number = 30;
|
|
32
|
+
export const DEFAULT_MEMBER_KEY_MAX_COUNT: number = 200;
|
|
33
|
+
export const MAX_DATABASE_SERVER_ENTITY_KEYS: number = 200;
|
|
34
|
+
|
|
35
|
+
const ENTITY_KEY_REGEX: RegExp = /^[0-9a-f]{16}$/;
|
|
36
|
+
const DAY_IN_MS: number = 24 * 60 * 60 * 1000;
|
|
37
|
+
|
|
38
|
+
function normalizeEntityKey(value: unknown): string | null {
|
|
39
|
+
if (typeof value !== "string") {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const key: string = value.trim().toLowerCase();
|
|
43
|
+
return ENTITY_KEY_REGEX.test(key) ? key : null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function toTimestamp(value: unknown): number | null {
|
|
47
|
+
if (typeof value !== "string" && !(value instanceof Date)) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const time: number =
|
|
51
|
+
value instanceof Date ? value.getTime() : Date.parse(value);
|
|
52
|
+
return Number.isFinite(time) ? time : null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
* Read a stored member-key value leniently: the canonical `{ key: iso }`
|
|
57
|
+
* map, or an array of `{ key, lastSeenAt }` entries (plus, when
|
|
58
|
+
* `acceptBareKeys`, bare key strings, treated as oldest). Anything malformed
|
|
59
|
+
* is skipped, never thrown on — the column is JSON written by a worker.
|
|
60
|
+
*/
|
|
61
|
+
function readMemberKeys(
|
|
62
|
+
value: unknown,
|
|
63
|
+
acceptBareKeys: boolean = false,
|
|
64
|
+
): Map<string, number> {
|
|
65
|
+
const entries: Map<string, number> = new Map<string, number>();
|
|
66
|
+
|
|
67
|
+
const add: (rawKey: unknown, rawTime: unknown) => void = (
|
|
68
|
+
rawKey: unknown,
|
|
69
|
+
rawTime: unknown,
|
|
70
|
+
): void => {
|
|
71
|
+
const key: string | null = normalizeEntityKey(rawKey);
|
|
72
|
+
const time: number | null = toTimestamp(rawTime);
|
|
73
|
+
if (key === null || time === null) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const existing: number | undefined = entries.get(key);
|
|
77
|
+
if (existing === undefined || time > existing) {
|
|
78
|
+
entries.set(key, time);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
if (Array.isArray(value)) {
|
|
83
|
+
for (const item of value) {
|
|
84
|
+
if (acceptBareKeys && typeof item === "string") {
|
|
85
|
+
add(item, new Date(0));
|
|
86
|
+
} else if (item && typeof item === "object") {
|
|
87
|
+
add(
|
|
88
|
+
(item as { key?: unknown }).key,
|
|
89
|
+
(item as { lastSeenAt?: unknown }).lastSeenAt,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return entries;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (value && typeof value === "object") {
|
|
97
|
+
for (const rawKey of Object.keys(value as Record<string, unknown>)) {
|
|
98
|
+
add(rawKey, (value as Record<string, unknown>)[rawKey]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return entries;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Most recent first; ties broken by key so the order is stable.
|
|
106
|
+
function sortByRecency(
|
|
107
|
+
entries: Map<string, number>,
|
|
108
|
+
): Array<{ key: string; time: number }> {
|
|
109
|
+
return Array.from(entries.entries())
|
|
110
|
+
.map(([key, time]: [string, number]): { key: string; time: number } => {
|
|
111
|
+
return { key, time };
|
|
112
|
+
})
|
|
113
|
+
.sort(
|
|
114
|
+
(
|
|
115
|
+
a: { key: string; time: number },
|
|
116
|
+
b: { key: string; time: number },
|
|
117
|
+
): number => {
|
|
118
|
+
if (b.time !== a.time) {
|
|
119
|
+
return b.time - a.time;
|
|
120
|
+
}
|
|
121
|
+
if (a.key < b.key) {
|
|
122
|
+
return -1;
|
|
123
|
+
}
|
|
124
|
+
return a.key > b.key ? 1 : 0;
|
|
125
|
+
},
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Merge the member keys seen this run into the stored set: seen keys are
|
|
131
|
+
* stamped `now`, older ones are kept until they have not been seen for
|
|
132
|
+
* `maxAgeDays` (default 30 — a restarted pod's logs stay on the page), and
|
|
133
|
+
* the set is capped at `max` (default 200) by recency. Timestamps in the
|
|
134
|
+
* future are clamped to `now`. Never throws.
|
|
135
|
+
*/
|
|
136
|
+
export function mergeDatabaseServerMemberKeys(
|
|
137
|
+
existing: unknown,
|
|
138
|
+
seenNow: Array<string>,
|
|
139
|
+
now: Date,
|
|
140
|
+
opts?: { maxAgeDays?: number | undefined; max?: number | undefined },
|
|
141
|
+
): DatabaseServerMemberKeys {
|
|
142
|
+
const nowTime: number =
|
|
143
|
+
now instanceof Date && Number.isFinite(now.getTime())
|
|
144
|
+
? now.getTime()
|
|
145
|
+
: Date.now();
|
|
146
|
+
|
|
147
|
+
const maxAgeDays: number =
|
|
148
|
+
typeof opts?.maxAgeDays === "number" && opts.maxAgeDays > 0
|
|
149
|
+
? opts.maxAgeDays
|
|
150
|
+
: DEFAULT_MEMBER_KEY_MAX_AGE_DAYS;
|
|
151
|
+
const max: number =
|
|
152
|
+
typeof opts?.max === "number" && opts.max >= 1
|
|
153
|
+
? Math.floor(opts.max)
|
|
154
|
+
: DEFAULT_MEMBER_KEY_MAX_COUNT;
|
|
155
|
+
|
|
156
|
+
const entries: Map<string, number> = readMemberKeys(existing);
|
|
157
|
+
|
|
158
|
+
for (const [key, time] of entries) {
|
|
159
|
+
if (time > nowTime) {
|
|
160
|
+
entries.set(key, nowTime);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
for (const raw of Array.isArray(seenNow) ? seenNow : []) {
|
|
165
|
+
const key: string | null = normalizeEntityKey(raw);
|
|
166
|
+
if (key !== null) {
|
|
167
|
+
entries.set(key, nowTime);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const cutoff: number = nowTime - maxAgeDays * DAY_IN_MS;
|
|
172
|
+
|
|
173
|
+
const merged: DatabaseServerMemberKeys = {};
|
|
174
|
+
let count: number = 0;
|
|
175
|
+
for (const entry of sortByRecency(entries)) {
|
|
176
|
+
if (entry.time < cutoff) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (count >= max) {
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
merged[entry.key] = new Date(entry.time).toISOString();
|
|
183
|
+
count++;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return merged;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/*
|
|
190
|
+
* A row id as text: a string or anything with a string form (an ObjectID),
|
|
191
|
+
* trimmed; "" when there is none.
|
|
192
|
+
*/
|
|
193
|
+
function databaseServerIdText(value: unknown): string {
|
|
194
|
+
if (typeof value === "string") {
|
|
195
|
+
return value.trim();
|
|
196
|
+
}
|
|
197
|
+
if (value && typeof value === "object") {
|
|
198
|
+
const text: unknown = (value as { toString: () => unknown }).toString();
|
|
199
|
+
return typeof text === "string" && text !== "[object Object]"
|
|
200
|
+
? text.trim()
|
|
201
|
+
: "";
|
|
202
|
+
}
|
|
203
|
+
return "";
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Every entity key that belongs to a DatabaseServer: its row key (when the
|
|
208
|
+
* row's id is given), then the `database.server` key of each parseable
|
|
209
|
+
* stored endpoint (engine default port applied, as ingest does), then its
|
|
210
|
+
* member keys (valid 16-hex keys only, most recent first). Deduped, stable,
|
|
211
|
+
* capped at 200 with the row key first and endpoint keys next, so a large
|
|
212
|
+
* member set never evicts either.
|
|
213
|
+
*
|
|
214
|
+
* An empty result means "nothing to query" — callers must NEVER turn it into
|
|
215
|
+
* an empty `Includes` (that drops the predicate and scopes to the whole
|
|
216
|
+
* project).
|
|
217
|
+
*/
|
|
218
|
+
export function getDatabaseServerSignalEntityKeys(input: {
|
|
219
|
+
projectId: string;
|
|
220
|
+
/*
|
|
221
|
+
* The row's id. Its row key is what ingest stamps on telemetry linked to
|
|
222
|
+
* the row by `oneuptime.database.server.id`; leave it out only for a key
|
|
223
|
+
* set that must not include linked telemetry (the member-only runtime
|
|
224
|
+
* scope).
|
|
225
|
+
*/
|
|
226
|
+
databaseServerId?: string | { toString: () => string } | null | undefined;
|
|
227
|
+
endpoints:
|
|
228
|
+
| Array<string | { endpoint?: string | null | undefined }>
|
|
229
|
+
| null
|
|
230
|
+
| undefined;
|
|
231
|
+
dbSystem?: string | null | undefined;
|
|
232
|
+
memberEntityKeys: unknown;
|
|
233
|
+
}): Array<string> {
|
|
234
|
+
const projectId: string =
|
|
235
|
+
input && typeof input.projectId === "string" ? input.projectId.trim() : "";
|
|
236
|
+
if (!projectId) {
|
|
237
|
+
return [];
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const keys: Array<string> = [];
|
|
241
|
+
const seen: Set<string> = new Set<string>();
|
|
242
|
+
const push: (key: string) => void = (key: string): void => {
|
|
243
|
+
if (keys.length < MAX_DATABASE_SERVER_ENTITY_KEYS && !seen.has(key)) {
|
|
244
|
+
seen.add(key);
|
|
245
|
+
keys.push(key);
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
const databaseServerId: string = databaseServerIdText(input.databaseServerId);
|
|
250
|
+
if (databaseServerId) {
|
|
251
|
+
push(keyForDatabaseServerRow(projectId, databaseServerId));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
for (const item of Array.isArray(input.endpoints) ? input.endpoints : []) {
|
|
255
|
+
const value: unknown =
|
|
256
|
+
item && typeof item === "object"
|
|
257
|
+
? (item as { endpoint?: unknown }).endpoint
|
|
258
|
+
: item;
|
|
259
|
+
const endpoint: DatabaseEndpoint | null = parseDatabaseEndpointString(
|
|
260
|
+
value,
|
|
261
|
+
{ system: input.dbSystem || "" },
|
|
262
|
+
);
|
|
263
|
+
if (endpoint) {
|
|
264
|
+
push(keyForDatabaseEndpoint(projectId, endpoint));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
for (const entry of sortByRecency(
|
|
269
|
+
readMemberKeys(input.memberEntityKeys, true),
|
|
270
|
+
)) {
|
|
271
|
+
push(entry.key);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return keys;
|
|
275
|
+
}
|
|
@@ -222,6 +222,182 @@ export function keyForVMwareVCenter(
|
|
|
222
222
|
});
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
+
/*
|
|
226
|
+
* Mirrors the resolvers' `str` / `addIfPresent`: a blank or whitespace-only
|
|
227
|
+
* value is not identity-bearing, so it must be left out of the identity set
|
|
228
|
+
* rather than hashed as "".
|
|
229
|
+
*/
|
|
230
|
+
function isIdentityBearing(value: string | null | undefined): value is string {
|
|
231
|
+
return (
|
|
232
|
+
value !== undefined && value !== null && String(value).trim().length > 0
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* `k8s.cluster.name` + `k8s.namespace.name` + `k8s.pod.name` is the pod
|
|
238
|
+
* identity (mirrors the k8s.pod resolver in `InventoryItem.extractEntities`,
|
|
239
|
+
* which is name-preferring and folds in the cluster and namespace only when
|
|
240
|
+
* the resource carries them). Pass the cluster's `clusterIdentifier`, the
|
|
241
|
+
* pod's namespace and its name.
|
|
242
|
+
*/
|
|
243
|
+
export function keyForKubernetesPod(
|
|
244
|
+
projectId: string,
|
|
245
|
+
data: {
|
|
246
|
+
clusterName?: string | null | undefined;
|
|
247
|
+
namespace?: string | null | undefined;
|
|
248
|
+
podName: string;
|
|
249
|
+
},
|
|
250
|
+
): string {
|
|
251
|
+
const identifyingAttributes: Dictionary<string> = {};
|
|
252
|
+
|
|
253
|
+
if (isIdentityBearing(data.clusterName)) {
|
|
254
|
+
identifyingAttributes["k8s.cluster.name"] = data.clusterName;
|
|
255
|
+
}
|
|
256
|
+
if (isIdentityBearing(data.namespace)) {
|
|
257
|
+
identifyingAttributes["k8s.namespace.name"] = data.namespace;
|
|
258
|
+
}
|
|
259
|
+
identifyingAttributes["k8s.pod.name"] = data.podName;
|
|
260
|
+
|
|
261
|
+
return computeEntityKey({
|
|
262
|
+
projectId,
|
|
263
|
+
entityType: EntityType.KubernetesPod,
|
|
264
|
+
identifyingAttributes,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* `k8s.cluster.name` + `k8s.namespace.name` + `k8s.deployment.name` is the
|
|
270
|
+
* deployment identity (mirrors the k8s.deployment resolver). Pass the
|
|
271
|
+
* cluster's `clusterIdentifier`, the namespace and the Deployment name.
|
|
272
|
+
*/
|
|
273
|
+
export function keyForKubernetesDeployment(
|
|
274
|
+
projectId: string,
|
|
275
|
+
data: {
|
|
276
|
+
clusterName?: string | null | undefined;
|
|
277
|
+
namespace?: string | null | undefined;
|
|
278
|
+
deploymentName: string;
|
|
279
|
+
},
|
|
280
|
+
): string {
|
|
281
|
+
const identifyingAttributes: Dictionary<string> = {};
|
|
282
|
+
|
|
283
|
+
if (isIdentityBearing(data.clusterName)) {
|
|
284
|
+
identifyingAttributes["k8s.cluster.name"] = data.clusterName;
|
|
285
|
+
}
|
|
286
|
+
if (isIdentityBearing(data.namespace)) {
|
|
287
|
+
identifyingAttributes["k8s.namespace.name"] = data.namespace;
|
|
288
|
+
}
|
|
289
|
+
identifyingAttributes["k8s.deployment.name"] = data.deploymentName;
|
|
290
|
+
|
|
291
|
+
return computeEntityKey({
|
|
292
|
+
projectId,
|
|
293
|
+
entityType: EntityType.KubernetesDeployment,
|
|
294
|
+
identifyingAttributes,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* `container.id` is the container identity (mirrors the container resolver
|
|
300
|
+
* — id-only). Pass the raw `container.id` attribute value (the full id, as
|
|
301
|
+
* docker_stats / the container log path report it).
|
|
302
|
+
*
|
|
303
|
+
* Lives in this isomorphic module (it used to be server-only, in the
|
|
304
|
+
* server's entity resolver, which still re-exports it) because the Databases
|
|
305
|
+
* product computes a Docker/Podman database's member keys in the browser as
|
|
306
|
+
* well as in the worker.
|
|
307
|
+
*/
|
|
308
|
+
export function keyForContainer(
|
|
309
|
+
projectId: string,
|
|
310
|
+
containerId: string,
|
|
311
|
+
): string {
|
|
312
|
+
return computeEntityKey({
|
|
313
|
+
projectId,
|
|
314
|
+
entityType: EntityType.Container,
|
|
315
|
+
identifyingAttributes: { "container.id": containerId },
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Key for a database SERVER endpoint — the `database.server` membership key
|
|
321
|
+
* ingest appends to DB client spans, `db.client.*` datapoints and DB
|
|
322
|
+
* receiver batches that did not resolve to a row by its id, and the
|
|
323
|
+
* Databases product queries by (next to the row's own key,
|
|
324
|
+
* `keyForDatabaseServerRow`).
|
|
325
|
+
*
|
|
326
|
+
* Pass an endpoint already canonicalized by
|
|
327
|
+
* `Types/DatabaseServer/DatabaseEndpoint` (canonical host, default port
|
|
328
|
+
* applied, cluster qualifier only where it applies). This module takes
|
|
329
|
+
* primitives rather than importing that one so it stays a leaf.
|
|
330
|
+
*
|
|
331
|
+
* Deliberately ENGINE-AGNOSTIC: `db.system.name` is not part of the identity.
|
|
332
|
+
* `host:port` already names one listener, and wire-compatible engines report
|
|
333
|
+
* a different system than the server's own (CockroachDB / YugabyteDB clients
|
|
334
|
+
* say `postgresql`, OpenSearch clients say `elasticsearch`), so including it
|
|
335
|
+
* would split one server across keys.
|
|
336
|
+
*/
|
|
337
|
+
export function keyForDatabaseEndpoint(
|
|
338
|
+
projectId: string,
|
|
339
|
+
endpoint: {
|
|
340
|
+
host: string;
|
|
341
|
+
port: number | null;
|
|
342
|
+
kubernetesClusterName?: string | null | undefined;
|
|
343
|
+
},
|
|
344
|
+
): string {
|
|
345
|
+
const identifyingAttributes: Dictionary<string> = {
|
|
346
|
+
"server.address": endpoint.host,
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
if (endpoint.port !== null && endpoint.port !== undefined) {
|
|
350
|
+
identifyingAttributes["server.port"] = String(endpoint.port);
|
|
351
|
+
}
|
|
352
|
+
if (isIdentityBearing(endpoint.kubernetesClusterName)) {
|
|
353
|
+
identifyingAttributes["k8s.cluster.name"] = endpoint.kubernetesClusterName;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return computeEntityKey({
|
|
357
|
+
projectId,
|
|
358
|
+
entityType: EntityType.DatabaseServer,
|
|
359
|
+
identifyingAttributes,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Identity attribute of a DatabaseServer ROW key — the attribute ingest
|
|
365
|
+
* stamps on the same telemetry (see `TelemetryUtil.getAttributesForDatabaseServerIdAndName`).
|
|
366
|
+
*/
|
|
367
|
+
export const DATABASE_SERVER_ROW_IDENTITY_ATTRIBUTE: string =
|
|
368
|
+
"oneuptime.database.server.id";
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Key for one DatabaseServer ROW, the `database.server` membership key that
|
|
372
|
+
* ties telemetry to the database it was attributed to rather than to an
|
|
373
|
+
* address. Ingest appends it to every row of a batch that resolved to a
|
|
374
|
+
* DatabaseServer — as the primary entity, or only through the
|
|
375
|
+
* `oneuptime.database.server.id` stamp — and the database's own key set
|
|
376
|
+
* (`getDatabaseServerSignalEntityKeys`) always contains it.
|
|
377
|
+
*
|
|
378
|
+
* Endpoint keys alone cannot carry that: a Database Agent linked by
|
|
379
|
+
* `DATABASE_SERVER_ID` may report an address the row does not own (a
|
|
380
|
+
* cluster-local name without its cluster, a private IP, an address another
|
|
381
|
+
* database owns) or no address at all (memcached, elasticsearch), and its
|
|
382
|
+
* data would then land on no database's page — or on the wrong one.
|
|
383
|
+
*
|
|
384
|
+
* Distinct from `keyForDatabaseEndpoint` (same entity type, different
|
|
385
|
+
* identifying attribute), so a row key never equals an endpoint key. Pass
|
|
386
|
+
* the row's id; it is canonicalized (lowercased) like every identity value.
|
|
387
|
+
*/
|
|
388
|
+
export function keyForDatabaseServerRow(
|
|
389
|
+
projectId: string,
|
|
390
|
+
databaseServerId: string,
|
|
391
|
+
): string {
|
|
392
|
+
return computeEntityKey({
|
|
393
|
+
projectId,
|
|
394
|
+
entityType: EntityType.DatabaseServer,
|
|
395
|
+
identifyingAttributes: {
|
|
396
|
+
[DATABASE_SERVER_ROW_IDENTITY_ATTRIBUTE]: databaseServerId,
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
|
|
225
401
|
/*
|
|
226
402
|
* ---- Rows without telemetry ----------------------------------------------
|
|
227
403
|
*
|
package/Utils/ValueFormatter.ts
CHANGED
|
@@ -731,6 +731,22 @@ export default class ValueFormatter {
|
|
|
731
731
|
return false;
|
|
732
732
|
}
|
|
733
733
|
|
|
734
|
+
/*
|
|
735
|
+
* A memory fragmentation ratio (the redis receiver's
|
|
736
|
+
* `redis.memory.fragmentation_ratio`, redis_exporter's
|
|
737
|
+
* `redis_mem_fragmentation_ratio`) is resident over allocated memory —
|
|
738
|
+
* about 1.0 when healthy, 1.5 and up when fragmented, below 1 when the
|
|
739
|
+
* host swaps — not a [0, 1] share, so it is shown as the ratio (1.62,
|
|
740
|
+
* never "162.00%"). Anchored at the end like the suffix rule below, so
|
|
741
|
+
* every other `_ratio` still renders as a percent. Also what a Value or
|
|
742
|
+
* Gauge widget on it compares its thresholds against: the ratio's own
|
|
743
|
+
* scale.
|
|
744
|
+
*/
|
|
745
|
+
const memoryFragmentationRatio: RegExp = /fragmentation_ratio$/i;
|
|
746
|
+
if (memoryFragmentationRatio.test(metricName.trim())) {
|
|
747
|
+
return false;
|
|
748
|
+
}
|
|
749
|
+
|
|
734
750
|
const fractionMetricSuffixRegex: RegExp =
|
|
735
751
|
/[._](utilization|ratio|fraction|percent|percentage)$/i;
|
|
736
752
|
return fractionMetricSuffixRegex.test(metricName);
|
|
@@ -11,6 +11,7 @@ import AlertEpisode from "./AlertEpisode";
|
|
|
11
11
|
import AlertSeverity from "./AlertSeverity";
|
|
12
12
|
import AlertState from "./AlertState";
|
|
13
13
|
import CephCluster from "./CephCluster";
|
|
14
|
+
import DatabaseServer from "./DatabaseServer";
|
|
14
15
|
import DockerHost from "./DockerHost";
|
|
15
16
|
import DockerResource from "./DockerResource";
|
|
16
17
|
import PodmanHost from "./PodmanHost";
|
|
@@ -81,6 +82,7 @@ let Alert = class Alert extends BaseModel {
|
|
|
81
82
|
this.iotFleets = undefined;
|
|
82
83
|
this.dockerSwarmClusters = undefined;
|
|
83
84
|
this.cephClusters = undefined;
|
|
85
|
+
this.databaseServers = undefined;
|
|
84
86
|
this.dockerResources = undefined;
|
|
85
87
|
this.podmanResources = undefined;
|
|
86
88
|
this.services = undefined;
|
|
@@ -1161,6 +1163,58 @@ __decorate([
|
|
|
1161
1163
|
}),
|
|
1162
1164
|
__metadata("design:type", Array)
|
|
1163
1165
|
], Alert.prototype, "cephClusters", void 0);
|
|
1166
|
+
__decorate([
|
|
1167
|
+
ColumnAccessControl({
|
|
1168
|
+
create: [
|
|
1169
|
+
Permission.ProjectOwner,
|
|
1170
|
+
Permission.ProjectAdmin,
|
|
1171
|
+
Permission.ProjectMember,
|
|
1172
|
+
Permission.AlertAdmin,
|
|
1173
|
+
Permission.AlertMember,
|
|
1174
|
+
Permission.CreateAlert,
|
|
1175
|
+
],
|
|
1176
|
+
read: [
|
|
1177
|
+
Permission.ProjectOwner,
|
|
1178
|
+
Permission.ProjectAdmin,
|
|
1179
|
+
Permission.ProjectMember,
|
|
1180
|
+
Permission.Viewer,
|
|
1181
|
+
Permission.AlertAdmin,
|
|
1182
|
+
Permission.AlertMember,
|
|
1183
|
+
Permission.AlertViewer,
|
|
1184
|
+
Permission.ReadAlert,
|
|
1185
|
+
],
|
|
1186
|
+
update: [
|
|
1187
|
+
Permission.ProjectOwner,
|
|
1188
|
+
Permission.ProjectAdmin,
|
|
1189
|
+
Permission.ProjectMember,
|
|
1190
|
+
Permission.AlertAdmin,
|
|
1191
|
+
Permission.AlertMember,
|
|
1192
|
+
Permission.EditAlert,
|
|
1193
|
+
],
|
|
1194
|
+
}),
|
|
1195
|
+
TableColumn({
|
|
1196
|
+
required: false,
|
|
1197
|
+
type: TableColumnType.EntityArray,
|
|
1198
|
+
modelType: DatabaseServer,
|
|
1199
|
+
title: "Databases",
|
|
1200
|
+
description: "List of databases affected by this alert.",
|
|
1201
|
+
}),
|
|
1202
|
+
ManyToMany(() => {
|
|
1203
|
+
return DatabaseServer;
|
|
1204
|
+
}, { eager: false }),
|
|
1205
|
+
JoinTable({
|
|
1206
|
+
name: "AlertDatabaseServer",
|
|
1207
|
+
inverseJoinColumn: {
|
|
1208
|
+
name: "databaseServerId",
|
|
1209
|
+
referencedColumnName: "_id",
|
|
1210
|
+
},
|
|
1211
|
+
joinColumn: {
|
|
1212
|
+
name: "alertId",
|
|
1213
|
+
referencedColumnName: "_id",
|
|
1214
|
+
},
|
|
1215
|
+
}),
|
|
1216
|
+
__metadata("design:type", Array)
|
|
1217
|
+
], Alert.prototype, "databaseServers", void 0);
|
|
1164
1218
|
__decorate([
|
|
1165
1219
|
ColumnAccessControl({
|
|
1166
1220
|
create: [
|