@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.
Files changed (617) hide show
  1. package/Models/DatabaseModels/Alert.ts +55 -0
  2. package/Models/DatabaseModels/DatabaseServer.ts +1650 -0
  3. package/Models/DatabaseModels/DatabaseServerEndpoint.ts +540 -0
  4. package/Models/DatabaseModels/DatabaseServerFeed.ts +625 -0
  5. package/Models/DatabaseModels/DatabaseServerLabelRule.ts +514 -0
  6. package/Models/DatabaseModels/DatabaseServerOwnerRule.ts +596 -0
  7. package/Models/DatabaseModels/DatabaseServerOwnerTeam.ts +491 -0
  8. package/Models/DatabaseModels/DatabaseServerOwnerUser.ts +490 -0
  9. package/Models/DatabaseModels/Incident.ts +55 -0
  10. package/Models/DatabaseModels/Index.ts +16 -0
  11. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +26 -0
  12. package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
  13. package/Models/DatabaseModels/TelemetryException.ts +2 -0
  14. package/Models/DatabaseModels/UserProjectSsoConsent.ts +146 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.ts +673 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.ts +51 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  18. package/Server/Middleware/MultipartFormData.ts +1 -1
  19. package/Server/Middleware/TelemetryIngest.ts +15 -8
  20. package/Server/Services/AlertReminderRuleService.ts +100 -24
  21. package/Server/Services/DatabaseServerEndpointService.ts +895 -0
  22. package/Server/Services/DatabaseServerFeedService.ts +128 -0
  23. package/Server/Services/DatabaseServerLabelRuleEngineService.ts +340 -0
  24. package/Server/Services/DatabaseServerLabelRuleService.ts +14 -0
  25. package/Server/Services/DatabaseServerOwnerRuleEngineService.ts +425 -0
  26. package/Server/Services/DatabaseServerOwnerRuleService.ts +14 -0
  27. package/Server/Services/DatabaseServerOwnerTeamService.ts +180 -0
  28. package/Server/Services/DatabaseServerOwnerUserService.ts +173 -0
  29. package/Server/Services/DatabaseServerService.ts +4546 -0
  30. package/Server/Services/DatabaseService.ts +14 -8
  31. package/Server/Services/DockerResourceService.ts +43 -2
  32. package/Server/Services/IncidentReminderRuleService.ts +103 -23
  33. package/Server/Services/Index.ts +16 -0
  34. package/Server/Services/InventoryItemService.ts +113 -5
  35. package/Server/Services/IoTDeviceService.ts +145 -37
  36. package/Server/Services/OpenTelemetryIngestService.ts +19 -0
  37. package/Server/Services/PodmanResourceService.ts +43 -2
  38. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +107 -23
  39. package/Server/Services/ServiceService.ts +1 -1
  40. package/Server/Services/TelemetryUsageBillingService.ts +29 -2
  41. package/Server/Services/UserProjectSsoConsentService.ts +74 -0
  42. package/Server/Services/UserService.ts +14 -1
  43. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +18 -0
  44. package/Server/Types/Database/QueryHelper.ts +30 -1
  45. package/Server/Utils/AI/Toolbox/ResourceTools.ts +69 -1
  46. package/Server/Utils/Database/AffectedResourceRelations.ts +6 -0
  47. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +188 -6
  48. package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
  49. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +2262 -755
  50. package/Server/Utils/Monitor/MonitorIncident.ts +28 -1
  51. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +268 -6
  52. package/Server/Utils/Monitor/MonitorResource.ts +47 -11
  53. package/Server/Utils/Monitor/MonitorResourceContext.ts +1 -0
  54. package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +239 -21
  55. package/Server/Utils/Monitor/PerSeriesResolutionRootCause.ts +43 -0
  56. package/Server/Utils/Monitor/SeriesResourceLabels.ts +291 -0
  57. package/Server/Utils/Monitor/SeriesResourceLinker.ts +111 -12
  58. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
  59. package/Server/Utils/StartServer.ts +26 -6
  60. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
  61. package/Server/Utils/Telemetry/DatabaseEndpointDiscovery.ts +688 -0
  62. package/Server/Utils/Telemetry/EntityRegistry.ts +5 -1
  63. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +18 -1
  64. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +175 -12
  65. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +12 -0
  66. package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +606 -36
  67. package/Server/Utils/Telemetry/Telemetry.ts +16 -0
  68. package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -22
  69. package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +16 -10
  70. package/Tests/App/Accounts/SignedInRedirect.test.tsx +241 -0
  71. package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +221 -4
  72. package/Tests/App/Dashboard/AIInsightsResourcePageContext.test.ts +42 -0
  73. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +100 -0
  74. package/Tests/App/Dashboard/AffectedResourcesPicker.test.tsx +86 -0
  75. package/Tests/App/Dashboard/AffectedResourcesPickerHiddenTypes.test.tsx +2 -0
  76. package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +19 -0
  77. package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +14 -0
  78. package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +26 -1
  79. package/Tests/App/Dashboard/DashboardAppSsoError.test.tsx +501 -0
  80. package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +64 -1
  81. package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +178 -18
  82. package/Tests/App/Dashboard/DashboardMasterPageSsoRedirect.test.tsx +444 -0
  83. package/Tests/App/Dashboard/DashboardNavBarForeignHiddenRule.test.tsx +573 -0
  84. package/Tests/App/Dashboard/DatabaseChartAxes.test.tsx +431 -0
  85. package/Tests/App/Dashboard/DatabaseContainerDetailBadge.test.tsx +249 -0
  86. package/Tests/App/Dashboard/DatabaseDashboardE2EFixes.test.ts +681 -0
  87. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +1801 -0
  88. package/Tests/App/Dashboard/DatabaseFleetSummaryRefresh.test.tsx +280 -0
  89. package/Tests/App/Dashboard/DatabaseFormHelpers.test.tsx +321 -0
  90. package/Tests/App/Dashboard/DatabaseMetricMonitorLink.test.tsx +795 -0
  91. package/Tests/App/Dashboard/DatabaseOverviewHeader.test.tsx +580 -0
  92. package/Tests/App/Dashboard/DatabaseRecommendationsEngineMetrics.test.ts +270 -0
  93. package/Tests/App/Dashboard/DatabaseServerComponents.test.tsx +1486 -0
  94. package/Tests/App/Dashboard/DatabaseServerEngineMetricsFilter.test.ts +223 -0
  95. package/Tests/App/Dashboard/DatabaseServerPresentation.test.ts +435 -0
  96. package/Tests/App/Dashboard/DatabaseServerSummary.test.ts +186 -0
  97. package/Tests/App/Dashboard/DatabaseServerTelemetryQueries.test.ts +1553 -0
  98. package/Tests/App/Dashboard/DatabaseTableTruncation.test.tsx +326 -0
  99. package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +512 -0
  100. package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +774 -0
  101. package/Tests/App/Dashboard/DatabaseViewLayout.test.tsx +233 -0
  102. package/Tests/App/Dashboard/DatabaseWorkloadBadge.test.tsx +972 -0
  103. package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +5 -0
  104. package/Tests/App/Dashboard/DiscoveryReviewUnnamedHostHint.test.tsx +1061 -0
  105. package/Tests/App/Dashboard/EventOverlayScope.test.ts +147 -0
  106. package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +1 -0
  107. package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +1 -0
  108. package/Tests/App/Dashboard/MetricsViewerDrillDown.test.tsx +310 -0
  109. package/Tests/App/Dashboard/MetricsViewerEntityScopedRows.test.tsx +495 -0
  110. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +132 -1
  111. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +5 -0
  112. package/Tests/App/Dashboard/ProductOrientation.test.tsx +4 -3
  113. package/Tests/App/Dashboard/RecommendationsLoadedContext.test.tsx +349 -0
  114. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +62 -0
  115. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
  116. package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +14 -0
  117. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +2 -0
  118. package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +1085 -0
  119. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +10 -0
  120. package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +2 -1
  121. package/Tests/App/StatusPage/StatusPageHeaderForeignHiddenRule.test.tsx +284 -0
  122. package/Tests/ClassStrings.ts +178 -0
  123. package/Tests/Fixtures/MobilePasskeyUser.json +1 -2
  124. package/Tests/ForeignHiddenRuleGuard.ts +2152 -0
  125. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +2250 -0
  126. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +24 -5
  127. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  128. package/Tests/RenderedMarkup.ts +518 -0
  129. package/Tests/ResponsiveVisibility.test.ts +490 -4
  130. package/Tests/ResponsiveVisibility.ts +505 -52
  131. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  132. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +541 -0
  133. package/Tests/Server/Infrastructure/Postgres/AddUserProjectSsoConsentMigration.test.ts +234 -0
  134. package/Tests/Server/Services/ContainerSnapshotUpsertPostgres.test.ts +319 -0
  135. package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +13 -0
  136. package/Tests/Server/Services/DatabaseServerEndpointService.test.ts +2033 -0
  137. package/Tests/Server/Services/DatabaseServerFeedAndOwnerServices.test.ts +529 -0
  138. package/Tests/Server/Services/DatabaseServerLifecycle.test.ts +3302 -0
  139. package/Tests/Server/Services/DatabaseServerRegistries.test.ts +603 -0
  140. package/Tests/Server/Services/DatabaseServerRuleEngines.test.ts +754 -0
  141. package/Tests/Server/Services/DatabaseServerService.test.ts +3558 -0
  142. package/Tests/Server/Services/DatabaseServerSqlPostgres.test.ts +2045 -0
  143. package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlockedPostgres.test.ts +362 -0
  144. package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlockedReply.test.ts +210 -0
  145. package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +18 -0
  146. package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +2 -0
  147. package/Tests/Server/Services/IncomingCallPolicyEscalationRuleTarget.test.ts +225 -0
  148. package/Tests/Server/Services/InventoryItemDisplayName.test.ts +280 -2
  149. package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +8 -2
  150. package/Tests/Server/Services/IoTDeviceLatestMetricsPostgres.test.ts +689 -0
  151. package/Tests/Server/Services/IoTDeviceService.test.ts +379 -0
  152. package/Tests/Server/Services/LatestMetricsValuesShape.test.ts +360 -0
  153. package/Tests/Server/Services/LlmModelPriceService.test.ts +402 -0
  154. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
  155. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +61 -9
  156. package/Tests/Server/Services/ReminderRuleLookupPostgres.test.ts +2250 -0
  157. package/Tests/Server/Services/ReminderRuleRefreshOpenSubjectsPaging.test.ts +653 -0
  158. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +68 -20
  159. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
  160. package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +9 -0
  161. package/Tests/Server/Services/UserProjectSsoConsentPostgres.test.ts +153 -0
  162. package/Tests/Server/Services/UserProjectSsoConsentService.test.ts +192 -0
  163. package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +71 -0
  164. package/Tests/Server/Services/UserSignupIdTakeoverPostgres.test.ts +238 -0
  165. package/Tests/Server/Services/WorkspaceNotificationSummaryHelpers.test.ts +592 -0
  166. package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +3 -0
  167. package/Tests/Server/Types/Database/EventOverlayScopePostgres.test.ts +1 -0
  168. package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +11 -0
  169. package/Tests/Server/Types/Database/Permissions/InfrastructureOwnershipScope.test.ts +8 -0
  170. package/Tests/Server/Types/Database/QueryHelperBooleanForCriteriaBackedRule.test.ts +1094 -0
  171. package/Tests/Server/Utils/AI/ResourceTools.test.ts +134 -0
  172. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +41 -0
  173. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +279 -9
  174. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaDisplayContext.test.ts +933 -0
  175. package/Tests/Server/Utils/Monitor/DatabaseMaintenanceSuppression.test.ts +582 -0
  176. package/Tests/Server/Utils/Monitor/DatabaseServerMonitorLinking.test.ts +753 -0
  177. package/Tests/Server/Utils/Monitor/MonitorActionTimestamps.test.ts +1 -0
  178. package/Tests/Server/Utils/Monitor/MonitorAlertCriteriaReferences.test.ts +1 -0
  179. package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +119 -0
  180. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +60 -25
  181. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorAffectedResourceEdgeCases.test.ts +1719 -0
  182. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorKubernetesAffectedResources.test.ts +1447 -0
  183. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorKubernetesRatioEmail.test.ts +352 -0
  184. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformMetricUnits.test.ts +717 -0
  185. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformRawScan.test.ts +2125 -0
  186. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformSeriesAffectedResources.test.ts +1288 -0
  187. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
  188. package/Tests/Server/Utils/Monitor/MonitorIncidentCriteriaReferences.test.ts +1 -0
  189. package/Tests/Server/Utils/Monitor/MonitorIncidentMemberRoleMembership.test.ts +1 -0
  190. package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +88 -0
  191. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +205 -0
  192. package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +62 -0
  193. package/Tests/Server/Utils/Monitor/MonitorResourceDatabaseMaintenance.test.ts +803 -0
  194. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +133 -3
  195. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
  196. package/Tests/Server/Utils/Monitor/PerSeriesRecoveryResolution.test.ts +472 -1
  197. package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
  198. package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +236 -2
  199. package/Tests/Server/Utils/SeriesResourceLabels.test.ts +70 -0
  200. package/Tests/Server/Utils/StartServerProtobufContentType.test.ts +54 -0
  201. package/Tests/Server/Utils/Telemetry/DatabaseEndpointDiscovery.test.ts +1895 -0
  202. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +7 -0
  203. package/Tests/Server/Utils/Telemetry/LogExceptionExtractorSeverityGate.test.ts +90 -0
  204. package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +570 -0
  205. package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +97 -2
  206. package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +1337 -0
  207. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +295 -0
  208. package/Tests/Types/AI/AIResourceContext.test.ts +30 -0
  209. package/Tests/Types/DatabaseServer/DatabaseContainerClassifier.test.ts +3644 -0
  210. package/Tests/Types/DatabaseServer/DatabaseContainerCommand.test.ts +340 -0
  211. package/Tests/Types/DatabaseServer/DatabaseContainerCommandCorpus.ts +826 -0
  212. package/Tests/Types/DatabaseServer/DatabaseContainerCommandPostgres.test.ts +150 -0
  213. package/Tests/Types/DatabaseServer/DatabaseEndpoint.test.ts +2657 -0
  214. package/Tests/Types/DatabaseServer/DatabaseServerDiscoverySource.test.ts +64 -0
  215. package/Tests/Types/DatabaseServer/DatabaseServerEntityKeys.test.ts +952 -0
  216. package/Tests/Types/DatabaseServer/DatabaseServerMetricCatalog.test.ts +1161 -0
  217. package/Tests/Types/DatabaseServer/DatabaseSystem.test.ts +1514 -0
  218. package/Tests/Types/DatabaseServer/DatabaseTelemetryResolver.test.ts +1558 -0
  219. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +255 -6
  220. package/Tests/Types/Monitor/DatabaseAlertTemplates.test.ts +2254 -0
  221. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +298 -0
  222. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +271 -0
  223. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +253 -9
  224. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +13 -5
  225. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +4 -2
  226. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +111 -2
  227. package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +61 -0
  228. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +114 -0
  229. package/Tests/Types/Monitor/Utils/KubernetesAgentEmittedMetrics.ts +181 -0
  230. package/Tests/Types/NetworkDevice/DiscoveredHostNamingStatus.test.ts +401 -0
  231. package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +4 -1
  232. package/Tests/Types/Telemetry/ResourceFacetCatalog.test.ts +24 -2
  233. package/Tests/UI/Components/Card.test.tsx +93 -2
  234. package/Tests/UI/Components/FeedOptions.test.ts +6 -0
  235. package/Tests/UI/Components/FeedOptionsButton.test.tsx +8 -1
  236. package/Tests/UI/Components/ForeignHiddenRuleResilience.test.tsx +1147 -0
  237. package/Tests/UI/Components/HeaderRightRail.test.tsx +41 -1
  238. package/Tests/UI/Components/LogsEntityNames.test.ts +16 -1
  239. package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +7 -3
  240. package/Tests/UI/Components/ResourceFacetConfigs.test.ts +2 -1
  241. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  242. package/Tests/UI/Components/SrOnlyForeignRule.test.tsx +994 -0
  243. package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +34 -1
  244. package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +4 -1
  245. package/Tests/UI/ForeignHiddenRuleGuard.test.ts +1951 -0
  246. package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +19 -1
  247. package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +19 -1
  248. package/Tests/UI/TailwindPlayCdnForeignHiddenRule.test.ts +1005 -0
  249. package/Tests/UI/ThemeGroupHoverReveal.test.ts +847 -0
  250. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +70 -0
  251. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +21 -0
  252. package/Tests/UI/Utils/ModelAPISsoRedirect.test.ts +127 -0
  253. package/Tests/UI/Utils/Navigation.test.ts +102 -0
  254. package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +23 -0
  255. package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
  256. package/Tests/Utils/MetricUnitUtil.test.ts +227 -2
  257. package/Tests/Utils/Monitor/MetricValueFormatter.test.ts +288 -2
  258. package/Tests/Utils/Monitor/PlatformResourceIdentityAndUnits.test.ts +1559 -0
  259. package/Tests/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.test.ts +2546 -0
  260. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +315 -0
  261. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +336 -1
  262. package/Tests/Utils/NetworkDiscovery/NetbiosNameUtil.test.ts +244 -0
  263. package/Tests/Utils/ValueFormatter.test.ts +50 -0
  264. package/Tests/tsconfig.json +16 -0
  265. package/Types/AI/AIResourceContext.ts +7 -0
  266. package/Types/Dashboard/DashboardTemplates.ts +2 -1
  267. package/Types/DatabaseServer/DatabaseConnectionSpan.ts +77 -0
  268. package/Types/DatabaseServer/DatabaseContainerClassifier.ts +2068 -0
  269. package/Types/DatabaseServer/DatabaseContainerCommand.ts +801 -0
  270. package/Types/DatabaseServer/DatabaseEndpoint.ts +1943 -0
  271. package/Types/DatabaseServer/DatabaseServerDiscoverySource.ts +68 -0
  272. package/Types/DatabaseServer/DatabaseServerMetricCatalog.ts +966 -0
  273. package/Types/DatabaseServer/DatabaseSystem.ts +2124 -0
  274. package/Types/DatabaseServer/DatabaseTelemetryResolver.ts +555 -0
  275. package/Types/Email/EmailTemplateType.ts +1 -0
  276. package/Types/Monitor/CephAlertTemplates.ts +18 -0
  277. package/Types/Monitor/DatabaseAlertTemplates.ts +2020 -0
  278. package/Types/Monitor/KubernetesAlertTemplates.ts +64 -24
  279. package/Types/Monitor/KubernetesMetricCatalog.ts +118 -19
  280. package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +14 -0
  281. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +93 -10
  282. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +109 -8
  283. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +36 -7
  284. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +43 -2
  285. package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +41 -6
  286. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +26 -0
  287. package/Types/NetworkDevice/DiscoveredHostNamingStatus.ts +147 -0
  288. package/Types/Permission.ts +267 -0
  289. package/Types/Probe/ProbeApiIngestResponse.ts +8 -0
  290. package/Types/Rules/RuleCriteriaFieldRegistry.ts +10 -0
  291. package/Types/Rules/RuleRun.ts +12 -0
  292. package/Types/Telemetry/EntityType.ts +23 -0
  293. package/Types/Telemetry/ResourceFacetCatalog.ts +14 -0
  294. package/Types/Telemetry/ServiceType.ts +8 -0
  295. package/UI/Components/Banner/Banner.tsx +1 -1
  296. package/UI/Components/Card/Card.tsx +1 -1
  297. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +2 -2
  298. package/UI/Components/Charts/Line/LineChart.tsx +7 -0
  299. package/UI/Components/CommandPalette/CommandPalette.tsx +1 -1
  300. package/UI/Components/Date/StartAndEndDate.tsx +5 -5
  301. package/UI/Components/Diagram/HorizontalStepChain.tsx +1 -1
  302. package/UI/Components/Feed/FeedOptionsButton.tsx +1 -1
  303. package/UI/Components/Forms/BasicForm.tsx +1 -1
  304. package/UI/Components/Header/Header.tsx +1 -1
  305. package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -1
  306. package/UI/Components/HeaderAlert/HeaderAlert.tsx +1 -1
  307. package/UI/Components/LogsViewer/components/FacetValueRow.tsx +1 -1
  308. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +1 -1
  309. package/UI/Components/Modal/ModalFooter.tsx +1 -1
  310. package/UI/Components/ModelDetail/CardModelDetail.tsx +2 -2
  311. package/UI/Components/ModelTable/BaseModelTable.tsx +4 -4
  312. package/UI/Components/Navbar/NavBar.tsx +9 -2
  313. package/UI/Components/Navbar/NavBarMenuModal.tsx +2 -2
  314. package/UI/Components/Page/Page.tsx +1 -1
  315. package/UI/Components/Pagination/Pagination.tsx +3 -3
  316. package/UI/Components/ProgressButtons/ProgressButtonItem.tsx +1 -1
  317. package/UI/Components/SideMenu/SideMenu.tsx +4 -1
  318. package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +4 -2
  319. package/UI/Components/StatusPage/ResourceList.tsx +6 -6
  320. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +1 -1
  321. package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +1 -1
  322. package/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.tsx +1 -1
  323. package/UI/Components/Workflow/ComponentsModal.tsx +2 -2
  324. package/UI/Components/Workflow/StepTraceViewer.tsx +1 -1
  325. package/UI/Styles/Theme.css +8 -1
  326. package/UI/Utils/Navigation.ts +89 -42
  327. package/UI/Utils/Telemetry/TelemetryEntityNames.ts +7 -0
  328. package/UI/Utils/TelemetryService.ts +4 -3
  329. package/Utils/LabelRuleImportExport.ts +2 -0
  330. package/Utils/MetricUnitUtil.ts +103 -11
  331. package/Utils/Monitor/MetricValueFormatter.ts +66 -13
  332. package/Utils/Monitor/PlatformMetricUnitUtil.ts +215 -0
  333. package/Utils/Monitor/PlatformResourceIdentity.ts +514 -0
  334. package/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.ts +425 -0
  335. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +32 -0
  336. package/Utils/NetworkDiscovery/NetbiosNameUtil.ts +73 -0
  337. package/Utils/Telemetry/DatabaseServerEntityKeys.ts +275 -0
  338. package/Utils/Telemetry/EntityKey.ts +176 -0
  339. package/Utils/ValueFormatter.ts +16 -0
  340. package/build/dist/Models/DatabaseModels/Alert.js +54 -0
  341. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  342. package/build/dist/Models/DatabaseModels/DatabaseServer.js +1683 -0
  343. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -0
  344. package/build/dist/Models/DatabaseModels/DatabaseServerEndpoint.js +559 -0
  345. package/build/dist/Models/DatabaseModels/DatabaseServerEndpoint.js.map +1 -0
  346. package/build/dist/Models/DatabaseModels/DatabaseServerFeed.js +648 -0
  347. package/build/dist/Models/DatabaseModels/DatabaseServerFeed.js.map +1 -0
  348. package/build/dist/Models/DatabaseModels/DatabaseServerLabelRule.js +522 -0
  349. package/build/dist/Models/DatabaseModels/DatabaseServerLabelRule.js.map +1 -0
  350. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerRule.js +603 -0
  351. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerRule.js.map +1 -0
  352. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerTeam.js +506 -0
  353. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerTeam.js.map +1 -0
  354. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerUser.js +505 -0
  355. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerUser.js.map +1 -0
  356. package/build/dist/Models/DatabaseModels/Incident.js +54 -0
  357. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  358. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  359. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  360. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  361. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +54 -0
  362. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  363. package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
  364. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  365. package/build/dist/Models/DatabaseModels/UserProjectSsoConsent.js +162 -0
  366. package/build/dist/Models/DatabaseModels/UserProjectSsoConsent.js.map +1 -0
  367. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.js +240 -0
  368. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.js.map +1 -0
  369. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.js +26 -0
  370. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.js.map +1 -0
  371. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  372. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  373. package/build/dist/Server/Middleware/MultipartFormData.js +1 -1
  374. package/build/dist/Server/Middleware/TelemetryIngest.js +15 -8
  375. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  376. package/build/dist/Server/Services/AlertReminderRuleService.js +72 -23
  377. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  378. package/build/dist/Server/Services/DatabaseServerEndpointService.js +694 -0
  379. package/build/dist/Server/Services/DatabaseServerEndpointService.js.map +1 -0
  380. package/build/dist/Server/Services/DatabaseServerFeedService.js +110 -0
  381. package/build/dist/Server/Services/DatabaseServerFeedService.js.map +1 -0
  382. package/build/dist/Server/Services/DatabaseServerLabelRuleEngineService.js +272 -0
  383. package/build/dist/Server/Services/DatabaseServerLabelRuleEngineService.js.map +1 -0
  384. package/build/dist/Server/Services/DatabaseServerLabelRuleService.js +13 -0
  385. package/build/dist/Server/Services/DatabaseServerLabelRuleService.js.map +1 -0
  386. package/build/dist/Server/Services/DatabaseServerOwnerRuleEngineService.js +340 -0
  387. package/build/dist/Server/Services/DatabaseServerOwnerRuleEngineService.js.map +1 -0
  388. package/build/dist/Server/Services/DatabaseServerOwnerRuleService.js +13 -0
  389. package/build/dist/Server/Services/DatabaseServerOwnerRuleService.js.map +1 -0
  390. package/build/dist/Server/Services/DatabaseServerOwnerTeamService.js +160 -0
  391. package/build/dist/Server/Services/DatabaseServerOwnerTeamService.js.map +1 -0
  392. package/build/dist/Server/Services/DatabaseServerOwnerUserService.js +153 -0
  393. package/build/dist/Server/Services/DatabaseServerOwnerUserService.js.map +1 -0
  394. package/build/dist/Server/Services/DatabaseServerService.js +3272 -0
  395. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -0
  396. package/build/dist/Server/Services/DatabaseService.js +8 -4
  397. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  398. package/build/dist/Server/Services/DockerResourceService.js +30 -3
  399. package/build/dist/Server/Services/DockerResourceService.js.map +1 -1
  400. package/build/dist/Server/Services/IncidentReminderRuleService.js +73 -23
  401. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  402. package/build/dist/Server/Services/Index.js +16 -0
  403. package/build/dist/Server/Services/Index.js.map +1 -1
  404. package/build/dist/Server/Services/InventoryItemService.js +88 -5
  405. package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
  406. package/build/dist/Server/Services/IoTDeviceService.js +111 -24
  407. package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
  408. package/build/dist/Server/Services/OpenTelemetryIngestService.js +24 -9
  409. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  410. package/build/dist/Server/Services/PodmanResourceService.js +30 -3
  411. package/build/dist/Server/Services/PodmanResourceService.js.map +1 -1
  412. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +75 -23
  413. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  414. package/build/dist/Server/Services/ServiceService.js +1 -1
  415. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  416. package/build/dist/Server/Services/TelemetryUsageBillingService.js +23 -2
  417. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  418. package/build/dist/Server/Services/UserProjectSsoConsentService.js +79 -0
  419. package/build/dist/Server/Services/UserProjectSsoConsentService.js.map +1 -0
  420. package/build/dist/Server/Services/UserService.js +13 -1
  421. package/build/dist/Server/Services/UserService.js.map +1 -1
  422. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +18 -0
  423. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  424. package/build/dist/Server/Types/Database/QueryHelper.js +26 -1
  425. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  426. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +46 -0
  427. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
  428. package/build/dist/Server/Utils/Database/AffectedResourceRelations.js +6 -0
  429. package/build/dist/Server/Utils/Database/AffectedResourceRelations.js.map +1 -1
  430. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +134 -13
  431. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  432. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +22 -6
  433. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  434. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +1489 -524
  435. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  436. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
  437. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  438. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +196 -6
  439. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  440. package/build/dist/Server/Utils/Monitor/MonitorResource.js +36 -9
  441. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  442. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +1 -0
  443. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
  444. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +175 -17
  445. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
  446. package/build/dist/Server/Utils/Monitor/PerSeriesResolutionRootCause.js +29 -0
  447. package/build/dist/Server/Utils/Monitor/PerSeriesResolutionRootCause.js.map +1 -0
  448. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +211 -0
  449. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  450. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +82 -10
  451. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
  452. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
  453. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  454. package/build/dist/Server/Utils/StartServer.js +20 -4
  455. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  456. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
  457. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
  458. package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js +442 -0
  459. package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js.map +1 -0
  460. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +5 -1
  461. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  462. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +15 -1
  463. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
  464. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +121 -5
  465. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  466. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +12 -0
  467. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  468. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +438 -36
  469. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -1
  470. package/build/dist/Server/Utils/Telemetry/Telemetry.js +12 -0
  471. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  472. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +17 -18
  473. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  474. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +16 -10
  475. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -1
  476. package/build/dist/Types/AI/AIResourceContext.js +7 -0
  477. package/build/dist/Types/AI/AIResourceContext.js.map +1 -1
  478. package/build/dist/Types/Dashboard/DashboardTemplates.js +2 -1
  479. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  480. package/build/dist/Types/DatabaseServer/DatabaseConnectionSpan.js +71 -0
  481. package/build/dist/Types/DatabaseServer/DatabaseConnectionSpan.js.map +1 -0
  482. package/build/dist/Types/DatabaseServer/DatabaseContainerClassifier.js +1462 -0
  483. package/build/dist/Types/DatabaseServer/DatabaseContainerClassifier.js.map +1 -0
  484. package/build/dist/Types/DatabaseServer/DatabaseContainerCommand.js +691 -0
  485. package/build/dist/Types/DatabaseServer/DatabaseContainerCommand.js.map +1 -0
  486. package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js +1407 -0
  487. package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js.map +1 -0
  488. package/build/dist/Types/DatabaseServer/DatabaseServerDiscoverySource.js +60 -0
  489. package/build/dist/Types/DatabaseServer/DatabaseServerDiscoverySource.js.map +1 -0
  490. package/build/dist/Types/DatabaseServer/DatabaseServerMetricCatalog.js +804 -0
  491. package/build/dist/Types/DatabaseServer/DatabaseServerMetricCatalog.js.map +1 -0
  492. package/build/dist/Types/DatabaseServer/DatabaseSystem.js +1860 -0
  493. package/build/dist/Types/DatabaseServer/DatabaseSystem.js.map +1 -0
  494. package/build/dist/Types/DatabaseServer/DatabaseTelemetryResolver.js +406 -0
  495. package/build/dist/Types/DatabaseServer/DatabaseTelemetryResolver.js.map +1 -0
  496. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  497. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  498. package/build/dist/Types/Monitor/CephAlertTemplates.js +18 -0
  499. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
  500. package/build/dist/Types/Monitor/DatabaseAlertTemplates.js +1518 -0
  501. package/build/dist/Types/Monitor/DatabaseAlertTemplates.js.map +1 -0
  502. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +57 -24
  503. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  504. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +104 -18
  505. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
  506. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +80 -3
  507. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  508. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +10 -3
  509. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  510. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +29 -0
  511. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  512. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +21 -6
  513. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -1
  514. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +25 -0
  515. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
  516. package/build/dist/Types/NetworkDevice/DiscoveredHostNamingStatus.js +136 -0
  517. package/build/dist/Types/NetworkDevice/DiscoveredHostNamingStatus.js.map +1 -0
  518. package/build/dist/Types/Permission.js +234 -0
  519. package/build/dist/Types/Permission.js.map +1 -1
  520. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +10 -0
  521. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  522. package/build/dist/Types/Rules/RuleRun.js +4 -0
  523. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  524. package/build/dist/Types/Telemetry/EntityType.js +23 -0
  525. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  526. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +14 -0
  527. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -1
  528. package/build/dist/Types/Telemetry/ServiceType.js +8 -0
  529. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  530. package/build/dist/UI/Components/Banner/Banner.js +1 -1
  531. package/build/dist/UI/Components/Banner/Banner.js.map +1 -1
  532. package/build/dist/UI/Components/Card/Card.js +1 -1
  533. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  534. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +2 -2
  535. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  536. package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
  537. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  538. package/build/dist/UI/Components/CommandPalette/CommandPalette.js +1 -1
  539. package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
  540. package/build/dist/UI/Components/Date/StartAndEndDate.js +5 -5
  541. package/build/dist/UI/Components/Date/StartAndEndDate.js.map +1 -1
  542. package/build/dist/UI/Components/Diagram/HorizontalStepChain.js +1 -1
  543. package/build/dist/UI/Components/Diagram/HorizontalStepChain.js.map +1 -1
  544. package/build/dist/UI/Components/Feed/FeedOptionsButton.js +1 -1
  545. package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +1 -1
  546. package/build/dist/UI/Components/Forms/BasicForm.js +1 -1
  547. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  548. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -1
  549. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  550. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js +1 -1
  551. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js.map +1 -1
  552. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +1 -1
  553. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
  554. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +1 -1
  555. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  556. package/build/dist/UI/Components/Modal/ModalFooter.js +1 -1
  557. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  558. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +2 -2
  559. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  560. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +4 -4
  561. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  562. package/build/dist/UI/Components/Navbar/NavBar.js +9 -2
  563. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  564. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
  565. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  566. package/build/dist/UI/Components/Page/Page.js +1 -1
  567. package/build/dist/UI/Components/Page/Page.js.map +1 -1
  568. package/build/dist/UI/Components/Pagination/Pagination.js +3 -3
  569. package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
  570. package/build/dist/UI/Components/ProgressButtons/ProgressButtonItem.js +1 -1
  571. package/build/dist/UI/Components/ProgressButtons/ProgressButtonItem.js.map +1 -1
  572. package/build/dist/UI/Components/SideMenu/SideMenu.js +4 -1
  573. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  574. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +3 -1
  575. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -1
  576. package/build/dist/UI/Components/StatusPage/ResourceList.js +6 -6
  577. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
  578. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +1 -1
  579. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  580. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +1 -1
  581. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
  582. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js +1 -1
  583. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js.map +1 -1
  584. package/build/dist/UI/Components/Workflow/ComponentsModal.js +2 -2
  585. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  586. package/build/dist/UI/Components/Workflow/StepTraceViewer.js +1 -1
  587. package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -1
  588. package/build/dist/UI/Utils/Navigation.js +66 -33
  589. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  590. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js +7 -0
  591. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js.map +1 -1
  592. package/build/dist/UI/Utils/TelemetryService.js +3 -2
  593. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  594. package/build/dist/Utils/LabelRuleImportExport.js +2 -0
  595. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  596. package/build/dist/Utils/MetricUnitUtil.js +77 -13
  597. package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
  598. package/build/dist/Utils/Monitor/MetricValueFormatter.js +58 -13
  599. package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -1
  600. package/build/dist/Utils/Monitor/PlatformMetricUnitUtil.js +161 -0
  601. package/build/dist/Utils/Monitor/PlatformMetricUnitUtil.js.map +1 -0
  602. package/build/dist/Utils/Monitor/PlatformResourceIdentity.js +323 -0
  603. package/build/dist/Utils/Monitor/PlatformResourceIdentity.js.map +1 -0
  604. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.js +270 -0
  605. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.js.map +1 -0
  606. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +23 -0
  607. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  608. package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js +61 -0
  609. package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js.map +1 -1
  610. package/build/dist/Utils/Telemetry/DatabaseServerEntityKeys.js +178 -0
  611. package/build/dist/Utils/Telemetry/DatabaseServerEntityKeys.js.map +1 -0
  612. package/build/dist/Utils/Telemetry/EntityKey.js +133 -0
  613. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  614. package/build/dist/Utils/ValueFormatter.js +15 -0
  615. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  616. package/package.json +1 -1
  617. package/tsconfig.tests.json +7 -5
