@oneuptime/common 14.0.2 → 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/AlertFeed.ts +2 -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/IncidentAlert.ts +540 -0
- package/Models/DatabaseModels/IncidentFeed.ts +2 -0
- package/Models/DatabaseModels/Index.ts +18 -0
- package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +26 -0
- package/Models/DatabaseModels/Project.ts +60 -0
- package/Models/DatabaseModels/RumApplication.ts +52 -1
- 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/1794800000000-AddSessionReplaySameOriginTracePropagation.ts +28 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.ts +89 -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 +8 -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/IncidentAlertService.ts +1811 -0
- package/Server/Services/IncidentReminderRuleService.ts +103 -23
- package/Server/Services/IncidentService.ts +210 -10
- package/Server/Services/IncidentStateTimelineService.ts +24 -0
- package/Server/Services/Index.ts +18 -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/SessionReplay/SessionReplayGateCache.ts +24 -2
- 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/BulkIncidentLinkActions.test.tsx +869 -0
- package/Tests/App/Dashboard/CephMetricTooltips.test.tsx +1777 -0
- package/Tests/App/Dashboard/CloudFleetSummary.test.ts +8 -0
- package/Tests/App/Dashboard/CloudMetricTooltips.test.tsx +887 -0
- package/Tests/App/Dashboard/ContainerHostMetricTooltips.test.tsx +1309 -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/DiscoveryScanLivePage.test.tsx +39 -0
- package/Tests/App/Dashboard/DockerSwarmClustersListTooltips.test.tsx +414 -0
- package/Tests/App/Dashboard/DockerSwarmMetricTooltips.test.ts +796 -0
- package/Tests/App/Dashboard/DockerSwarmOverviewTooltips.test.tsx +747 -0
- package/Tests/App/Dashboard/EventOverlayScope.test.ts +147 -0
- package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +1 -0
- package/Tests/App/Dashboard/ExceptionMonitorEnvironmentFilter.test.tsx +38 -18
- package/Tests/App/Dashboard/HostDetailViewTooltips.test.tsx +725 -0
- package/Tests/App/Dashboard/HostListColumnTooltips.test.tsx +472 -0
- package/Tests/App/Dashboard/HostMetricTooltips.test.ts +709 -0
- package/Tests/App/Dashboard/HostOverviewTooltips.test.tsx +698 -0
- package/Tests/App/Dashboard/HostTooltipHarness.ts +124 -0
- package/Tests/App/Dashboard/HostsListTooltips.test.tsx +395 -0
- package/Tests/App/Dashboard/IncidentAlertLinkDialog.test.tsx +691 -0
- package/Tests/App/Dashboard/IncidentAlertLinkHelpers.test.ts +458 -0
- package/Tests/App/Dashboard/IncidentAlertLinkPages.test.tsx +828 -0
- package/Tests/App/Dashboard/IncidentAlertLinkSideMenus.test.tsx +231 -0
- package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +689 -0
- package/Tests/App/Dashboard/IoTMetricTooltips.test.tsx +1123 -0
- package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +837 -0
- package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +699 -0
- package/Tests/App/Dashboard/KubernetesContainersTabTooltips.test.tsx +320 -0
- package/Tests/App/Dashboard/KubernetesCostTooltips.test.tsx +502 -0
- package/Tests/App/Dashboard/KubernetesInsightsTooltips.test.tsx +222 -0
- package/Tests/App/Dashboard/KubernetesResourceMetricTooltips.test.ts +561 -0
- package/Tests/App/Dashboard/KubernetesResourcePagesTooltips.test.tsx +1168 -0
- package/Tests/App/Dashboard/LinkIncidentAlertModal.test.tsx +154 -0
- package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +1 -0
- package/Tests/App/Dashboard/MetricDescriptionRules.ts +170 -0
- package/Tests/App/Dashboard/MetricDescriptionsCatalog.test.ts +206 -0
- package/Tests/App/Dashboard/MetricDescriptionsConsistency.test.ts +275 -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/NetworkDeviceTooltips.test.tsx +852 -0
- package/Tests/App/Dashboard/NetworkDiagnosticsTooltips.test.tsx +556 -0
- package/Tests/App/Dashboard/NetworkMetricTooltips.test.ts +1348 -0
- package/Tests/App/Dashboard/NetworkSiteTooltips.test.tsx +679 -0
- package/Tests/App/Dashboard/ProductOrientation.test.tsx +4 -3
- package/Tests/App/Dashboard/ProxmoxMetricTooltips.test.ts +592 -0
- package/Tests/App/Dashboard/ProxmoxOverviewTooltips.test.tsx +1002 -0
- package/Tests/App/Dashboard/ProxmoxResourcePageTooltips.test.tsx +923 -0
- package/Tests/App/Dashboard/RecommendationsLoadedContext.test.tsx +349 -0
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +62 -0
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
- package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +14 -0
- package/Tests/App/Dashboard/ResourceOverviewTileTooltips.test.tsx +1066 -0
- package/Tests/App/Dashboard/RumOverviewPage.test.tsx +1195 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +2 -0
- package/Tests/App/Dashboard/ServerlessMetricTooltips.test.tsx +474 -0
- package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +1085 -0
- package/Tests/App/Dashboard/ServiceMetricTooltips.test.tsx +772 -0
- package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +56 -1
- package/Tests/App/Dashboard/TelemetryMetricsSignals.test.ts +1207 -0
- package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +10 -0
- package/Tests/App/Dashboard/TelemetryResourceTabTooltips.test.tsx +437 -0
- package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +2 -1
- package/Tests/App/Dashboard/VMwareMetricTooltips.test.ts +801 -0
- package/Tests/App/Dashboard/VMwareOverviewTooltips.test.tsx +601 -0
- package/Tests/App/Dashboard/VMwareResourcePagesTooltips.test.tsx +646 -0
- package/Tests/App/Dashboard/VMwareTooltipHarness.ts +145 -0
- 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/IncidentAlertModel.test.ts +554 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +24 -5
- package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +117 -0
- 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/AddIncidentAlertMigration.test.ts +341 -0
- package/Tests/Server/Infrastructure/Postgres/AddSessionReplaySameOriginTracePropagationMigration.test.ts +247 -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/IncidentAlertPostgres.test.ts +903 -0
- package/Tests/Server/Services/IncidentAlertRegistration.test.ts +96 -0
- package/Tests/Server/Services/IncidentAlertService.test.ts +2225 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +2 -0
- package/Tests/Server/Services/IncidentAlertStateCascade.test.ts +970 -0
- package/Tests/Server/Services/IncidentCreateFromAlerts.test.ts +1284 -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/SessionReplay/SessionReplayGateCachePolicy.test.ts +103 -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/Rum/WebVitals.test.ts +173 -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/FieldLabelInfoCardTooltip.test.tsx +413 -0
- package/Tests/UI/Components/ForeignHiddenRuleResilience.test.tsx +1147 -0
- package/Tests/UI/Components/HeaderRightRail.test.tsx +41 -1
- package/Tests/UI/Components/InfoTooltip.test.tsx +242 -0
- package/Tests/UI/Components/LogsEntityNames.test.ts +16 -1
- package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +7 -3
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +207 -3
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDeleteVerb.test.tsx +367 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableCreateButtonTitle.test.tsx +275 -0
- 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/TableHeaderTooltip.test.tsx +662 -0
- package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +4 -1
- package/Tests/UI/ForeignHiddenRuleGuard.test.ts +1951 -0
- package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +166 -9
- package/Tests/UI/Rum/RecordingHealthTooltips.test.tsx +447 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +164 -0
- package/Tests/UI/Rum/ReplayFrameCapture.test.ts +6750 -0
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +19 -1
- package/Tests/UI/Rum/ReplayRail.test.tsx +723 -12
- package/Tests/UI/Rum/ReplayRailDetail.test.tsx +86 -0
- package/Tests/UI/Rum/ReplayScreenshot.test.ts +2124 -0
- package/Tests/UI/Rum/ReplayScreenshotActions.test.tsx +3288 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +62 -0
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +983 -2
- package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +19 -1
- package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +149 -0
- package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +107 -6
- package/Tests/UI/Rum/SessionReplayUsersTableTooltips.test.tsx +330 -0
- package/Tests/UI/Rum/UserFlowTooltips.test.tsx +886 -0
- package/Tests/UI/TailwindPlayCdnForeignHiddenRule.test.ts +1005 -0
- package/Tests/UI/ThemeGroupHoverReveal.test.ts +847 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +80 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +23 -0
- package/Tests/UI/Utils/ModelAPISsoRedirect.test.ts +127 -0
- package/Tests/UI/Utils/Navigation.test.ts +102 -0
- package/Tests/UI/Utils/PermissionGate.test.ts +76 -0
- package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +23 -0
- package/Tests/Utils/Incident/IncidentFromAlerts.test.ts +696 -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/Rum/SessionTraceState.test.ts +239 -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/Incident/IncidentAlertLink.ts +38 -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 +315 -0
- package/Types/Probe/ProbeApiIngestResponse.ts +8 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +10 -0
- package/Types/Rules/RuleRun.ts +12 -0
- package/Types/Rum/SessionReplay.ts +25 -6
- package/Types/Rum/WebVitals.ts +52 -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/Detail/FieldLabel.tsx +8 -0
- 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/InfoCard/InfoCard.tsx +47 -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 +99 -21
- package/UI/Components/ModelTable/Column.ts +5 -0
- 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/Table/TableHeader.tsx +47 -2
- package/UI/Components/Table/Types/Column.ts +7 -0
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +1 -1
- package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +1 -1
- package/UI/Components/Tooltip/InfoTooltip.tsx +78 -0
- 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/PermissionGate.ts +11 -2
- package/UI/Utils/Telemetry/TelemetryEntityNames.ts +7 -0
- package/UI/Utils/TelemetryService.ts +4 -3
- package/Utils/Incident/IncidentFromAlerts.ts +516 -0
- package/Utils/LabelRuleImportExport.ts +2 -0
- package/Utils/MetricUnitUtil.ts +103 -11
- package/Utils/Monitor/MetricValueFormatter.ts +66 -13
- package/Utils/Monitor/PlatformMetricUnitUtil.ts +215 -0
- package/Utils/Monitor/PlatformResourceIdentity.ts +514 -0
- package/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.ts +425 -0
- package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +32 -0
- package/Utils/NetworkDiscovery/NetbiosNameUtil.ts +73 -0
- package/Utils/Rum/SessionTraceState.ts +212 -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/AlertFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/AlertFeed.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/IncidentAlert.js +553 -0
- package/build/dist/Models/DatabaseModels/IncidentAlert.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js +2 -0
- package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +18 -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/Project.js +62 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +53 -1
- package/build/dist/Models/DatabaseModels/RumApplication.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/1794800000000-AddSessionReplaySameOriginTracePropagation.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js +42 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.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 +8 -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/IncidentAlertService.js +1370 -0
- package/build/dist/Server/Services/IncidentAlertService.js.map +1 -0
- package/build/dist/Server/Services/IncidentReminderRuleService.js +73 -23
- package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +164 -12
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +21 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +18 -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/SessionReplay/SessionReplayGateCache.js +8 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.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/Incident/IncidentAlertLink.js +34 -0
- package/build/dist/Types/Incident/IncidentAlertLink.js.map +1 -0
- 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 +276 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +10 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
- package/build/dist/Types/Rules/RuleRun.js +4 -0
- package/build/dist/Types/Rules/RuleRun.js.map +1 -1
- package/build/dist/Types/Rum/WebVitals.js +25 -0
- package/build/dist/Types/Rum/WebVitals.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +23 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +14 -0
- package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -1
- package/build/dist/Types/Telemetry/ServiceType.js +8 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Banner/Banner.js +1 -1
- package/build/dist/UI/Components/Banner/Banner.js.map +1 -1
- package/build/dist/UI/Components/Card/Card.js +1 -1
- package/build/dist/UI/Components/Card/Card.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +2 -2
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +1 -1
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
- package/build/dist/UI/Components/Date/StartAndEndDate.js +5 -5
- package/build/dist/UI/Components/Date/StartAndEndDate.js.map +1 -1
- package/build/dist/UI/Components/Detail/FieldLabel.js +2 -0
- package/build/dist/UI/Components/Detail/FieldLabel.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/InfoCard/InfoCard.js +22 -1
- package/build/dist/UI/Components/InfoCard/InfoCard.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 +70 -18
- 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/Table/TableHeader.js +18 -2
- package/build/dist/UI/Components/Table/TableHeader.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/Tooltip/InfoTooltip.js +28 -0
- package/build/dist/UI/Components/Tooltip/InfoTooltip.js.map +1 -0
- 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/PermissionGate.js +4 -2
- package/build/dist/UI/Utils/PermissionGate.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/Incident/IncidentFromAlerts.js +306 -0
- package/build/dist/Utils/Incident/IncidentFromAlerts.js.map +1 -0
- package/build/dist/Utils/LabelRuleImportExport.js +2 -0
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
- package/build/dist/Utils/MetricUnitUtil.js +77 -13
- package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
- package/build/dist/Utils/Monitor/MetricValueFormatter.js +58 -13
- package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -1
- package/build/dist/Utils/Monitor/PlatformMetricUnitUtil.js +161 -0
- package/build/dist/Utils/Monitor/PlatformMetricUnitUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/PlatformResourceIdentity.js +323 -0
- package/build/dist/Utils/Monitor/PlatformResourceIdentity.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.js +270 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +23 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js +61 -0
- package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js.map +1 -1
- package/build/dist/Utils/Rum/SessionTraceState.js +154 -0
- package/build/dist/Utils/Rum/SessionTraceState.js.map +1 -0
- 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,212 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The replay session id, carried on W3C trace context.
|
|
3
|
+
*
|
|
4
|
+
* The browser recorder adds one `tracestate` list member to the requests a
|
|
5
|
+
* page makes to its own origin:
|
|
6
|
+
*
|
|
7
|
+
* tracestate: oneuptime=sid:<32 hex session id>[;p:<16 hex parent id>]
|
|
8
|
+
*
|
|
9
|
+
* tracestate is the one channel a stock OpenTelemetry backend carries
|
|
10
|
+
* without being told to. Every SDK's W3C propagator extracts it onto the
|
|
11
|
+
* remote parent, every child span inherits it, every OTLP exporter sends
|
|
12
|
+
* it as the span's `traceState`, and every outgoing call re-injects it. So
|
|
13
|
+
* span ingest can stamp Span.sessionId for every service a browser request
|
|
14
|
+
* touched, with no code in the customer's backend. (OTLP log records carry
|
|
15
|
+
* no trace state; logs are joined to a session by trace id instead.)
|
|
16
|
+
*
|
|
17
|
+
* `p` is present only when the recorder MINTED the traceparent. Its parent
|
|
18
|
+
* id then names a browser span that is never exported, so the backend's
|
|
19
|
+
* entry span would otherwise arrive pointing at a parent that does not
|
|
20
|
+
* exist: never a root span, flagged as missing its parent. Ingest treats a
|
|
21
|
+
* span whose parent is exactly `p` as the root it really is.
|
|
22
|
+
*
|
|
23
|
+
* Both halves live here so the recorder that writes the member and the
|
|
24
|
+
* ingest that reads it cannot drift. Standalone functions rather than
|
|
25
|
+
* class statics, because the recorder bundle tree-shakes unused exports
|
|
26
|
+
* but not unused statics - the recorder imports only the builder.
|
|
27
|
+
*
|
|
28
|
+
* Dependency-free: bundled into the browser recorder as well as imported
|
|
29
|
+
* by the server.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/* The list-member key. A valid W3C tracestate simple key. */
|
|
33
|
+
export const SESSION_TRACE_STATE_KEY: string = "oneuptime";
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* Hostile-input bounds for the parser. W3C caps a well-formed header at 32
|
|
37
|
+
* members, and the OpenTelemetry JS SDK at 512 characters, but other SDKs
|
|
38
|
+
* only cap member count and member length, so a legitimate value carrying
|
|
39
|
+
* other vendors' members can be longer than 512. Past these a value is not
|
|
40
|
+
* one the recorder wrote, so no session is read out of it - but our
|
|
41
|
+
* members are still stripped from it.
|
|
42
|
+
*/
|
|
43
|
+
const MAX_TRACE_STATE_LENGTH: number = 8192;
|
|
44
|
+
const MAX_TRACE_STATE_MEMBERS: number = 64;
|
|
45
|
+
|
|
46
|
+
const SESSION_ID_PATTERN: RegExp = /^[0-9a-f]{32}$/;
|
|
47
|
+
const PARENT_SPAN_ID_PATTERN: RegExp = /^[0-9a-f]{16}$/;
|
|
48
|
+
const ALL_ZERO_PATTERN: RegExp = /^0+$/;
|
|
49
|
+
|
|
50
|
+
export interface SessionTraceState {
|
|
51
|
+
/* 32 lowercase hex characters. */
|
|
52
|
+
sessionId: string;
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
* 16 lowercase hex characters: the parent id of a traceparent the
|
|
56
|
+
* recorder minted, which no exported span carries. null when the
|
|
57
|
+
* traceparent came from the page or its own instrumentation.
|
|
58
|
+
*/
|
|
59
|
+
syntheticParentSpanId: string | null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface ParsedSessionTraceState {
|
|
63
|
+
/* The session member, or null when there is none or it is malformed. */
|
|
64
|
+
sessionTraceState: SessionTraceState | null;
|
|
65
|
+
|
|
66
|
+
/*
|
|
67
|
+
* The trace state with every `oneuptime` member removed, so the session
|
|
68
|
+
* id is stored in exactly one column - the one erasure deletes by -
|
|
69
|
+
* rather than also in the raw trace state. Other vendors' members are
|
|
70
|
+
* kept verbatim (trimmed of optional whitespace), in order.
|
|
71
|
+
*/
|
|
72
|
+
remainingTraceState: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/*
|
|
76
|
+
* The tracestate list member for a session. Callers pass recorder-minted
|
|
77
|
+
* values (a 32-hex session id, a 16-hex parent id); nothing here needs
|
|
78
|
+
* escaping, because hex and the ':' / ';' separators are all legal in a
|
|
79
|
+
* tracestate value.
|
|
80
|
+
*/
|
|
81
|
+
export function buildSessionTraceStateMember(
|
|
82
|
+
sessionId: string,
|
|
83
|
+
syntheticParentSpanId?: string | null,
|
|
84
|
+
): string {
|
|
85
|
+
return (
|
|
86
|
+
SESSION_TRACE_STATE_KEY +
|
|
87
|
+
"=sid:" +
|
|
88
|
+
sessionId +
|
|
89
|
+
(syntheticParentSpanId ? ";p:" + syntheticParentSpanId : "")
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* Read the session member out of a span's trace state.
|
|
95
|
+
*
|
|
96
|
+
* Accepts anything, because the value comes from an OTLP body a customer
|
|
97
|
+
* (or anyone holding an ingestion key) controls: a non-string, an
|
|
98
|
+
* oversized string or a malformed member yields no session and never
|
|
99
|
+
* throws. The first `oneuptime` member wins, as in the W3C rule that a
|
|
100
|
+
* vendor's own member is the left-most one; fields inside it are
|
|
101
|
+
* `name:value` pairs separated by ';', in any order, and unknown fields are
|
|
102
|
+
* ignored so the format can grow.
|
|
103
|
+
*/
|
|
104
|
+
export function parseSessionTraceState(
|
|
105
|
+
traceState: unknown,
|
|
106
|
+
): ParsedSessionTraceState {
|
|
107
|
+
if (typeof traceState !== "string") {
|
|
108
|
+
return { sessionTraceState: null, remainingTraceState: "" };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/*
|
|
112
|
+
* Fast path, and the path almost every span takes: no member of ours,
|
|
113
|
+
* nothing to parse and nothing to strip.
|
|
114
|
+
*/
|
|
115
|
+
if (traceState.indexOf(SESSION_TRACE_STATE_KEY) === -1) {
|
|
116
|
+
return { sessionTraceState: null, remainingTraceState: traceState };
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const members: Array<string> = traceState.split(",");
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* Past the bounds nothing is READ as a session - a value this far out of
|
|
123
|
+
* spec is not one the recorder wrote - but our members are still
|
|
124
|
+
* stripped, so an id cannot survive in the raw trace state just because
|
|
125
|
+
* the value around it was oversized.
|
|
126
|
+
*/
|
|
127
|
+
const isWithinBounds: boolean =
|
|
128
|
+
traceState.length <= MAX_TRACE_STATE_LENGTH &&
|
|
129
|
+
members.length <= MAX_TRACE_STATE_MEMBERS;
|
|
130
|
+
|
|
131
|
+
let sessionTraceState: SessionTraceState | null = null;
|
|
132
|
+
let sawSessionMember: boolean = false;
|
|
133
|
+
const remaining: Array<string> = [];
|
|
134
|
+
|
|
135
|
+
for (const rawMember of members) {
|
|
136
|
+
const member: string = rawMember.trim();
|
|
137
|
+
|
|
138
|
+
if (member === "") {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const equalsIndex: number = member.indexOf("=");
|
|
143
|
+
const key: string =
|
|
144
|
+
equalsIndex === -1 ? member : member.slice(0, equalsIndex).trim();
|
|
145
|
+
|
|
146
|
+
if (key !== SESSION_TRACE_STATE_KEY) {
|
|
147
|
+
remaining.push(member);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/*
|
|
152
|
+
* Every member under our key is stripped, parsed or not: a malformed
|
|
153
|
+
* one can still hold an id, and the point of stripping is that no id
|
|
154
|
+
* survives outside the sessionId column.
|
|
155
|
+
*/
|
|
156
|
+
if (isWithinBounds && !sawSessionMember && equalsIndex !== -1) {
|
|
157
|
+
sessionTraceState = readSessionMemberValue(member.slice(equalsIndex + 1));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
sawSessionMember = true;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return {
|
|
164
|
+
sessionTraceState: sessionTraceState,
|
|
165
|
+
remainingTraceState: remaining.join(","),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function readSessionMemberValue(value: string): SessionTraceState | null {
|
|
170
|
+
let sessionId: string | null = null;
|
|
171
|
+
let syntheticParentSpanId: string | null = null;
|
|
172
|
+
|
|
173
|
+
for (const rawField of value.split(";")) {
|
|
174
|
+
const field: string = rawField.trim();
|
|
175
|
+
const colonIndex: number = field.indexOf(":");
|
|
176
|
+
|
|
177
|
+
if (colonIndex === -1) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const name: string = field.slice(0, colonIndex);
|
|
182
|
+
const fieldValue: string = field.slice(colonIndex + 1).toLowerCase();
|
|
183
|
+
|
|
184
|
+
if (name === "sid" && sessionId === null) {
|
|
185
|
+
if (!SESSION_ID_PATTERN.test(fieldValue)) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
sessionId = fieldValue;
|
|
190
|
+
} else if (name === "p" && syntheticParentSpanId === null) {
|
|
191
|
+
/*
|
|
192
|
+
* A malformed parent id costs only the root-span repair, never the
|
|
193
|
+
* session: the session id is what the member is for.
|
|
194
|
+
*/
|
|
195
|
+
if (
|
|
196
|
+
PARENT_SPAN_ID_PATTERN.test(fieldValue) &&
|
|
197
|
+
!ALL_ZERO_PATTERN.test(fieldValue)
|
|
198
|
+
) {
|
|
199
|
+
syntheticParentSpanId = fieldValue;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (sessionId === null || ALL_ZERO_PATTERN.test(sessionId)) {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return {
|
|
209
|
+
sessionId: sessionId,
|
|
210
|
+
syntheticParentSpanId: syntheticParentSpanId,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
@@ -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);
|