@@ -0,0 +1,1860 @@
1
+ /*
2
+ * The database engines the Databases product knows, and everything that has
3
+ * to agree about them. This is the single source of truth for:
4
+ *
5
+ * - normalizing `db.system.name` / legacy `db.system` values (and the
6
+ * spellings seen in the wild) to one value per engine
7
+ * - the engine's display name, which is also the prefix of every
8
+ * auto-generated DatabaseServer name ("PostgreSQL db.prod:5432")
9
+ * - the engine family: a fork or wire-compatible drop-in (MariaDB,
10
+ * Valkey, ScyllaDB, CockroachDB, TiDB, …) is its own engine, but client
11
+ * libraries report it under the family's name
12
+ * - the default port applied before an endpoint is keyed (semconv omits
13
+ * `server.port` when it is the default)
14
+ * - whether a client span alone may create a database of the engine
15
+ * - recognising OpenTelemetry Collector DB receivers from their
16
+ * instrumentation scope name, and where engine metrics come from when
17
+ * the collector has no receiver for the engine
18
+ * - the container images and Helm chart names the Kubernetes / Docker /
19
+ * Podman classifier accepts
20
+ *
21
+ * The `system` values are the semconv `db.system.name` values where semconv
22
+ * defines one (https://opentelemetry.io/docs/specs/semconv/registry/attributes/db/),
23
+ * the legacy `db.system` value where only that exists (`vertica`, `sybase`),
24
+ * and a lowercase OneUptime-defined name otherwise (`snowflake`, `tidb`,
25
+ * `qdrant`), in the semconv `<provider>.<service>` style for managed cloud
26
+ * services (`aws.documentdb`). Pure and isomorphic: no server imports,
27
+ * nothing here throws.
28
+ */
29
+ const RECEIVER = { kind: "receiver" };
30
+ const EMBEDDED = { kind: "embedded" };
31
+ // CloudWatch has no metrics receiver in collector-contrib; Metric Streams do.
32
+ const AWS_CLOUDWATCH_METRICS = {
33
+ kind: "cloud-monitoring",
34
+ receiver: "awsfirehose",
35
+ note: "Stream the service's CloudWatch metrics to a collector through a CloudWatch Metric Stream and Amazon Data Firehose, received by the `awsfirehose` receiver.",
36
+ };
37
+ const GOOGLE_CLOUD_MONITORING = {
38
+ kind: "cloud-monitoring",
39
+ receiver: "googlecloudmonitoring",
40
+ note: "Read the service's metrics from Cloud Monitoring with the `googlecloudmonitoring` receiver.",
41
+ };
42
+ const JMX_ONLY = "exposes its metrics over JMX; run the Prometheus JMX exporter as a Java agent and scrape it with the `prometheus` receiver";
43
+ export const DATABASE_SYSTEMS = [
44
+ // ---- relational -------------------------------------------------------
45
+ {
46
+ system: "postgresql",
47
+ displayName: "PostgreSQL",
48
+ // `edb`: EDB Postgres Advanced Server (a legacy semconv value).
49
+ aliases: ["postgres", "pg", "pgsql", "edb"],
50
+ defaultPort: 5432,
51
+ receiverTypes: ["postgresql"],
52
+ receiverMetricPrefixes: ["postgresql."],
53
+ imageRepositories: [
54
+ "postgres",
55
+ "postgresql",
56
+ "postgis/postgis",
57
+ "kartoza/postgis",
58
+ "timescale/timescaledb",
59
+ "timescale/timescaledb-ha",
60
+ "pgvector/pgvector",
61
+ "ankane/pgvector",
62
+ "supabase/postgres",
63
+ "citusdata/citus",
64
+ "paradedb/paradedb",
65
+ "bitnami/postgresql",
66
+ "bitnami/postgresql-repmgr",
67
+ "cloudnative-pg/postgresql",
68
+ "cloudnative-pg/postgis",
69
+ "crunchydata/crunchy-postgres",
70
+ "crunchydata/crunchy-postgres-gis",
71
+ "percona/percona-distribution-postgresql",
72
+ ],
73
+ kubernetesChartNames: ["postgresql", "postgresql-ha"],
74
+ hasCollectorReceiver: true,
75
+ deployment: "server",
76
+ engineMetrics: RECEIVER,
77
+ },
78
+ {
79
+ system: "mysql",
80
+ displayName: "MySQL",
81
+ // Percona Server for MySQL is MySQL, not a fork with its own protocol.
82
+ aliases: ["percona"],
83
+ defaultPort: 3306,
84
+ receiverTypes: ["mysql"],
85
+ receiverMetricPrefixes: ["mysql."],
86
+ imageRepositories: [
87
+ "mysql",
88
+ "mysql/mysql-server",
89
+ "mysql/community-server",
90
+ "mysql/enterprise-server",
91
+ "bitnami/mysql",
92
+ "percona",
93
+ "percona/percona-server",
94
+ "percona/percona-server-mysql",
95
+ "percona/percona-xtradb-cluster",
96
+ ],
97
+ kubernetesChartNames: ["mysql"],
98
+ hasCollectorReceiver: true,
99
+ deployment: "server",
100
+ engineMetrics: RECEIVER,
101
+ },
102
+ {
103
+ system: "mariadb",
104
+ displayName: "MariaDB",
105
+ aliases: [],
106
+ defaultPort: 3306,
107
+ receiverTypes: ["mysql"],
108
+ receiverMetricPrefixes: ["mysql."],
109
+ imageRepositories: [
110
+ "mariadb",
111
+ "mariadb/server",
112
+ "bitnami/mariadb",
113
+ "bitnami/mariadb-galera",
114
+ ],
115
+ kubernetesChartNames: ["mariadb", "mariadb-galera"],
116
+ hasCollectorReceiver: true,
117
+ family: "mysql",
118
+ versionPattern: /mariadb/i,
119
+ versionMajorFrom: 10,
120
+ deployment: "server",
121
+ engineMetrics: RECEIVER,
122
+ },
123
+ {
124
+ system: "microsoft.sql_server",
125
+ displayName: "SQL Server",
126
+ aliases: ["mssql", "sqlserver", "sql_server"],
127
+ defaultPort: 1433,
128
+ receiverTypes: ["sqlserver"],
129
+ receiverMetricPrefixes: ["sqlserver."],
130
+ imageRepositories: ["mssql/server", "mssql/rhel/server", "azure-sql-edge"],
131
+ kubernetesChartNames: ["mssql", "mssql-server"],
132
+ hasCollectorReceiver: true,
133
+ deployment: "server",
134
+ engineMetrics: RECEIVER,
135
+ },
136
+ {
137
+ system: "oracle.db",
138
+ displayName: "Oracle",
139
+ aliases: ["oracle", "oracledb"],
140
+ defaultPort: 1521,
141
+ receiverTypes: ["oracledb"],
142
+ receiverMetricPrefixes: ["oracledb."],
143
+ imageRepositories: [
144
+ "gvenzl/oracle-free",
145
+ "gvenzl/oracle-xe",
146
+ "database/enterprise",
147
+ "database/free",
148
+ "database/express",
149
+ "oracle/database",
150
+ ],
151
+ kubernetesChartNames: [],
152
+ hasCollectorReceiver: true,
153
+ deployment: "server",
154
+ engineMetrics: RECEIVER,
155
+ },
156
+ {
157
+ system: "ibm.db2",
158
+ displayName: "IBM Db2",
159
+ aliases: ["db2"],
160
+ defaultPort: 50000,
161
+ receiverTypes: [],
162
+ receiverMetricPrefixes: [],
163
+ imageRepositories: ["db2_community/db2", "ibmcom/db2"],
164
+ kubernetesChartNames: [],
165
+ hasCollectorReceiver: false,
166
+ deployment: "server",
167
+ engineMetrics: {
168
+ kind: "none",
169
+ reason: "The collector has no Db2 receiver and its `sql_query` receiver has no Db2 driver; use IBM's own Db2 monitoring (or a Prometheus exporter for Db2) and stamp its data with this database's identity.",
170
+ },
171
+ },
172
+ {
173
+ system: "sap.hana",
174
+ displayName: "SAP HANA",
175
+ // `saphana` is what the collector's saphana receiver puts in `db.system`.
176
+ aliases: ["hanadb", "saphana"],
177
+ defaultPort: 30015,
178
+ receiverTypes: ["saphana"],
179
+ receiverMetricPrefixes: ["saphana."],
180
+ imageRepositories: ["saplabs/hanaexpress"],
181
+ kubernetesChartNames: [],
182
+ hasCollectorReceiver: true,
183
+ deployment: "server",
184
+ engineMetrics: RECEIVER,
185
+ },
186
+ {
187
+ system: "ibm.informix",
188
+ displayName: "IBM Informix",
189
+ aliases: ["informix"],
190
+ defaultPort: 9088,
191
+ receiverTypes: [],
192
+ receiverMetricPrefixes: [],
193
+ imageRepositories: ["informix-developer-database"],
194
+ kubernetesChartNames: [],
195
+ hasCollectorReceiver: false,
196
+ deployment: "server",
197
+ engineMetrics: {
198
+ kind: "none",
199
+ reason: "The collector has no Informix receiver; export Informix's own statistics (onstat, the sysmaster database) and stamp them with this database's identity.",
200
+ },
201
+ },
202
+ {
203
+ system: "ibm.netezza",
204
+ displayName: "IBM Netezza",
205
+ aliases: ["netezza"],
206
+ defaultPort: 5480,
207
+ receiverTypes: [],
208
+ receiverMetricPrefixes: [],
209
+ imageRepositories: [],
210
+ kubernetesChartNames: [],
211
+ hasCollectorReceiver: false,
212
+ deployment: "server",
213
+ engineMetrics: {
214
+ kind: "none",
215
+ reason: "The collector has no Netezza receiver; use the appliance's own monitoring and stamp its data with this database's identity.",
216
+ },
217
+ },
218
+ {
219
+ system: "teradata",
220
+ displayName: "Teradata",
221
+ aliases: [],
222
+ defaultPort: 1025,
223
+ receiverTypes: [],
224
+ receiverMetricPrefixes: [],
225
+ imageRepositories: [],
226
+ kubernetesChartNames: [],
227
+ hasCollectorReceiver: false,
228
+ deployment: "server",
229
+ engineMetrics: {
230
+ kind: "none",
231
+ reason: "The collector has no Teradata receiver; export Teradata's own resource usage (DBQL, ResUsage) and stamp it with this database's identity.",
232
+ },
233
+ },
234
+ {
235
+ system: "sap.maxdb",
236
+ displayName: "SAP MaxDB",
237
+ aliases: ["maxdb"],
238
+ defaultPort: 7210,
239
+ receiverTypes: [],
240
+ receiverMetricPrefixes: [],
241
+ imageRepositories: [],
242
+ kubernetesChartNames: [],
243
+ hasCollectorReceiver: false,
244
+ deployment: "server",
245
+ engineMetrics: {
246
+ kind: "none",
247
+ reason: "The collector has no MaxDB receiver; export MaxDB's own statistics and stamp them with this database's identity.",
248
+ },
249
+ },
250
+ {
251
+ system: "sybase",
252
+ displayName: "SAP ASE (Sybase)",
253
+ aliases: ["sap.ase"],
254
+ defaultPort: 5000,
255
+ receiverTypes: [],
256
+ receiverMetricPrefixes: [],
257
+ imageRepositories: [],
258
+ kubernetesChartNames: [],
259
+ hasCollectorReceiver: false,
260
+ deployment: "server",
261
+ engineMetrics: {
262
+ kind: "none",
263
+ reason: "The collector has no SAP ASE receiver; export the monitoring tables (MDA tables) and stamp them with this database's identity.",
264
+ },
265
+ },
266
+ {
267
+ system: "intersystems.cache",
268
+ displayName: "InterSystems IRIS / Caché",
269
+ aliases: ["cache", "intersystems_cache"],
270
+ defaultPort: 1972,
271
+ receiverTypes: [],
272
+ receiverMetricPrefixes: [],
273
+ imageRepositories: [
274
+ "intersystems/iris",
275
+ "intersystems/iris-community",
276
+ "intersystemsdc/iris-community",
277
+ ],
278
+ kubernetesChartNames: [],
279
+ hasCollectorReceiver: false,
280
+ deployment: "server",
281
+ engineMetrics: {
282
+ kind: "prometheus",
283
+ port: 52773,
284
+ path: "/api/monitor/metrics",
285
+ note: "IRIS serves this on its web server port (Caché has no such endpoint).",
286
+ },
287
+ },
288
+ {
289
+ system: "actian.ingres",
290
+ displayName: "Actian Ingres",
291
+ aliases: ["ingres"],
292
+ // The listen port derives from the installation code; there is no one default.
293
+ defaultPort: null,
294
+ receiverTypes: [],
295
+ receiverMetricPrefixes: [],
296
+ imageRepositories: [],
297
+ kubernetesChartNames: [],
298
+ hasCollectorReceiver: false,
299
+ deployment: "server",
300
+ engineMetrics: {
301
+ kind: "none",
302
+ reason: "The collector has no Ingres receiver; export Ingres's own statistics and stamp them with this database's identity.",
303
+ },
304
+ },
305
+ {
306
+ system: "softwareag.adabas",
307
+ displayName: "Software AG Adabas",
308
+ aliases: ["adabas"],
309
+ defaultPort: null,
310
+ receiverTypes: [],
311
+ receiverMetricPrefixes: [],
312
+ imageRepositories: [],
313
+ kubernetesChartNames: [],
314
+ hasCollectorReceiver: false,
315
+ deployment: "server",
316
+ engineMetrics: {
317
+ kind: "none",
318
+ reason: "The collector has no Adabas receiver; export Adabas's own statistics and stamp them with this database's identity.",
319
+ },
320
+ },
321
+ {
322
+ system: "firebirdsql",
323
+ displayName: "Firebird",
324
+ aliases: ["firebird"],
325
+ defaultPort: 3050,
326
+ receiverTypes: [],
327
+ receiverMetricPrefixes: [],
328
+ imageRepositories: ["firebirdsql/firebird", "jacobalberty/firebird"],
329
+ kubernetesChartNames: [],
330
+ hasCollectorReceiver: false,
331
+ deployment: "server",
332
+ engineMetrics: {
333
+ kind: "none",
334
+ reason: "The collector has no Firebird receiver; export the MON$ monitoring tables and stamp them with this database's identity.",
335
+ },
336
+ },
337
+ {
338
+ system: "interbase",
339
+ displayName: "InterBase",
340
+ aliases: [],
341
+ defaultPort: 3050,
342
+ receiverTypes: [],
343
+ receiverMetricPrefixes: [],
344
+ imageRepositories: [],
345
+ kubernetesChartNames: [],
346
+ hasCollectorReceiver: false,
347
+ // Firebird forked from InterBase 6 and keeps its wire protocol.
348
+ family: "firebirdsql",
349
+ deployment: "server",
350
+ engineMetrics: {
351
+ kind: "none",
352
+ reason: "The collector has no InterBase receiver; export the TMP$ monitoring tables and stamp them with this database's identity.",
353
+ },
354
+ },
355
+ {
356
+ system: "progress",
357
+ displayName: "Progress OpenEdge",
358
+ aliases: [],
359
+ // The SQL broker port is chosen per database; there is no one default.
360
+ defaultPort: null,
361
+ receiverTypes: [],
362
+ receiverMetricPrefixes: [],
363
+ imageRepositories: [],
364
+ kubernetesChartNames: [],
365
+ hasCollectorReceiver: false,
366
+ deployment: "server",
367
+ engineMetrics: {
368
+ kind: "none",
369
+ reason: "The collector has no OpenEdge receiver; export the virtual system tables (_Connect, _ActSummary) and stamp them with this database's identity.",
370
+ },
371
+ },
372
+ {
373
+ system: "pervasive",
374
+ displayName: "Actian Zen (Pervasive PSQL)",
375
+ aliases: [],
376
+ defaultPort: 1583,
377
+ receiverTypes: [],
378
+ receiverMetricPrefixes: [],
379
+ imageRepositories: [],
380
+ kubernetesChartNames: [],
381
+ hasCollectorReceiver: false,
382
+ deployment: "server",
383
+ engineMetrics: {
384
+ kind: "none",
385
+ reason: "The collector has no Actian Zen receiver; export its monitor statistics and stamp them with this database's identity.",
386
+ },
387
+ },
388
+ {
389
+ system: "filemaker",
390
+ displayName: "Claris FileMaker",
391
+ aliases: [],
392
+ // The xDBC (ODBC / JDBC) listener SQL clients connect to.
393
+ defaultPort: 2399,
394
+ receiverTypes: [],
395
+ receiverMetricPrefixes: [],
396
+ imageRepositories: [],
397
+ kubernetesChartNames: [],
398
+ hasCollectorReceiver: false,
399
+ deployment: "server",
400
+ engineMetrics: {
401
+ kind: "none",
402
+ reason: "The collector has no FileMaker receiver; export FileMaker Server's statistics (its Admin API) and stamp them with this database's identity.",
403
+ },
404
+ },
405
+ // ---- distributed SQL, PostgreSQL and MySQL wire-compatible ------------
406
+ {
407
+ system: "cockroachdb",
408
+ displayName: "CockroachDB",
409
+ aliases: ["cockroach"],
410
+ defaultPort: 26257,
411
+ receiverTypes: [],
412
+ receiverMetricPrefixes: [],
413
+ imageRepositories: ["cockroachdb/cockroach"],
414
+ kubernetesChartNames: ["cockroachdb"],
415
+ hasCollectorReceiver: false,
416
+ // Applications reach it with a PostgreSQL driver.
417
+ family: "postgresql",
418
+ deployment: "server",
419
+ engineMetrics: { kind: "prometheus", port: 8080, path: "/_status/vars" },
420
+ },
421
+ {
422
+ system: "yugabytedb",
423
+ displayName: "YugabyteDB",
424
+ aliases: ["yugabyte"],
425
+ // YSQL, the PostgreSQL-compatible API.
426
+ defaultPort: 5433,
427
+ receiverTypes: [],
428
+ receiverMetricPrefixes: [],
429
+ imageRepositories: ["yugabytedb/yugabyte"],
430
+ kubernetesChartNames: [],
431
+ hasCollectorReceiver: false,
432
+ family: "postgresql",
433
+ deployment: "server",
434
+ engineMetrics: {
435
+ kind: "prometheus",
436
+ port: 9000,
437
+ path: "/prometheus-metrics",
438
+ note: "Served by every yb-tserver (yb-master serves the same path on port 7000).",
439
+ },
440
+ },
441
+ {
442
+ system: "aws.redshift",
443
+ displayName: "Amazon Redshift",
444
+ aliases: ["redshift"],
445
+ defaultPort: 5439,
446
+ receiverTypes: [],
447
+ receiverMetricPrefixes: [],
448
+ imageRepositories: [],
449
+ kubernetesChartNames: [],
450
+ hasCollectorReceiver: false,
451
+ // Applications reach it with a PostgreSQL driver.
452
+ family: "postgresql",
453
+ // A cluster (or workgroup) endpoint names one warehouse.
454
+ deployment: "server",
455
+ engineMetrics: AWS_CLOUDWATCH_METRICS,
456
+ },
457
+ {
458
+ system: "greenplum",
459
+ displayName: "Greenplum",
460
+ aliases: [],
461
+ defaultPort: 5432,
462
+ receiverTypes: [],
463
+ receiverMetricPrefixes: [],
464
+ imageRepositories: [],
465
+ kubernetesChartNames: [],
466
+ hasCollectorReceiver: false,
467
+ family: "postgresql",
468
+ deployment: "server",
469
+ engineMetrics: {
470
+ kind: "none",
471
+ reason: "The collector has no Greenplum receiver; export the gp_toolkit views and stamp them with this database's identity.",
472
+ },
473
+ },
474
+ {
475
+ system: "questdb",
476
+ displayName: "QuestDB",
477
+ aliases: [],
478
+ // The PostgreSQL wire protocol port applications query.
479
+ defaultPort: 8812,
480
+ receiverTypes: [],
481
+ receiverMetricPrefixes: [],
482
+ imageRepositories: ["questdb/questdb"],
483
+ kubernetesChartNames: ["questdb"],
484
+ hasCollectorReceiver: false,
485
+ family: "postgresql",
486
+ deployment: "server",
487
+ engineMetrics: {
488
+ kind: "prometheus",
489
+ port: 9003,
490
+ path: "/metrics",
491
+ note: "Set `metrics.enabled=true` in server.conf (or QDB_METRICS_ENABLED=true).",
492
+ },
493
+ },
494
+ {
495
+ system: "tidb",
496
+ displayName: "TiDB",
497
+ aliases: [],
498
+ defaultPort: 4000,
499
+ receiverTypes: [],
500
+ receiverMetricPrefixes: [],
501
+ imageRepositories: ["pingcap/tidb"],
502
+ kubernetesChartNames: [],
503
+ hasCollectorReceiver: false,
504
+ // Applications reach it with a MySQL driver.
505
+ family: "mysql",
506
+ versionPattern: /tidb/i,
507
+ deployment: "server",
508
+ engineMetrics: {
509
+ kind: "prometheus",
510
+ port: 10080,
511
+ path: "/metrics",
512
+ note: "The tidb-server status port.",
513
+ },
514
+ },
515
+ {
516
+ system: "vitess",
517
+ displayName: "Vitess",
518
+ aliases: [],
519
+ // vtgate's MySQL port, as the Vitess operator and PlanetScale serve it.
520
+ defaultPort: 3306,
521
+ receiverTypes: [],
522
+ receiverMetricPrefixes: [],
523
+ imageRepositories: ["vitess/vtgate"],
524
+ kubernetesChartNames: [],
525
+ hasCollectorReceiver: false,
526
+ family: "mysql",
527
+ versionPattern: /vitess/i,
528
+ deployment: "server",
529
+ engineMetrics: {
530
+ kind: "prometheus",
531
+ port: 15000,
532
+ path: "/metrics",
533
+ note: "Served on each component's web port (`--port`); scrape vtgate and the vttablets.",
534
+ },
535
+ },
536
+ {
537
+ system: "singlestore",
538
+ displayName: "SingleStore",
539
+ aliases: ["memsql"],
540
+ defaultPort: 3306,
541
+ receiverTypes: [],
542
+ receiverMetricPrefixes: [],
543
+ imageRepositories: [
544
+ "singlestore/cluster-in-a-box",
545
+ "singlestore/node",
546
+ "memsql/cluster-in-a-box",
547
+ ],
548
+ kubernetesChartNames: [],
549
+ hasCollectorReceiver: false,
550
+ family: "mysql",
551
+ deployment: "server",
552
+ engineMetrics: {
553
+ kind: "prometheus",
554
+ port: 9104,
555
+ path: "/metrics",
556
+ note: "Start the exporter on the master aggregator (`SET GLOBAL exporter_port = 9104`).",
557
+ },
558
+ },
559
+ {
560
+ system: "oceanbase",
561
+ displayName: "OceanBase",
562
+ aliases: [],
563
+ defaultPort: 2881,
564
+ receiverTypes: [],
565
+ receiverMetricPrefixes: [],
566
+ imageRepositories: ["oceanbase/oceanbase-ce"],
567
+ kubernetesChartNames: [],
568
+ hasCollectorReceiver: false,
569
+ family: "mysql",
570
+ versionPattern: /oceanbase/i,
571
+ deployment: "server",
572
+ engineMetrics: {
573
+ kind: "none",
574
+ reason: "The collector has no OceanBase receiver; scrape the Prometheus endpoint of OceanBase's obagent with the `prometheus` receiver and stamp it with this database's identity.",
575
+ },
576
+ },
577
+ {
578
+ system: "starrocks",
579
+ displayName: "StarRocks",
580
+ aliases: [],
581
+ // The frontend's MySQL protocol port.
582
+ defaultPort: 9030,
583
+ receiverTypes: [],
584
+ receiverMetricPrefixes: [],
585
+ imageRepositories: ["starrocks/allin1-ubuntu", "starrocks/fe-ubuntu"],
586
+ kubernetesChartNames: [],
587
+ hasCollectorReceiver: false,
588
+ family: "mysql",
589
+ deployment: "server",
590
+ engineMetrics: {
591
+ kind: "prometheus",
592
+ port: 8030,
593
+ path: "/metrics",
594
+ note: "The frontend's HTTP port (backends serve the same path on 8040).",
595
+ },
596
+ },
597
+ {
598
+ system: "doris",
599
+ displayName: "Apache Doris",
600
+ aliases: [],
601
+ defaultPort: 9030,
602
+ receiverTypes: [],
603
+ receiverMetricPrefixes: [],
604
+ imageRepositories: ["apache/doris"],
605
+ kubernetesChartNames: [],
606
+ hasCollectorReceiver: false,
607
+ family: "mysql",
608
+ deployment: "server",
609
+ engineMetrics: {
610
+ kind: "prometheus",
611
+ port: 8030,
612
+ path: "/metrics",
613
+ note: "The frontend's HTTP port (backends serve the same path on 8040).",
614
+ },
615
+ },
616
+ {
617
+ system: "gcp.spanner",
618
+ displayName: "Cloud Spanner",
619
+ aliases: ["spanner"],
620
+ defaultPort: 443,
621
+ receiverTypes: ["googlecloudspanner"],
622
+ receiverMetricPrefixes: ["database/spanner/"],
623
+ imageRepositories: [],
624
+ kubernetesChartNames: [],
625
+ hasCollectorReceiver: true,
626
+ // spanner.googleapis.com serves every instance.
627
+ deployment: "cloud-api",
628
+ engineMetrics: RECEIVER,
629
+ },
630
+ // ---- warehouses, lakehouses and query engines --------------------------
631
+ {
632
+ system: "snowflake",
633
+ displayName: "Snowflake",
634
+ aliases: [],
635
+ defaultPort: 443,
636
+ receiverTypes: ["snowflake"],
637
+ receiverMetricPrefixes: ["snowflake."],
638
+ imageRepositories: [],
639
+ kubernetesChartNames: [],
640
+ hasCollectorReceiver: true,
641
+ // `<account>.snowflakecomputing.com` names one account.
642
+ deployment: "server",
643
+ engineMetrics: RECEIVER,
644
+ },
645
+ {
646
+ system: "bigquery",
647
+ displayName: "Google BigQuery",
648
+ aliases: ["gcp.bigquery"],
649
+ defaultPort: 443,
650
+ receiverTypes: [],
651
+ receiverMetricPrefixes: [],
652
+ imageRepositories: [],
653
+ kubernetesChartNames: [],
654
+ hasCollectorReceiver: false,
655
+ // bigquery.googleapis.com serves every project.
656
+ deployment: "cloud-api",
657
+ engineMetrics: GOOGLE_CLOUD_MONITORING,
658
+ },
659
+ {
660
+ system: "databricks",
661
+ displayName: "Databricks",
662
+ aliases: [],
663
+ defaultPort: 443,
664
+ receiverTypes: [],
665
+ receiverMetricPrefixes: [],
666
+ imageRepositories: [],
667
+ kubernetesChartNames: [],
668
+ hasCollectorReceiver: false,
669
+ // `<workspace>.cloud.databricks.com` names one workspace.
670
+ deployment: "server",
671
+ engineMetrics: {
672
+ kind: "none",
673
+ reason: "The collector has no Databricks receiver; read warehouse and query history from the workspace's system tables and stamp it with this database's identity.",
674
+ },
675
+ },
676
+ {
677
+ system: "vertica",
678
+ displayName: "Vertica",
679
+ aliases: [],
680
+ defaultPort: 5433,
681
+ receiverTypes: [],
682
+ receiverMetricPrefixes: [],
683
+ imageRepositories: ["vertica/vertica-ce"],
684
+ kubernetesChartNames: [],
685
+ hasCollectorReceiver: false,
686
+ deployment: "server",
687
+ engineMetrics: {
688
+ kind: "none",
689
+ reason: "The collector has no Vertica receiver; export the v_monitor schema (or scrape a Vertica Prometheus exporter) and stamp it with this database's identity.",
690
+ },
691
+ },
692
+ {
693
+ system: "clickhouse",
694
+ displayName: "ClickHouse",
695
+ aliases: [],
696
+ defaultPort: 9000,
697
+ receiverTypes: [],
698
+ receiverMetricPrefixes: [],
699
+ imageRepositories: [
700
+ "clickhouse-server",
701
+ "clickhouse/clickhouse-server",
702
+ "yandex/clickhouse-server",
703
+ "altinity/clickhouse-server",
704
+ "bitnami/clickhouse",
705
+ ],
706
+ kubernetesChartNames: ["clickhouse"],
707
+ hasCollectorReceiver: false,
708
+ deployment: "server",
709
+ engineMetrics: {
710
+ kind: "prometheus",
711
+ port: 9363,
712
+ path: "/metrics",
713
+ note: "Enable the `<prometheus>` section of the server config.",
714
+ },
715
+ },
716
+ {
717
+ system: "hive",
718
+ displayName: "Apache Hive",
719
+ aliases: [],
720
+ // HiveServer2's Thrift port.
721
+ defaultPort: 10000,
722
+ receiverTypes: [],
723
+ receiverMetricPrefixes: [],
724
+ imageRepositories: ["apache/hive"],
725
+ kubernetesChartNames: [],
726
+ hasCollectorReceiver: false,
727
+ deployment: "server",
728
+ engineMetrics: { kind: "none", reason: `HiveServer2 ${JMX_ONLY}.` },
729
+ },
730
+ {
731
+ system: "impala",
732
+ displayName: "Apache Impala",
733
+ aliases: [],
734
+ // The HiveServer2-protocol port JDBC / ODBC clients use.
735
+ defaultPort: 21050,
736
+ receiverTypes: [],
737
+ receiverMetricPrefixes: [],
738
+ imageRepositories: [],
739
+ kubernetesChartNames: [],
740
+ hasCollectorReceiver: false,
741
+ deployment: "server",
742
+ engineMetrics: {
743
+ kind: "none",
744
+ reason: "The collector has no Impala receiver; export the daemons' metrics from their debug web UI (/metrics?json) and stamp them with this database's identity.",
745
+ },
746
+ },
747
+ {
748
+ system: "trino",
749
+ displayName: "Trino",
750
+ aliases: [],
751
+ defaultPort: 8080,
752
+ receiverTypes: [],
753
+ receiverMetricPrefixes: [],
754
+ imageRepositories: ["trinodb/trino"],
755
+ kubernetesChartNames: ["trino"],
756
+ hasCollectorReceiver: false,
757
+ deployment: "server",
758
+ engineMetrics: {
759
+ kind: "prometheus",
760
+ port: 8080,
761
+ path: "/metrics",
762
+ note: "Served by the coordinator; send `X-Trino-User` if authentication is on.",
763
+ },
764
+ },
765
+ {
766
+ system: "presto",
767
+ displayName: "Presto",
768
+ aliases: [],
769
+ defaultPort: 8080,
770
+ receiverTypes: [],
771
+ receiverMetricPrefixes: [],
772
+ imageRepositories: ["prestodb/presto"],
773
+ kubernetesChartNames: [],
774
+ hasCollectorReceiver: false,
775
+ deployment: "server",
776
+ engineMetrics: { kind: "none", reason: `Presto ${JMX_ONLY}.` },
777
+ },
778
+ {
779
+ system: "druid",
780
+ displayName: "Apache Druid",
781
+ aliases: [],
782
+ // The router, which serves Druid SQL.
783
+ defaultPort: 8888,
784
+ receiverTypes: [],
785
+ receiverMetricPrefixes: [],
786
+ imageRepositories: ["apache/druid"],
787
+ kubernetesChartNames: ["druid"],
788
+ hasCollectorReceiver: false,
789
+ deployment: "server",
790
+ engineMetrics: {
791
+ kind: "none",
792
+ reason: "The collector has no Druid receiver; load Druid's `prometheus-emitter` extension, scrape the port you give it with the `prometheus` receiver and stamp it with this database's identity.",
793
+ },
794
+ },
795
+ {
796
+ system: "pinot",
797
+ displayName: "Apache Pinot",
798
+ aliases: [],
799
+ // The broker's query port.
800
+ defaultPort: 8099,
801
+ receiverTypes: [],
802
+ receiverMetricPrefixes: [],
803
+ imageRepositories: ["apachepinot/pinot"],
804
+ kubernetesChartNames: ["pinot"],
805
+ hasCollectorReceiver: false,
806
+ deployment: "server",
807
+ engineMetrics: { kind: "none", reason: `Pinot ${JMX_ONLY}.` },
808
+ },
809
+ // ---- key-value stores and caches -----------------------------------------
810
+ {
811
+ system: "redis",
812
+ displayName: "Redis",
813
+ aliases: [],
814
+ defaultPort: 6379,
815
+ receiverTypes: ["redis"],
816
+ receiverMetricPrefixes: ["redis."],
817
+ imageRepositories: [
818
+ "redis",
819
+ "redis-stack-server",
820
+ "redis/redis-stack",
821
+ "redis/redis-stack-server",
822
+ "bitnami/redis",
823
+ "bitnami/redis-cluster",
824
+ "opstree/redis",
825
+ ],
826
+ kubernetesChartNames: ["redis", "redis-cluster"],
827
+ hasCollectorReceiver: true,
828
+ deployment: "server",
829
+ engineMetrics: RECEIVER,
830
+ },
831
+ {
832
+ system: "valkey",
833
+ displayName: "Valkey",
834
+ aliases: [],
835
+ defaultPort: 6379,
836
+ receiverTypes: ["redis"],
837
+ receiverMetricPrefixes: ["redis."],
838
+ // The bare basename also covers Red Hat's rhel10/valkey-8.
839
+ imageRepositories: ["valkey", "bitnami/valkey-cluster"],
840
+ kubernetesChartNames: ["valkey", "valkey-cluster"],
841
+ hasCollectorReceiver: true,
842
+ family: "redis",
843
+ // INFO: redis_version:7.2.4 next to valkey_version:8.1.10.
844
+ compatibilityVersionAttributes: ["redis.version"],
845
+ deployment: "server",
846
+ engineMetrics: RECEIVER,
847
+ },
848
+ {
849
+ system: "keydb",
850
+ displayName: "KeyDB",
851
+ aliases: [],
852
+ defaultPort: 6379,
853
+ receiverTypes: ["redis"],
854
+ receiverMetricPrefixes: ["redis."],
855
+ imageRepositories: ["eqalpha/keydb"],
856
+ kubernetesChartNames: ["keydb"],
857
+ hasCollectorReceiver: true,
858
+ family: "redis",
859
+ deployment: "server",
860
+ engineMetrics: RECEIVER,
861
+ },
862
+ {
863
+ system: "dragonfly",
864
+ displayName: "Dragonfly",
865
+ aliases: ["dragonflydb"],
866
+ defaultPort: 6379,
867
+ receiverTypes: ["redis"],
868
+ receiverMetricPrefixes: ["redis."],
869
+ imageRepositories: ["dragonflydb/dragonfly"],
870
+ kubernetesChartNames: ["dragonfly"],
871
+ hasCollectorReceiver: true,
872
+ family: "redis",
873
+ /*
874
+ * INFO's redis_version is the Redis API level Dragonfly emulates; its
875
+ * own release is dragonfly_version (df-v1.x).
876
+ */
877
+ compatibilityVersionAttributes: ["redis.version"],
878
+ deployment: "server",
879
+ engineMetrics: RECEIVER,
880
+ },
881
+ {
882
+ system: "memcached",
883
+ displayName: "Memcached",
884
+ aliases: [],
885
+ defaultPort: 11211,
886
+ receiverTypes: ["memcached"],
887
+ receiverMetricPrefixes: ["memcached."],
888
+ imageRepositories: ["memcached", "bitnami/memcached"],
889
+ kubernetesChartNames: ["memcached"],
890
+ hasCollectorReceiver: true,
891
+ deployment: "server",
892
+ engineMetrics: RECEIVER,
893
+ },
894
+ {
895
+ system: "etcd",
896
+ displayName: "etcd",
897
+ aliases: [],
898
+ defaultPort: 2379,
899
+ receiverTypes: [],
900
+ receiverMetricPrefixes: [],
901
+ /*
902
+ * Not the bare `etcd` basename: that is also the Kubernetes control
903
+ * plane's own etcd (registry.k8s.io/etcd).
904
+ */
905
+ imageRepositories: ["coreos/etcd", "etcd-development/etcd", "bitnami/etcd"],
906
+ kubernetesChartNames: ["etcd"],
907
+ hasCollectorReceiver: false,
908
+ deployment: "server",
909
+ engineMetrics: { kind: "prometheus", port: 2379, path: "/metrics" },
910
+ },
911
+ {
912
+ system: "hazelcast",
913
+ displayName: "Hazelcast",
914
+ aliases: [],
915
+ defaultPort: 5701,
916
+ receiverTypes: [],
917
+ receiverMetricPrefixes: [],
918
+ imageRepositories: [
919
+ "hazelcast/hazelcast",
920
+ "hazelcast/hazelcast-enterprise",
921
+ ],
922
+ kubernetesChartNames: ["hazelcast"],
923
+ hasCollectorReceiver: false,
924
+ deployment: "server",
925
+ engineMetrics: {
926
+ kind: "none",
927
+ reason: "The collector has no Hazelcast receiver; set PROMETHEUS_PORT on the Hazelcast container (its image bundles the JMX exporter), scrape that port with the `prometheus` receiver and stamp it with this database's identity.",
928
+ },
929
+ },
930
+ {
931
+ system: "ignite",
932
+ displayName: "Apache Ignite",
933
+ aliases: [],
934
+ // The thin-client port.
935
+ defaultPort: 10800,
936
+ receiverTypes: [],
937
+ receiverMetricPrefixes: [],
938
+ imageRepositories: ["apacheignite/ignite"],
939
+ kubernetesChartNames: [],
940
+ hasCollectorReceiver: false,
941
+ deployment: "server",
942
+ engineMetrics: { kind: "none", reason: `Ignite ${JMX_ONLY}.` },
943
+ },
944
+ {
945
+ system: "aerospike",
946
+ displayName: "Aerospike",
947
+ aliases: [],
948
+ defaultPort: 3000,
949
+ receiverTypes: ["aerospike"],
950
+ receiverMetricPrefixes: ["aerospike."],
951
+ imageRepositories: [
952
+ "aerospike/aerospike-server",
953
+ "aerospike/aerospike-server-enterprise",
954
+ ],
955
+ kubernetesChartNames: [],
956
+ hasCollectorReceiver: true,
957
+ deployment: "server",
958
+ engineMetrics: RECEIVER,
959
+ },
960
+ {
961
+ system: "riak",
962
+ displayName: "Riak KV",
963
+ aliases: [],
964
+ // The Protocol Buffers port clients use (the HTTP API is 8098).
965
+ defaultPort: 8087,
966
+ receiverTypes: ["riak"],
967
+ receiverMetricPrefixes: ["riak."],
968
+ imageRepositories: ["basho/riak-kv"],
969
+ kubernetesChartNames: [],
970
+ hasCollectorReceiver: true,
971
+ deployment: "server",
972
+ engineMetrics: RECEIVER,
973
+ },
974
+ {
975
+ system: "foundationdb",
976
+ displayName: "FoundationDB",
977
+ aliases: [],
978
+ defaultPort: 4500,
979
+ receiverTypes: [],
980
+ receiverMetricPrefixes: [],
981
+ imageRepositories: ["foundationdb/foundationdb"],
982
+ kubernetesChartNames: [],
983
+ hasCollectorReceiver: false,
984
+ deployment: "server",
985
+ engineMetrics: {
986
+ kind: "none",
987
+ reason: "The collector has no FoundationDB receiver; export `status json` (for example with a FoundationDB Prometheus exporter) and stamp it with this database's identity.",
988
+ },
989
+ },
990
+ {
991
+ system: "aws.dynamodb",
992
+ displayName: "Amazon DynamoDB",
993
+ aliases: ["dynamodb"],
994
+ defaultPort: 443,
995
+ receiverTypes: [],
996
+ receiverMetricPrefixes: [],
997
+ imageRepositories: [],
998
+ kubernetesChartNames: [],
999
+ hasCollectorReceiver: false,
1000
+ // dynamodb.<region>.amazonaws.com serves every table in the region.
1001
+ deployment: "cloud-api",
1002
+ engineMetrics: AWS_CLOUDWATCH_METRICS,
1003
+ },
1004
+ {
1005
+ system: "gcp.bigtable",
1006
+ displayName: "Cloud Bigtable",
1007
+ aliases: ["bigtable"],
1008
+ defaultPort: 443,
1009
+ receiverTypes: [],
1010
+ receiverMetricPrefixes: [],
1011
+ imageRepositories: [],
1012
+ kubernetesChartNames: [],
1013
+ hasCollectorReceiver: false,
1014
+ // bigtable.googleapis.com serves every instance.
1015
+ deployment: "cloud-api",
1016
+ engineMetrics: GOOGLE_CLOUD_MONITORING,
1017
+ },
1018
+ // ---- wide-column --------------------------------------------------------
1019
+ {
1020
+ system: "cassandra",
1021
+ displayName: "Cassandra",
1022
+ aliases: [],
1023
+ defaultPort: 9042,
1024
+ receiverTypes: [],
1025
+ receiverMetricPrefixes: [],
1026
+ imageRepositories: [
1027
+ "cassandra",
1028
+ "bitnami/cassandra",
1029
+ "k8ssandra/cass-management-api",
1030
+ "datastax/dse-server",
1031
+ ],
1032
+ kubernetesChartNames: ["cassandra"],
1033
+ hasCollectorReceiver: false,
1034
+ deployment: "server",
1035
+ engineMetrics: { kind: "none", reason: `Cassandra ${JMX_ONLY}.` },
1036
+ },
1037
+ {
1038
+ system: "scylladb",
1039
+ displayName: "ScyllaDB",
1040
+ aliases: ["scylla"],
1041
+ defaultPort: 9042,
1042
+ receiverTypes: [],
1043
+ receiverMetricPrefixes: [],
1044
+ imageRepositories: ["scylladb/scylla", "scylladb/scylla-enterprise"],
1045
+ kubernetesChartNames: ["scylla"],
1046
+ hasCollectorReceiver: false,
1047
+ // Applications reach it with a Cassandra (CQL) driver.
1048
+ family: "cassandra",
1049
+ deployment: "server",
1050
+ engineMetrics: { kind: "prometheus", port: 9180, path: "/metrics" },
1051
+ },
1052
+ {
1053
+ system: "hbase",
1054
+ displayName: "Apache HBase",
1055
+ aliases: [],
1056
+ // Clients find the cluster through ZooKeeper; there is no one server port.
1057
+ defaultPort: null,
1058
+ receiverTypes: [],
1059
+ receiverMetricPrefixes: [],
1060
+ imageRepositories: [],
1061
+ kubernetesChartNames: [],
1062
+ hasCollectorReceiver: false,
1063
+ deployment: "server",
1064
+ engineMetrics: {
1065
+ kind: "none",
1066
+ reason: "The collector has no HBase receiver; add `prometheus` to `hbase.http.metrics.servlets` and scrape each server's web UI port (/prometheus) with the `prometheus` receiver, stamped with this database's identity.",
1067
+ },
1068
+ },
1069
+ {
1070
+ system: "geode",
1071
+ displayName: "Apache Geode",
1072
+ aliases: [],
1073
+ // The locator clients connect to.
1074
+ defaultPort: 10334,
1075
+ receiverTypes: [],
1076
+ receiverMetricPrefixes: [],
1077
+ imageRepositories: ["apachegeode/geode"],
1078
+ kubernetesChartNames: [],
1079
+ hasCollectorReceiver: false,
1080
+ deployment: "server",
1081
+ engineMetrics: { kind: "none", reason: `Geode ${JMX_ONLY}.` },
1082
+ },
1083
+ // ---- document and multi-model -------------------------------------------
1084
+ {
1085
+ system: "mongodb",
1086
+ displayName: "MongoDB",
1087
+ aliases: ["mongo"],
1088
+ defaultPort: 27017,
1089
+ receiverTypes: ["mongodb", "mongodbatlas"],
1090
+ receiverMetricPrefixes: ["mongodb.", "mongodbatlas."],
1091
+ imageRepositories: [
1092
+ "mongo",
1093
+ // The bare basename covers Software Collections' centos/mongodb-36-centos7.
1094
+ "mongodb",
1095
+ "mongodb/mongodb-community-server",
1096
+ "mongodb/mongodb-enterprise-server",
1097
+ "mongodb/mongodb-enterprise-database",
1098
+ "mongodb/mongodb-enterprise-database-ubi",
1099
+ "bitnami/mongodb",
1100
+ "bitnami/mongodb-sharded",
1101
+ "percona/percona-server-mongodb",
1102
+ ],
1103
+ kubernetesChartNames: ["mongodb", "mongodb-sharded"],
1104
+ hasCollectorReceiver: true,
1105
+ deployment: "server",
1106
+ engineMetrics: RECEIVER,
1107
+ },
1108
+ {
1109
+ system: "ferretdb",
1110
+ displayName: "FerretDB",
1111
+ aliases: [],
1112
+ defaultPort: 27017,
1113
+ receiverTypes: [],
1114
+ receiverMetricPrefixes: [],
1115
+ imageRepositories: ["ferretdb/ferretdb"],
1116
+ kubernetesChartNames: [],
1117
+ hasCollectorReceiver: false,
1118
+ // Applications reach it with a MongoDB driver.
1119
+ family: "mongodb",
1120
+ deployment: "server",
1121
+ engineMetrics: {
1122
+ kind: "prometheus",
1123
+ port: 8088,
1124
+ path: "/debug/metrics",
1125
+ note: "FerretDB's debug handler; make it listen beyond localhost (`FERRETDB_DEBUG_ADDR=:8088`).",
1126
+ },
1127
+ },
1128
+ {
1129
+ system: "aws.documentdb",
1130
+ displayName: "Amazon DocumentDB",
1131
+ aliases: ["documentdb"],
1132
+ defaultPort: 27017,
1133
+ receiverTypes: [],
1134
+ receiverMetricPrefixes: [],
1135
+ imageRepositories: [],
1136
+ kubernetesChartNames: [],
1137
+ hasCollectorReceiver: false,
1138
+ family: "mongodb",
1139
+ // A cluster endpoint names one cluster.
1140
+ deployment: "server",
1141
+ engineMetrics: AWS_CLOUDWATCH_METRICS,
1142
+ },
1143
+ {
1144
+ system: "azure.cosmosdb",
1145
+ displayName: "Azure Cosmos DB",
1146
+ aliases: ["cosmosdb"],
1147
+ defaultPort: 443,
1148
+ receiverTypes: [],
1149
+ receiverMetricPrefixes: [],
1150
+ imageRepositories: [],
1151
+ kubernetesChartNames: [],
1152
+ hasCollectorReceiver: false,
1153
+ /*
1154
+ * An account answers on its global host AND on one regional host per
1155
+ * region, so a span's host does not name one account.
1156
+ */
1157
+ deployment: "cloud-api",
1158
+ engineMetrics: {
1159
+ kind: "cloud-monitoring",
1160
+ receiver: "azure_monitor",
1161
+ note: "Read the account's metrics from Azure Monitor with the `azure_monitor` receiver.",
1162
+ },
1163
+ },
1164
+ {
1165
+ system: "gcp.firestore",
1166
+ displayName: "Cloud Firestore",
1167
+ aliases: ["firestore"],
1168
+ defaultPort: 443,
1169
+ receiverTypes: [],
1170
+ receiverMetricPrefixes: [],
1171
+ imageRepositories: [],
1172
+ kubernetesChartNames: [],
1173
+ hasCollectorReceiver: false,
1174
+ // firestore.googleapis.com serves every database.
1175
+ deployment: "cloud-api",
1176
+ engineMetrics: GOOGLE_CLOUD_MONITORING,
1177
+ },
1178
+ {
1179
+ system: "couchdb",
1180
+ displayName: "CouchDB",
1181
+ aliases: [],
1182
+ defaultPort: 5984,
1183
+ receiverTypes: ["couchdb"],
1184
+ receiverMetricPrefixes: ["couchdb."],
1185
+ imageRepositories: ["couchdb", "apache/couchdb", "bitnami/couchdb"],
1186
+ kubernetesChartNames: ["couchdb"],
1187
+ hasCollectorReceiver: true,
1188
+ deployment: "server",
1189
+ engineMetrics: RECEIVER,
1190
+ },
1191
+ {
1192
+ system: "couchbase",
1193
+ displayName: "Couchbase",
1194
+ aliases: [],
1195
+ defaultPort: 11210,
1196
+ receiverTypes: [],
1197
+ receiverMetricPrefixes: [],
1198
+ imageRepositories: ["couchbase", "couchbase/server"],
1199
+ kubernetesChartNames: [],
1200
+ hasCollectorReceiver: false,
1201
+ deployment: "server",
1202
+ engineMetrics: {
1203
+ kind: "prometheus",
1204
+ port: 8091,
1205
+ path: "/metrics",
1206
+ note: "Couchbase Server 7.0 and later; the scrape needs a user with the External Stats Reader role (basic auth).",
1207
+ },
1208
+ },
1209
+ {
1210
+ system: "arangodb",
1211
+ displayName: "ArangoDB",
1212
+ aliases: [],
1213
+ defaultPort: 8529,
1214
+ receiverTypes: [],
1215
+ receiverMetricPrefixes: [],
1216
+ imageRepositories: ["arangodb", "arangodb/arangodb", "arangodb/enterprise"],
1217
+ kubernetesChartNames: [],
1218
+ hasCollectorReceiver: false,
1219
+ deployment: "server",
1220
+ engineMetrics: {
1221
+ kind: "prometheus",
1222
+ port: 8529,
1223
+ path: "/_admin/metrics/v2",
1224
+ },
1225
+ },
1226
+ {
1227
+ system: "ravendb",
1228
+ displayName: "RavenDB",
1229
+ aliases: [],
1230
+ defaultPort: 8080,
1231
+ receiverTypes: [],
1232
+ receiverMetricPrefixes: [],
1233
+ imageRepositories: ["ravendb/ravendb"],
1234
+ kubernetesChartNames: [],
1235
+ hasCollectorReceiver: false,
1236
+ deployment: "server",
1237
+ engineMetrics: {
1238
+ kind: "none",
1239
+ reason: "The collector has no RavenDB receiver; point RavenDB's own OpenTelemetry metrics export at a collector and stamp it with this database's identity.",
1240
+ },
1241
+ },
1242
+ {
1243
+ system: "surrealdb",
1244
+ displayName: "SurrealDB",
1245
+ aliases: [],
1246
+ defaultPort: 8000,
1247
+ receiverTypes: [],
1248
+ receiverMetricPrefixes: [],
1249
+ imageRepositories: ["surrealdb/surrealdb"],
1250
+ kubernetesChartNames: ["surrealdb"],
1251
+ hasCollectorReceiver: false,
1252
+ deployment: "server",
1253
+ engineMetrics: {
1254
+ kind: "none",
1255
+ reason: "The collector has no SurrealDB receiver; turn on SurrealDB's OpenTelemetry export (SURREAL_TELEMETRY_PROVIDER=otlp) towards a collector and stamp it with this database's identity.",
1256
+ },
1257
+ },
1258
+ // ---- search ---------------------------------------------------------------
1259
+ {
1260
+ system: "elasticsearch",
1261
+ displayName: "Elasticsearch",
1262
+ aliases: ["elastic"],
1263
+ defaultPort: 9200,
1264
+ receiverTypes: ["elasticsearch"],
1265
+ receiverMetricPrefixes: ["elasticsearch."],
1266
+ imageRepositories: [
1267
+ "elasticsearch",
1268
+ "elasticsearch/elasticsearch",
1269
+ "elasticsearch/elasticsearch-oss",
1270
+ "bitnami/elasticsearch",
1271
+ ],
1272
+ kubernetesChartNames: ["elasticsearch"],
1273
+ hasCollectorReceiver: true,
1274
+ deployment: "server",
1275
+ engineMetrics: RECEIVER,
1276
+ },
1277
+ {
1278
+ system: "opensearch",
1279
+ displayName: "OpenSearch",
1280
+ aliases: [],
1281
+ defaultPort: 9200,
1282
+ /*
1283
+ * OpenSearch keeps the node, cluster and index statistics APIs the
1284
+ * elasticsearch receiver reads.
1285
+ */
1286
+ receiverTypes: ["elasticsearch"],
1287
+ receiverMetricPrefixes: ["elasticsearch."],
1288
+ imageRepositories: ["opensearchproject/opensearch", "bitnami/opensearch"],
1289
+ kubernetesChartNames: ["opensearch"],
1290
+ hasCollectorReceiver: true,
1291
+ // Older clients reach it with an Elasticsearch client.
1292
+ family: "elasticsearch",
1293
+ deployment: "server",
1294
+ engineMetrics: RECEIVER,
1295
+ },
1296
+ {
1297
+ system: "solr",
1298
+ displayName: "Apache Solr",
1299
+ aliases: [],
1300
+ defaultPort: 8983,
1301
+ receiverTypes: [],
1302
+ receiverMetricPrefixes: [],
1303
+ imageRepositories: ["solr", "bitnami/solr"],
1304
+ kubernetesChartNames: ["solr"],
1305
+ hasCollectorReceiver: false,
1306
+ deployment: "server",
1307
+ engineMetrics: {
1308
+ kind: "none",
1309
+ reason: "The collector has no Solr receiver; run the Prometheus exporter that ships with Solr (`solr-exporter`), scrape it with the `prometheus` receiver and stamp it with this database's identity.",
1310
+ },
1311
+ },
1312
+ {
1313
+ system: "meilisearch",
1314
+ displayName: "Meilisearch",
1315
+ aliases: [],
1316
+ defaultPort: 7700,
1317
+ receiverTypes: [],
1318
+ receiverMetricPrefixes: [],
1319
+ imageRepositories: ["getmeili/meilisearch"],
1320
+ kubernetesChartNames: ["meilisearch"],
1321
+ hasCollectorReceiver: false,
1322
+ deployment: "server",
1323
+ engineMetrics: {
1324
+ kind: "prometheus",
1325
+ port: 7700,
1326
+ path: "/metrics",
1327
+ note: "Start Meilisearch with `--experimental-enable-metrics`; the scrape needs the master key as a bearer token.",
1328
+ },
1329
+ },
1330
+ {
1331
+ system: "typesense",
1332
+ displayName: "Typesense",
1333
+ aliases: [],
1334
+ defaultPort: 8108,
1335
+ receiverTypes: [],
1336
+ receiverMetricPrefixes: [],
1337
+ imageRepositories: ["typesense/typesense"],
1338
+ kubernetesChartNames: [],
1339
+ hasCollectorReceiver: false,
1340
+ deployment: "server",
1341
+ engineMetrics: {
1342
+ kind: "none",
1343
+ reason: "The collector has no Typesense receiver and Typesense serves its statistics as JSON (/metrics.json), not in the Prometheus format; convert them and stamp the result with this database's identity.",
1344
+ },
1345
+ },
1346
+ // ---- time series ------------------------------------------------------------
1347
+ {
1348
+ system: "influxdb",
1349
+ displayName: "InfluxDB",
1350
+ aliases: [],
1351
+ defaultPort: 8086,
1352
+ receiverTypes: [],
1353
+ receiverMetricPrefixes: [],
1354
+ imageRepositories: ["influxdb", "bitnami/influxdb"],
1355
+ kubernetesChartNames: ["influxdb", "influxdb2"],
1356
+ hasCollectorReceiver: false,
1357
+ deployment: "server",
1358
+ engineMetrics: { kind: "prometheus", port: 8086, path: "/metrics" },
1359
+ },
1360
+ // ---- graph --------------------------------------------------------------------
1361
+ {
1362
+ system: "neo4j",
1363
+ displayName: "Neo4j",
1364
+ aliases: [],
1365
+ defaultPort: 7687,
1366
+ receiverTypes: [],
1367
+ receiverMetricPrefixes: [],
1368
+ imageRepositories: ["neo4j", "bitnami/neo4j"],
1369
+ kubernetesChartNames: ["neo4j"],
1370
+ hasCollectorReceiver: false,
1371
+ deployment: "server",
1372
+ engineMetrics: {
1373
+ kind: "prometheus",
1374
+ port: 2004,
1375
+ path: "/metrics",
1376
+ note: "Neo4j Enterprise: set `server.metrics.prometheus.enabled=true` and `server.metrics.prometheus.endpoint=0.0.0.0:2004`.",
1377
+ },
1378
+ },
1379
+ {
1380
+ system: "aws.neptune",
1381
+ displayName: "Amazon Neptune",
1382
+ aliases: ["neptune"],
1383
+ defaultPort: 8182,
1384
+ receiverTypes: [],
1385
+ receiverMetricPrefixes: [],
1386
+ imageRepositories: [],
1387
+ kubernetesChartNames: [],
1388
+ hasCollectorReceiver: false,
1389
+ // A cluster endpoint names one cluster.
1390
+ deployment: "server",
1391
+ engineMetrics: AWS_CLOUDWATCH_METRICS,
1392
+ },
1393
+ // ---- vector -------------------------------------------------------------------
1394
+ {
1395
+ system: "milvus",
1396
+ displayName: "Milvus",
1397
+ aliases: [],
1398
+ defaultPort: 19530,
1399
+ receiverTypes: [],
1400
+ receiverMetricPrefixes: [],
1401
+ imageRepositories: ["milvusdb/milvus", "bitnami/milvus"],
1402
+ kubernetesChartNames: ["milvus"],
1403
+ hasCollectorReceiver: false,
1404
+ deployment: "server",
1405
+ engineMetrics: { kind: "prometheus", port: 9091, path: "/metrics" },
1406
+ },
1407
+ {
1408
+ system: "qdrant",
1409
+ displayName: "Qdrant",
1410
+ aliases: [],
1411
+ defaultPort: 6333,
1412
+ receiverTypes: [],
1413
+ receiverMetricPrefixes: [],
1414
+ imageRepositories: ["qdrant/qdrant"],
1415
+ kubernetesChartNames: ["qdrant"],
1416
+ hasCollectorReceiver: false,
1417
+ deployment: "server",
1418
+ engineMetrics: { kind: "prometheus", port: 6333, path: "/metrics" },
1419
+ },
1420
+ {
1421
+ system: "weaviate",
1422
+ displayName: "Weaviate",
1423
+ aliases: [],
1424
+ defaultPort: 8080,
1425
+ receiverTypes: [],
1426
+ receiverMetricPrefixes: [],
1427
+ imageRepositories: ["semitechnologies/weaviate"],
1428
+ kubernetesChartNames: ["weaviate"],
1429
+ hasCollectorReceiver: false,
1430
+ deployment: "server",
1431
+ engineMetrics: {
1432
+ kind: "prometheus",
1433
+ port: 2112,
1434
+ path: "/metrics",
1435
+ note: "Set PROMETHEUS_MONITORING_ENABLED=true.",
1436
+ },
1437
+ },
1438
+ {
1439
+ system: "chroma",
1440
+ displayName: "Chroma",
1441
+ aliases: ["chromadb"],
1442
+ defaultPort: 8000,
1443
+ receiverTypes: [],
1444
+ receiverMetricPrefixes: [],
1445
+ imageRepositories: ["chromadb/chroma", "chroma-core/chroma"],
1446
+ kubernetesChartNames: ["chromadb"],
1447
+ hasCollectorReceiver: false,
1448
+ deployment: "server",
1449
+ engineMetrics: {
1450
+ kind: "none",
1451
+ reason: "The collector has no Chroma receiver; Chroma exports OpenTelemetry traces (CHROMA_OTEL_COLLECTION_ENDPOINT) but no engine metrics endpoint.",
1452
+ },
1453
+ },
1454
+ {
1455
+ system: "pinecone",
1456
+ displayName: "Pinecone",
1457
+ aliases: [],
1458
+ defaultPort: 443,
1459
+ receiverTypes: [],
1460
+ receiverMetricPrefixes: [],
1461
+ imageRepositories: [],
1462
+ kubernetesChartNames: [],
1463
+ hasCollectorReceiver: false,
1464
+ // A managed service reached through Pinecone's shared API hosts.
1465
+ deployment: "cloud-api",
1466
+ engineMetrics: {
1467
+ kind: "none",
1468
+ reason: "Pinecone publishes index metrics for Prometheus on its own API (Standard and Enterprise plans); scrape them with the `prometheus` receiver and stamp them with this database's identity.",
1469
+ },
1470
+ },
1471
+ // ---- embedded (in-process) ------------------------------------------------------
1472
+ {
1473
+ system: "sqlite",
1474
+ displayName: "SQLite",
1475
+ aliases: ["sqlite3"],
1476
+ defaultPort: null,
1477
+ receiverTypes: [],
1478
+ receiverMetricPrefixes: [],
1479
+ imageRepositories: [],
1480
+ kubernetesChartNames: [],
1481
+ hasCollectorReceiver: false,
1482
+ deployment: "embedded",
1483
+ engineMetrics: EMBEDDED,
1484
+ },
1485
+ {
1486
+ system: "duckdb",
1487
+ displayName: "DuckDB",
1488
+ aliases: [],
1489
+ defaultPort: null,
1490
+ receiverTypes: [],
1491
+ receiverMetricPrefixes: [],
1492
+ imageRepositories: [],
1493
+ kubernetesChartNames: [],
1494
+ hasCollectorReceiver: false,
1495
+ deployment: "embedded",
1496
+ engineMetrics: EMBEDDED,
1497
+ },
1498
+ {
1499
+ system: "h2database",
1500
+ displayName: "H2",
1501
+ aliases: ["h2"],
1502
+ // Its TCP server mode; usually it runs in-process.
1503
+ defaultPort: 9092,
1504
+ receiverTypes: [],
1505
+ receiverMetricPrefixes: [],
1506
+ imageRepositories: [],
1507
+ kubernetesChartNames: [],
1508
+ hasCollectorReceiver: false,
1509
+ deployment: "embedded",
1510
+ engineMetrics: EMBEDDED,
1511
+ },
1512
+ {
1513
+ system: "hsqldb",
1514
+ displayName: "HyperSQL",
1515
+ aliases: [],
1516
+ // Its server mode; usually it runs in-process.
1517
+ defaultPort: 9001,
1518
+ receiverTypes: [],
1519
+ receiverMetricPrefixes: [],
1520
+ imageRepositories: [],
1521
+ kubernetesChartNames: [],
1522
+ hasCollectorReceiver: false,
1523
+ deployment: "embedded",
1524
+ engineMetrics: EMBEDDED,
1525
+ },
1526
+ {
1527
+ system: "derby",
1528
+ displayName: "Apache Derby",
1529
+ // IBM Cloudscape became Apache Derby.
1530
+ aliases: ["cloudscape"],
1531
+ // Its Network Server mode; usually it runs in-process.
1532
+ defaultPort: 1527,
1533
+ receiverTypes: [],
1534
+ receiverMetricPrefixes: [],
1535
+ imageRepositories: [],
1536
+ kubernetesChartNames: [],
1537
+ hasCollectorReceiver: false,
1538
+ deployment: "embedded",
1539
+ engineMetrics: EMBEDDED,
1540
+ },
1541
+ {
1542
+ system: "instantdb",
1543
+ displayName: "InstantDB",
1544
+ aliases: [],
1545
+ defaultPort: null,
1546
+ receiverTypes: [],
1547
+ receiverMetricPrefixes: [],
1548
+ imageRepositories: [],
1549
+ kubernetesChartNames: [],
1550
+ hasCollectorReceiver: false,
1551
+ deployment: "embedded",
1552
+ engineMetrics: EMBEDDED,
1553
+ },
1554
+ ];
1555
+ /*
1556
+ * Collector component names that differ from the receiver's Go module name
1557
+ * (receiverTypes): the name to write under `receivers:` in a config.
1558
+ */
1559
+ const RECEIVER_COMPONENT_NAMES = new Map([
1560
+ ["mongodbatlas", "mongodb_atlas"],
1561
+ ["googlecloudspanner", "google_cloud_spanner"],
1562
+ ]);
1563
+ // raw (system or alias) → descriptor. A Map, so "constructor" finds nothing.
1564
+ const DESCRIPTOR_BY_NAME = (() => {
1565
+ const map = new Map();
1566
+ for (const descriptor of DATABASE_SYSTEMS) {
1567
+ map.set(descriptor.system, descriptor);
1568
+ for (const alias of descriptor.aliases) {
1569
+ map.set(alias, descriptor);
1570
+ }
1571
+ }
1572
+ return map;
1573
+ })();
1574
+ /*
1575
+ * receiver type → the engine its data REPORTS. Only an engine that is its
1576
+ * own family owns a receiver: the mysql receiver pointed at MariaDB still
1577
+ * says "mysql" (refineDatabaseSystemFromVersion can tell them apart).
1578
+ */
1579
+ const DESCRIPTOR_BY_RECEIVER_TYPE = (() => {
1580
+ const map = new Map();
1581
+ for (const descriptor of DATABASE_SYSTEMS) {
1582
+ if (descriptor.family) {
1583
+ continue;
1584
+ }
1585
+ for (const receiverType of descriptor.receiverTypes) {
1586
+ map.set(receiverType, descriptor);
1587
+ }
1588
+ }
1589
+ return map;
1590
+ })();
1591
+ function canonicalRaw(raw) {
1592
+ if (typeof raw !== "string") {
1593
+ return "";
1594
+ }
1595
+ return raw.trim().toLowerCase();
1596
+ }
1597
+ /**
1598
+ * `value` without any run of `character` at its end. A plain loop rather than
1599
+ * `replace(/x+$/, "")`: that regex backtracks quadratically on telemetry-supplied
1600
+ * strings holding long runs of `character` that do not end the string.
1601
+ */
1602
+ export function trimTrailingCharacter(value, character) {
1603
+ let end = value.length;
1604
+ while (end > 0 && value.charAt(end - 1) === character) {
1605
+ end--;
1606
+ }
1607
+ return end === value.length ? value : value.substring(0, end);
1608
+ }
1609
+ /**
1610
+ * Normalize a raw `db.system.name` / `db.system` value. A known alias maps to
1611
+ * its engine ("postgres" → "postgresql", "mssql" → "microsoft.sql_server");
1612
+ * an unknown non-empty value is returned canonicalized (trimmed, lowercased)
1613
+ * so it still displays and groups; an empty or non-string value is null.
1614
+ */
1615
+ export function normalizeDatabaseSystem(raw) {
1616
+ const canonical = canonicalRaw(raw);
1617
+ if (!canonical) {
1618
+ return null;
1619
+ }
1620
+ const descriptor = DESCRIPTOR_BY_NAME.get(canonical);
1621
+ return descriptor ? descriptor.system : canonical;
1622
+ }
1623
+ /** The engine's descriptor (aliases accepted), or null for an unknown one. */
1624
+ export function getDatabaseSystemDescriptor(system) {
1625
+ return DESCRIPTOR_BY_NAME.get(canonicalRaw(system)) || null;
1626
+ }
1627
+ export function isKnownDatabaseSystem(system) {
1628
+ return getDatabaseSystemDescriptor(system) !== null;
1629
+ }
1630
+ /**
1631
+ * The engine family a system belongs to: the `family` of a fork or drop-in
1632
+ * ("valkey" → "redis", "mariadb" → "mysql"), the system itself for an engine
1633
+ * that is its own family, and the canonicalized raw value for an unknown one.
1634
+ * Aliases are accepted. Empty or non-string input is null.
1635
+ */
1636
+ export function getDatabaseSystemFamily(system) {
1637
+ const descriptor = getDatabaseSystemDescriptor(system);
1638
+ if (descriptor) {
1639
+ return descriptor.family || descriptor.system;
1640
+ }
1641
+ const canonical = canonicalRaw(system);
1642
+ return canonical || null;
1643
+ }
1644
+ /**
1645
+ * The engine whose collector receiver produces this engine's metrics — so
1646
+ * whose curated metric set applies: the family for a fork its family's
1647
+ * receiver monitors (MariaDB → "mysql", Valkey → "redis"), otherwise the
1648
+ * engine itself (TiDB stays "tidb": the mysql receiver does not work
1649
+ * against it). Aliases accepted; an unknown value is returned
1650
+ * canonicalized; empty or non-string input is null.
1651
+ */
1652
+ export function getDatabaseSystemMetricsEngine(system) {
1653
+ const descriptor = getDatabaseSystemDescriptor(system);
1654
+ if (descriptor && descriptor.family && descriptor.receiverTypes.length > 0) {
1655
+ return descriptor.family;
1656
+ }
1657
+ return normalizeDatabaseSystem(system);
1658
+ }
1659
+ /**
1660
+ * True when two engine values describe the same family — the same engine,
1661
+ * aliases of it, or a fork and the engine it forks. A span that says "redis"
1662
+ * and an image that says "valkey" are the same database seen twice.
1663
+ */
1664
+ export function isSameDatabaseFamily(a, b) {
1665
+ const familyA = getDatabaseSystemFamily(a);
1666
+ return familyA !== null && familyA === getDatabaseSystemFamily(b);
1667
+ }
1668
+ /**
1669
+ * The engine a database should show after a new sighting of it, given the
1670
+ * engine it shows now. A sighting that names a fork of the current engine
1671
+ * refines it ("mysql" seen by an image as "mariadb" becomes MariaDB); a
1672
+ * sighting that names only the family never undoes a fork ("mariadb" stays
1673
+ * MariaDB when a span says "mysql" — the client cannot tell). Anything else
1674
+ * — an unrelated engine, an unknown or empty value — keeps the current one,
1675
+ * except that an empty current engine takes the observed one. Both inputs
1676
+ * are normalized; the result is null only when both are empty.
1677
+ */
1678
+ export function getMoreSpecificDatabaseSystem(current, observed) {
1679
+ const currentSystem = normalizeDatabaseSystem(current);
1680
+ const observedSystem = normalizeDatabaseSystem(observed);
1681
+ if (!currentSystem) {
1682
+ return observedSystem;
1683
+ }
1684
+ if (!observedSystem || observedSystem === currentSystem) {
1685
+ return currentSystem;
1686
+ }
1687
+ const currentDescriptor = getDatabaseSystemDescriptor(currentSystem);
1688
+ const observedDescriptor = getDatabaseSystemDescriptor(observedSystem);
1689
+ // Only a known fork of the current (family) engine is more specific.
1690
+ if (observedDescriptor &&
1691
+ observedDescriptor.family &&
1692
+ observedDescriptor.family === currentSystem &&
1693
+ (!currentDescriptor || !currentDescriptor.family)) {
1694
+ return observedSystem;
1695
+ }
1696
+ return currentSystem;
1697
+ }
1698
+ // The leading number of a version string: "11.4.13" → 11. At most four digits.
1699
+ const VERSION_MAJOR_PATTERN = /^\s*v?(\d{1,4})(?!\d)/i;
1700
+ function readVersionMajor(version) {
1701
+ const match = VERSION_MAJOR_PATTERN.exec(version);
1702
+ return match ? Number(match[1]) : null;
1703
+ }
1704
+ /**
1705
+ * The engine a server's own version string names, given the engine the
1706
+ * data reports: "mysql" + "10.11.7-MariaDB-1:10.11.7+maria~ubu2204" →
1707
+ * "mariadb", "mysql" + "8.0.11-TiDB-v7.5.1" → "tidb". A fork's name in the
1708
+ * string wins (versionPattern); otherwise a major version the family never
1709
+ * released names the fork that did (versionMajorFrom): "mysql" + "11.4.13"
1710
+ * → "mariadb", since MySQL has no 10.x or 11.x — which is how a collector's
1711
+ * `mysql` receiver pointed at MariaDB is told apart, as it reports only
1712
+ * that bare number. A version that names no fork of the engine's family
1713
+ * (or no version at all) keeps the engine, normalized; so does a MariaDB
1714
+ * older than 10 whose version has lost its "-MariaDB" suffix ("5.5.68").
1715
+ * Null only for an empty engine.
1716
+ */
1717
+ export function refineDatabaseSystemFromVersion(system, version) {
1718
+ const normalized = normalizeDatabaseSystem(system);
1719
+ if (!normalized || typeof version !== "string" || !version.trim()) {
1720
+ return normalized;
1721
+ }
1722
+ const family = getDatabaseSystemFamily(normalized);
1723
+ const descriptor = getDatabaseSystemDescriptor(normalized);
1724
+ // A fork already names itself; only a family value is refined.
1725
+ if (descriptor && descriptor.family) {
1726
+ return normalized;
1727
+ }
1728
+ // Bounded: a version is a short string, never a document.
1729
+ const sample = version.substring(0, 256);
1730
+ for (const candidate of DATABASE_SYSTEMS) {
1731
+ if (candidate.family === family &&
1732
+ candidate.versionPattern &&
1733
+ candidate.versionPattern.test(sample)) {
1734
+ return candidate.system;
1735
+ }
1736
+ }
1737
+ const major = readVersionMajor(sample);
1738
+ if (major !== null) {
1739
+ for (const candidate of DATABASE_SYSTEMS) {
1740
+ if (candidate.family === family &&
1741
+ typeof candidate.versionMajorFrom === "number" &&
1742
+ major >= candidate.versionMajorFrom) {
1743
+ return candidate.system;
1744
+ }
1745
+ }
1746
+ }
1747
+ return normalized;
1748
+ }
1749
+ /**
1750
+ * Whether a resource attribute holding a version is NOT this engine's own
1751
+ * version but the one of the engine it stays compatible with (see
1752
+ * DatabaseSystemDescriptor.compatibilityVersionAttributes): true for
1753
+ * `redis.version` on Valkey, whose INFO keeps `redis_version` at 7.2.4.
1754
+ * Aliases accepted; `attributeKey` is the flat resource key, with or
1755
+ * without the stored `resource.` prefix.
1756
+ */
1757
+ export function isCompatibilityVersionAttribute(system, attributeKey) {
1758
+ const descriptor = getDatabaseSystemDescriptor(system);
1759
+ if (!descriptor || !descriptor.compatibilityVersionAttributes) {
1760
+ return false;
1761
+ }
1762
+ const key = typeof attributeKey === "string"
1763
+ ? attributeKey.trim().replace(/^resource\./, "")
1764
+ : "";
1765
+ return descriptor.compatibilityVersionAttributes.includes(key);
1766
+ }
1767
+ /**
1768
+ * True when a client-span-discovered endpoint of this engine may create a
1769
+ * DatabaseServer row on its own: the engine is known and is a server with
1770
+ * its own address (see DatabaseDeployment) — not a cloud API whose host
1771
+ * every customer shares, and not an in-process library.
1772
+ */
1773
+ export function isAutoCreatableDatabaseSystem(system) {
1774
+ const descriptor = getDatabaseSystemDescriptor(system);
1775
+ return descriptor !== null && descriptor.deployment === "server";
1776
+ }
1777
+ /**
1778
+ * "PostgreSQL" for a known engine (aliases accepted), the trimmed raw value
1779
+ * for an unknown one, and "Database" when there is nothing to show.
1780
+ */
1781
+ export function getDatabaseSystemDisplayName(system) {
1782
+ const descriptor = getDatabaseSystemDescriptor(system);
1783
+ if (descriptor) {
1784
+ return descriptor.displayName;
1785
+ }
1786
+ const raw = typeof system === "string" ? system.trim() : "";
1787
+ return raw || "Database";
1788
+ }
1789
+ export function getDefaultDatabasePort(system) {
1790
+ const descriptor = getDatabaseSystemDescriptor(system);
1791
+ return descriptor ? descriptor.defaultPort : null;
1792
+ }
1793
+ /**
1794
+ * Where an engine's own metrics come from (aliases accepted). An unknown
1795
+ * engine has no known path — `none` — which is not the same as `embedded`:
1796
+ * only an in-process engine truly has nothing to collect from, so only it
1797
+ * may be described as having no engine metrics.
1798
+ */
1799
+ export function getDatabaseEngineMetricsSource(system) {
1800
+ const descriptor = getDatabaseSystemDescriptor(system);
1801
+ if (descriptor) {
1802
+ return descriptor.engineMetrics;
1803
+ }
1804
+ return {
1805
+ kind: "none",
1806
+ reason: "OneUptime does not know this engine; stamp whatever exports its metrics with the database's identity.",
1807
+ };
1808
+ }
1809
+ /**
1810
+ * The name a receiver is configured under in a collector config
1811
+ * (`receivers:` key) for a receiver type from `receiverTypes`:
1812
+ * "googlecloudspanner" → "google_cloud_spanner". Most are the same.
1813
+ */
1814
+ export function getCollectorReceiverComponentName(receiverType) {
1815
+ return RECEIVER_COMPONENT_NAMES.get(receiverType) || receiverType;
1816
+ }
1817
+ const RECEIVER_SUFFIX = "receiver";
1818
+ /**
1819
+ * The engine a collector-contrib DB receiver reports, from its
1820
+ * instrumentation scope name. Matches the LAST path segment against
1821
+ * `<type>receiver`, so both the current Go-module form
1822
+ * (`github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver`)
1823
+ * and the legacy `otelcol/postgresqlreceiver` form are recognised. A
1824
+ * receiver that also monitors forks reports its family ("mysql" for the
1825
+ * mysql receiver, whether it scrapes MySQL or MariaDB). Anything else (an
1826
+ * SDK scope, a non-DB receiver) is null.
1827
+ */
1828
+ export function getDatabaseSystemFromReceiverScopeName(scopeName) {
1829
+ const canonical = trimTrailingCharacter(canonicalRaw(scopeName), "/");
1830
+ if (!canonical) {
1831
+ return null;
1832
+ }
1833
+ const lastSegment = canonical.substring(canonical.lastIndexOf("/") + 1) || "";
1834
+ if (lastSegment.length <= RECEIVER_SUFFIX.length ||
1835
+ !lastSegment.endsWith(RECEIVER_SUFFIX)) {
1836
+ return null;
1837
+ }
1838
+ const receiverType = lastSegment.substring(0, lastSegment.length - RECEIVER_SUFFIX.length);
1839
+ const descriptor = DESCRIPTOR_BY_RECEIVER_TYPE.get(receiverType);
1840
+ return descriptor ? descriptor.system : null;
1841
+ }
1842
+ /**
1843
+ * The engine of the first DB receiver among a batch's scope names (the
1844
+ * receiver system hint ingest passes to
1845
+ * `resolveDatabaseFromResourceAttributes`), or null when no scope is a DB
1846
+ * receiver.
1847
+ */
1848
+ export function getDatabaseReceiverSystemHint(scopeNames) {
1849
+ if (!Array.isArray(scopeNames)) {
1850
+ return null;
1851
+ }
1852
+ for (const scopeName of scopeNames) {
1853
+ const system = getDatabaseSystemFromReceiverScopeName(scopeName);
1854
+ if (system) {
1855
+ return system;
1856
+ }
1857
+ }
1858
+ return null;
1859
+ }
1860
+ //# sourceMappingURL=DatabaseSystem.js.map