@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,1650 @@
1
+ import DockerHost from "./DockerHost";
2
+ import KubernetesCluster from "./KubernetesCluster";
3
+ import Label from "./Label";
4
+ import PodmanHost from "./PodmanHost";
5
+ import Project from "./Project";
6
+ import User from "./User";
7
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
8
+ import Route from "../../Types/API/Route";
9
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
10
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
11
+ import AccessControlColumn from "../../Types/Database/AccessControlColumn";
12
+ import ColumnLength from "../../Types/Database/ColumnLength";
13
+ import ColumnType from "../../Types/Database/ColumnType";
14
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
15
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
16
+ import SlugifyColumn from "../../Types/Database/SlugifyColumn";
17
+ import TableColumn from "../../Types/Database/TableColumn";
18
+ import TableColumnType from "../../Types/Database/TableColumnType";
19
+ import TableMetadata from "../../Types/Database/TableMetadata";
20
+ import TenantColumn from "../../Types/Database/TenantColumn";
21
+ import IconProp from "../../Types/Icon/IconProp";
22
+ import { JSONObject } from "../../Types/JSON";
23
+ import ObjectID from "../../Types/ObjectID";
24
+ import Permission from "../../Types/Permission";
25
+ import TelemetryRetentionConfig from "../../Types/Telemetry/TelemetryRetentionConfig";
26
+ import {
27
+ Column,
28
+ Entity,
29
+ Index,
30
+ JoinColumn,
31
+ JoinTable,
32
+ ManyToMany,
33
+ ManyToOne,
34
+ } from "typeorm";
35
+
36
+ /*
37
+ * A database server a project runs or talks to - PostgreSQL, MySQL, Redis,
38
+ * MongoDB and the rest of the engines in Types/DatabaseServer/DatabaseSystem.
39
+ *
40
+ * Not called `Database`: DatabaseService is the base class of every service,
41
+ * and MonitorType.Database / EntityType.Database already exist. The display
42
+ * names are still "Database" / "Databases".
43
+ *
44
+ * Rows come from five discovery sources (discoverySource, first creator
45
+ * wins): OTel Collector database receivers at ingest, CLIENT spans of
46
+ * instrumented applications, database workloads on a monitored Kubernetes
47
+ * cluster, database containers on a monitored Docker / Podman host, and
48
+ * manual creation in the dashboard. Every non-manual path writes as root.
49
+ *
50
+ * Telemetry is selected by entity keys, never by a column here: the keys of
51
+ * the row's endpoints (DatabaseServerEndpoint, one owner per endpoint per
52
+ * project) plus the workload member keys in memberEntityKeys.
53
+ *
54
+ * COLUMN ACCESS: DatabaseService.create runs onBeforeCreate BEFORE the column
55
+ * permission check, so every column DatabaseServerService.onBeforeCreate sets
56
+ * during a manual (non-root) create - name, description, dbSystem,
57
+ * serverAddress, serverPort, databaseIdentifier, discoverySource, labels -
58
+ * carries create permission for the table's create roles, or a manual create
59
+ * is refused with "User is not allowed to Create on <column>". Columns only
60
+ * the discovery paths write are create: [] and update: [].
61
+ */
62
+ @AccessControlColumn("labels")
63
+ @EnableDocumentation()
64
+ @TenantColumn("projectId")
65
+ @TableAccessControl({
66
+ create: [
67
+ Permission.ProjectOwner,
68
+ Permission.ProjectAdmin,
69
+ Permission.ProjectMember,
70
+ Permission.SettingsAdmin,
71
+ Permission.SettingsMember,
72
+ Permission.CreateDatabaseServer,
73
+ ],
74
+ read: [
75
+ Permission.ProjectOwner,
76
+ Permission.ProjectAdmin,
77
+ Permission.ProjectMember,
78
+ Permission.Viewer,
79
+ Permission.SettingsAdmin,
80
+ Permission.SettingsMember,
81
+ Permission.SettingsViewer,
82
+ Permission.ReadDatabaseServer,
83
+ ],
84
+ delete: [
85
+ Permission.ProjectOwner,
86
+ Permission.ProjectAdmin,
87
+ Permission.ProjectMember,
88
+ Permission.SettingsAdmin,
89
+ Permission.SettingsMember,
90
+ Permission.DeleteDatabaseServer,
91
+ ],
92
+ update: [
93
+ Permission.ProjectOwner,
94
+ Permission.ProjectAdmin,
95
+ Permission.ProjectMember,
96
+ Permission.SettingsAdmin,
97
+ Permission.SettingsMember,
98
+ Permission.EditDatabaseServer,
99
+ ],
100
+ })
101
+ @CrudApiEndpoint(new Route("/database-server"))
102
+ @SlugifyColumn("name", "slug")
103
+ /*
104
+ * DB-level identity guard. Every discovery path find-or-creates by
105
+ * databaseIdentifier ("<family>|<endpoint>" or the workload form - the
106
+ * engine FAMILY, so a fork such as MariaDB keys as mysql), and several
107
+ * ingest pods / worker runs can race on the same database - only this index
108
+ * collapses them into one row. The display name is deliberately NOT unique:
109
+ * two engines can legitimately share a host name.
110
+ */
111
+ @Index(["projectId", "databaseIdentifier"], { unique: true })
112
+ @Index(["projectId", "isArchived"])
113
+ @Index(["projectId", "dbSystem"])
114
+ /*
115
+ * Named for the same reason as IDX_ceph_cluster_slug: TypeORM's schema
116
+ * builder matches database indexes to entity metadata by name and drops every
117
+ * one it cannot find, so a partial unique index must be declared here, by
118
+ * name, to survive the next generated migration.
119
+ */
120
+ @Index("IDX_database_server_slug", ["slug"], {
121
+ unique: true,
122
+ where: '"deletedAt" IS NULL',
123
+ })
124
+ /*
125
+ * One row per discovered workload (Kubernetes StatefulSet / Deployment /
126
+ * operator cluster, Docker / Podman container group). Partial so the many
127
+ * endpoint-only rows (NULL workloadIdentifier) never collide, and so an
128
+ * adopted row keeps being found by its workload after the discovery worker
129
+ * sets the column on it.
130
+ */
131
+ @Index("IDX_database_server_workload", ["projectId", "workloadIdentifier"], {
132
+ unique: true,
133
+ where: '"workloadIdentifier" IS NOT NULL AND "deletedAt" IS NULL',
134
+ })
135
+ @TableMetadata({
136
+ tableName: "DatabaseServer",
137
+ singularName: "Database",
138
+ pluralName: "Databases",
139
+ icon: IconProp.Database,
140
+ tableDescription:
141
+ "Database servers this project runs or talks to. Each database is discovered from OpenTelemetry Collector database receivers, from database calls in application traces, from database workloads on monitored Kubernetes clusters and Docker / Podman hosts, or added manually.",
142
+ })
143
+ @Entity({
144
+ name: "DatabaseServer",
145
+ })
146
+ export default class DatabaseServer extends BaseModel {
147
+ @ColumnAccessControl({
148
+ create: [
149
+ Permission.ProjectOwner,
150
+ Permission.ProjectAdmin,
151
+ Permission.ProjectMember,
152
+ Permission.SettingsAdmin,
153
+ Permission.SettingsMember,
154
+ Permission.CreateDatabaseServer,
155
+ ],
156
+ read: [
157
+ Permission.ProjectOwner,
158
+ Permission.ProjectAdmin,
159
+ Permission.ProjectMember,
160
+ Permission.Viewer,
161
+ Permission.SettingsAdmin,
162
+ Permission.SettingsMember,
163
+ Permission.SettingsViewer,
164
+ Permission.ReadDatabaseServer,
165
+ ],
166
+ update: [],
167
+ })
168
+ @TableColumn({
169
+ manyToOneRelationColumn: "projectId",
170
+ type: TableColumnType.Entity,
171
+ modelType: Project,
172
+ title: "Project",
173
+ description: "Relation to Project Resource in which this object belongs",
174
+ })
175
+ @ManyToOne(
176
+ () => {
177
+ return Project;
178
+ },
179
+ {
180
+ eager: false,
181
+ nullable: true,
182
+ onDelete: "CASCADE",
183
+ orphanedRowAction: "nullify",
184
+ },
185
+ )
186
+ @JoinColumn({ name: "projectId" })
187
+ public project?: Project = undefined;
188
+
189
+ @ColumnAccessControl({
190
+ create: [
191
+ Permission.ProjectOwner,
192
+ Permission.ProjectAdmin,
193
+ Permission.ProjectMember,
194
+ Permission.SettingsAdmin,
195
+ Permission.SettingsMember,
196
+ Permission.CreateDatabaseServer,
197
+ ],
198
+ read: [
199
+ Permission.ProjectOwner,
200
+ Permission.ProjectAdmin,
201
+ Permission.ProjectMember,
202
+ Permission.Viewer,
203
+ Permission.SettingsAdmin,
204
+ Permission.SettingsMember,
205
+ Permission.SettingsViewer,
206
+ Permission.ReadDatabaseServer,
207
+ ],
208
+ update: [],
209
+ })
210
+ @Index()
211
+ @TableColumn({
212
+ type: TableColumnType.ObjectID,
213
+ required: true,
214
+ canReadOnRelationQuery: true,
215
+ title: "Project ID",
216
+ description: "ID of your OneUptime Project in which this object belongs",
217
+ })
218
+ @Column({
219
+ type: ColumnType.ObjectID,
220
+ nullable: false,
221
+ transformer: ObjectID.getDatabaseTransformer(),
222
+ })
223
+ public projectId?: ObjectID = undefined;
224
+
225
+ /*
226
+ * Display name only - identity lives in databaseIdentifier. Discovered rows are
227
+ * named "<Engine> <host:port>" (buildDatabaseServerDisplayName), so a label or
228
+ * owner rule name pattern such as ^PostgreSQL expresses "every PostgreSQL
229
+ * database".
230
+ */
231
+ @ColumnAccessControl({
232
+ create: [
233
+ Permission.ProjectOwner,
234
+ Permission.ProjectAdmin,
235
+ Permission.ProjectMember,
236
+ Permission.SettingsAdmin,
237
+ Permission.SettingsMember,
238
+ Permission.CreateDatabaseServer,
239
+ ],
240
+ read: [
241
+ Permission.ProjectOwner,
242
+ Permission.ProjectAdmin,
243
+ Permission.ProjectMember,
244
+ Permission.Viewer,
245
+ Permission.SettingsAdmin,
246
+ Permission.SettingsMember,
247
+ Permission.SettingsViewer,
248
+ Permission.ReadDatabaseServer,
249
+ ],
250
+ update: [
251
+ Permission.ProjectOwner,
252
+ Permission.ProjectAdmin,
253
+ Permission.ProjectMember,
254
+ Permission.SettingsAdmin,
255
+ Permission.SettingsMember,
256
+ Permission.EditDatabaseServer,
257
+ ],
258
+ })
259
+ @Index()
260
+ @TableColumn({
261
+ required: true,
262
+ type: TableColumnType.ShortText,
263
+ canReadOnRelationQuery: true,
264
+ title: "Name",
265
+ description:
266
+ "Name of this database. Discovered databases are named after their engine and endpoint, e.g. PostgreSQL orders-db.internal:5432. Not unique - rename freely.",
267
+ example: "PostgreSQL orders-db.internal:5432",
268
+ })
269
+ @Column({
270
+ nullable: false,
271
+ type: ColumnType.ShortText,
272
+ length: ColumnLength.ShortText,
273
+ })
274
+ public name?: string = undefined;
275
+
276
+ @ColumnAccessControl({
277
+ create: [],
278
+ read: [
279
+ Permission.ProjectOwner,
280
+ Permission.ProjectAdmin,
281
+ Permission.ProjectMember,
282
+ Permission.Viewer,
283
+ Permission.SettingsAdmin,
284
+ Permission.SettingsMember,
285
+ Permission.SettingsViewer,
286
+ Permission.ReadDatabaseServer,
287
+ ],
288
+ update: [],
289
+ })
290
+ @TableColumn({
291
+ required: true,
292
+ unique: true,
293
+ type: TableColumnType.Slug,
294
+ computed: true,
295
+ title: "Slug",
296
+ description: "Friendly globally unique name for your object",
297
+ })
298
+ @Column({
299
+ nullable: false,
300
+ type: ColumnType.Slug,
301
+ length: ColumnLength.Slug,
302
+ })
303
+ public slug?: string = undefined;
304
+
305
+ @ColumnAccessControl({
306
+ create: [
307
+ Permission.ProjectOwner,
308
+ Permission.ProjectAdmin,
309
+ Permission.ProjectMember,
310
+ Permission.SettingsAdmin,
311
+ Permission.SettingsMember,
312
+ Permission.CreateDatabaseServer,
313
+ ],
314
+ read: [
315
+ Permission.ProjectOwner,
316
+ Permission.ProjectAdmin,
317
+ Permission.ProjectMember,
318
+ Permission.Viewer,
319
+ Permission.SettingsAdmin,
320
+ Permission.SettingsMember,
321
+ Permission.SettingsViewer,
322
+ Permission.ReadDatabaseServer,
323
+ ],
324
+ update: [
325
+ Permission.ProjectOwner,
326
+ Permission.ProjectAdmin,
327
+ Permission.ProjectMember,
328
+ Permission.SettingsAdmin,
329
+ Permission.SettingsMember,
330
+ Permission.EditDatabaseServer,
331
+ ],
332
+ })
333
+ @TableColumn({
334
+ required: false,
335
+ type: TableColumnType.LongText,
336
+ canReadOnRelationQuery: true,
337
+ title: "Description",
338
+ description: "Friendly description for this database",
339
+ example: "Primary PostgreSQL database for the orders service",
340
+ })
341
+ @Column({
342
+ nullable: true,
343
+ type: ColumnType.LongText,
344
+ length: ColumnLength.LongText,
345
+ })
346
+ public description?: string = undefined;
347
+
348
+ /*
349
+ * Creatable, never updatable - see the identical note on
350
+ * CloudResource.resourceIdentifier. For a manual create
351
+ * DatabaseServerService.onBeforeCreate computes it from dbSystem and the
352
+ * canonical endpoint, which is exactly why it must stay user-creatable: the
353
+ * column permission check runs after that hook.
354
+ */
355
+ @ColumnAccessControl({
356
+ create: [
357
+ Permission.ProjectOwner,
358
+ Permission.ProjectAdmin,
359
+ Permission.ProjectMember,
360
+ Permission.SettingsAdmin,
361
+ Permission.SettingsMember,
362
+ Permission.CreateDatabaseServer,
363
+ ],
364
+ read: [
365
+ Permission.ProjectOwner,
366
+ Permission.ProjectAdmin,
367
+ Permission.ProjectMember,
368
+ Permission.Viewer,
369
+ Permission.SettingsAdmin,
370
+ Permission.SettingsMember,
371
+ Permission.SettingsViewer,
372
+ Permission.ReadDatabaseServer,
373
+ ],
374
+ update: [],
375
+ })
376
+ @Index()
377
+ @TableColumn({
378
+ required: true,
379
+ type: TableColumnType.LongText,
380
+ canReadOnRelationQuery: true,
381
+ title: "Database Identifier",
382
+ description:
383
+ "Stable identity of this database within the project: the engine family and its canonical endpoint joined with '|' (e.g. postgresql|orders-db.internal:5432), or the workload form for databases discovered on Kubernetes / Docker / Podman (e.g. postgresql|kubernetes:prod-cluster/data/statefulset/orders-db). A fork keys like the engine it forks (a MariaDB database is mysql|..., a Valkey one redis|...), so learning which of the two a database is never changes its identity. Computed by the server for manually added databases.",
384
+ example: "postgresql|orders-db.internal:5432",
385
+ })
386
+ @Column({
387
+ nullable: false,
388
+ type: ColumnType.LongText,
389
+ length: ColumnLength.LongText,
390
+ })
391
+ public databaseIdentifier?: string = undefined;
392
+
393
+ /*
394
+ * Root-only. Set by the container discovery worker on rows it creates AND on
395
+ * endpoint rows it adopts, so the workload is found again by this column on
396
+ * every run (IDX_database_server_workload) rather than by alias.
397
+ */
398
+ @ColumnAccessControl({
399
+ create: [],
400
+ read: [
401
+ Permission.ProjectOwner,
402
+ Permission.ProjectAdmin,
403
+ Permission.ProjectMember,
404
+ Permission.Viewer,
405
+ Permission.SettingsAdmin,
406
+ Permission.SettingsMember,
407
+ Permission.SettingsViewer,
408
+ Permission.ReadDatabaseServer,
409
+ ],
410
+ update: [],
411
+ })
412
+ @TableColumn({
413
+ required: false,
414
+ type: TableColumnType.LongText,
415
+ title: "Workload Identifier",
416
+ description:
417
+ "Identity of the Kubernetes / Docker / Podman workload this database runs as, e.g. postgresql|kubernetes:prod-cluster/data/statefulset/orders-db. The prefix is the engine family, not the engine (a MariaDB workload is mysql|..., a Valkey one redis|...). Empty for databases that are only known by their endpoint.",
418
+ example: "postgresql|kubernetes:prod-cluster/data/statefulset/orders-db",
419
+ })
420
+ @Column({
421
+ nullable: true,
422
+ type: ColumnType.LongText,
423
+ length: ColumnLength.LongText,
424
+ })
425
+ public workloadIdentifier?: string = undefined;
426
+
427
+ @ColumnAccessControl({
428
+ create: [
429
+ Permission.ProjectOwner,
430
+ Permission.ProjectAdmin,
431
+ Permission.ProjectMember,
432
+ Permission.SettingsAdmin,
433
+ Permission.SettingsMember,
434
+ Permission.CreateDatabaseServer,
435
+ ],
436
+ read: [
437
+ Permission.ProjectOwner,
438
+ Permission.ProjectAdmin,
439
+ Permission.ProjectMember,
440
+ Permission.Viewer,
441
+ Permission.SettingsAdmin,
442
+ Permission.SettingsMember,
443
+ Permission.SettingsViewer,
444
+ Permission.ReadDatabaseServer,
445
+ ],
446
+ update: [],
447
+ })
448
+ @TableColumn({
449
+ required: true,
450
+ type: TableColumnType.ShortText,
451
+ canReadOnRelationQuery: true,
452
+ title: "Database Engine",
453
+ description:
454
+ "Database engine family as an OpenTelemetry db.system.name value, e.g. postgresql, mysql, redis, mongodb, microsoft.sql_server.",
455
+ example: "postgresql",
456
+ })
457
+ @Column({
458
+ nullable: false,
459
+ type: ColumnType.ShortText,
460
+ length: ColumnLength.ShortText,
461
+ })
462
+ public dbSystem?: string = undefined;
463
+
464
+ @ColumnAccessControl({
465
+ create: [
466
+ Permission.ProjectOwner,
467
+ Permission.ProjectAdmin,
468
+ Permission.ProjectMember,
469
+ Permission.SettingsAdmin,
470
+ Permission.SettingsMember,
471
+ Permission.CreateDatabaseServer,
472
+ ],
473
+ read: [
474
+ Permission.ProjectOwner,
475
+ Permission.ProjectAdmin,
476
+ Permission.ProjectMember,
477
+ Permission.Viewer,
478
+ Permission.SettingsAdmin,
479
+ Permission.SettingsMember,
480
+ Permission.SettingsViewer,
481
+ Permission.ReadDatabaseServer,
482
+ ],
483
+ update: [],
484
+ })
485
+ @TableColumn({
486
+ required: false,
487
+ type: TableColumnType.LongText,
488
+ canReadOnRelationQuery: true,
489
+ title: "Server Address",
490
+ description:
491
+ "Host name or IP address of the primary endpoint of this database (the OpenTelemetry server.address attribute).",
492
+ example: "orders-db.internal",
493
+ })
494
+ @Column({
495
+ nullable: true,
496
+ type: ColumnType.LongText,
497
+ length: ColumnLength.LongText,
498
+ })
499
+ public serverAddress?: string = undefined;
500
+
501
+ @ColumnAccessControl({
502
+ create: [
503
+ Permission.ProjectOwner,
504
+ Permission.ProjectAdmin,
505
+ Permission.ProjectMember,
506
+ Permission.SettingsAdmin,
507
+ Permission.SettingsMember,
508
+ Permission.CreateDatabaseServer,
509
+ ],
510
+ read: [
511
+ Permission.ProjectOwner,
512
+ Permission.ProjectAdmin,
513
+ Permission.ProjectMember,
514
+ Permission.Viewer,
515
+ Permission.SettingsAdmin,
516
+ Permission.SettingsMember,
517
+ Permission.SettingsViewer,
518
+ Permission.ReadDatabaseServer,
519
+ ],
520
+ update: [],
521
+ })
522
+ @TableColumn({
523
+ required: false,
524
+ type: TableColumnType.Number,
525
+ canReadOnRelationQuery: true,
526
+ title: "Server Port",
527
+ description:
528
+ "Port of the primary endpoint of this database (the OpenTelemetry server.port attribute). Defaults to the engine's standard port when not given.",
529
+ example: "5432",
530
+ })
531
+ @Column({
532
+ nullable: true,
533
+ type: ColumnType.Number,
534
+ })
535
+ public serverPort?: number = undefined;
536
+
537
+ @ColumnAccessControl({
538
+ create: [],
539
+ read: [
540
+ Permission.ProjectOwner,
541
+ Permission.ProjectAdmin,
542
+ Permission.ProjectMember,
543
+ Permission.Viewer,
544
+ Permission.SettingsAdmin,
545
+ Permission.SettingsMember,
546
+ Permission.SettingsViewer,
547
+ Permission.ReadDatabaseServer,
548
+ ],
549
+ update: [],
550
+ })
551
+ @TableColumn({
552
+ required: false,
553
+ type: TableColumnType.ShortText,
554
+ title: "Database Version",
555
+ description:
556
+ "Engine version last reported for this database, from the collector receiver or the container image tag.",
557
+ example: "16.4",
558
+ })
559
+ @Column({
560
+ nullable: true,
561
+ type: ColumnType.ShortText,
562
+ length: ColumnLength.ShortText,
563
+ })
564
+ public dbVersion?: string = undefined;
565
+
566
+ /*
567
+ * Which path created the row: collector, client-spans, kubernetes, docker,
568
+ * podman or manual (DatabaseServerDiscoverySource). First creator wins; it is
569
+ * never overwritten. Creatable because onBeforeCreate stamps "manual".
570
+ */
571
+ @ColumnAccessControl({
572
+ create: [
573
+ Permission.ProjectOwner,
574
+ Permission.ProjectAdmin,
575
+ Permission.ProjectMember,
576
+ Permission.SettingsAdmin,
577
+ Permission.SettingsMember,
578
+ Permission.CreateDatabaseServer,
579
+ ],
580
+ read: [
581
+ Permission.ProjectOwner,
582
+ Permission.ProjectAdmin,
583
+ Permission.ProjectMember,
584
+ Permission.Viewer,
585
+ Permission.SettingsAdmin,
586
+ Permission.SettingsMember,
587
+ Permission.SettingsViewer,
588
+ Permission.ReadDatabaseServer,
589
+ ],
590
+ update: [],
591
+ })
592
+ @TableColumn({
593
+ required: false,
594
+ type: TableColumnType.ShortText,
595
+ canReadOnRelationQuery: true,
596
+ title: "Discovery Source",
597
+ description:
598
+ "How this database was first discovered: collector, client-spans, kubernetes, docker, podman or manual.",
599
+ example: "collector",
600
+ })
601
+ @Column({
602
+ nullable: true,
603
+ type: ColumnType.ShortText,
604
+ length: ColumnLength.ShortText,
605
+ })
606
+ public discoverySource?: string = undefined;
607
+
608
+ @ColumnAccessControl({
609
+ create: [],
610
+ read: [
611
+ Permission.ProjectOwner,
612
+ Permission.ProjectAdmin,
613
+ Permission.ProjectMember,
614
+ Permission.Viewer,
615
+ Permission.SettingsAdmin,
616
+ Permission.SettingsMember,
617
+ Permission.SettingsViewer,
618
+ Permission.ReadDatabaseServer,
619
+ ],
620
+ update: [],
621
+ })
622
+ @TableColumn({
623
+ manyToOneRelationColumn: "kubernetesClusterId",
624
+ type: TableColumnType.Entity,
625
+ modelType: KubernetesCluster,
626
+ title: "Kubernetes Cluster",
627
+ description:
628
+ "Kubernetes cluster this database runs on, when it was discovered as a workload on a monitored cluster.",
629
+ })
630
+ @ManyToOne(
631
+ () => {
632
+ return KubernetesCluster;
633
+ },
634
+ {
635
+ eager: false,
636
+ nullable: true,
637
+ onDelete: "SET NULL",
638
+ orphanedRowAction: "nullify",
639
+ },
640
+ )
641
+ @JoinColumn({ name: "kubernetesClusterId" })
642
+ public kubernetesCluster?: KubernetesCluster = undefined;
643
+
644
+ @ColumnAccessControl({
645
+ create: [],
646
+ read: [
647
+ Permission.ProjectOwner,
648
+ Permission.ProjectAdmin,
649
+ Permission.ProjectMember,
650
+ Permission.Viewer,
651
+ Permission.SettingsAdmin,
652
+ Permission.SettingsMember,
653
+ Permission.SettingsViewer,
654
+ Permission.ReadDatabaseServer,
655
+ ],
656
+ update: [],
657
+ })
658
+ @Index()
659
+ @TableColumn({
660
+ type: TableColumnType.ObjectID,
661
+ title: "Kubernetes Cluster ID",
662
+ description:
663
+ "ID of the Kubernetes cluster this database runs on, when it was discovered as a workload on a monitored cluster.",
664
+ })
665
+ @Column({
666
+ type: ColumnType.ObjectID,
667
+ nullable: true,
668
+ transformer: ObjectID.getDatabaseTransformer(),
669
+ })
670
+ public kubernetesClusterId?: ObjectID = undefined;
671
+
672
+ @ColumnAccessControl({
673
+ create: [],
674
+ read: [
675
+ Permission.ProjectOwner,
676
+ Permission.ProjectAdmin,
677
+ Permission.ProjectMember,
678
+ Permission.Viewer,
679
+ Permission.SettingsAdmin,
680
+ Permission.SettingsMember,
681
+ Permission.SettingsViewer,
682
+ Permission.ReadDatabaseServer,
683
+ ],
684
+ update: [],
685
+ })
686
+ @TableColumn({
687
+ required: false,
688
+ type: TableColumnType.ShortText,
689
+ title: "Kubernetes Namespace",
690
+ description: "Kubernetes namespace of the workload this database runs as.",
691
+ example: "data",
692
+ })
693
+ @Column({
694
+ nullable: true,
695
+ type: ColumnType.ShortText,
696
+ length: ColumnLength.ShortText,
697
+ })
698
+ public kubernetesNamespace?: string = undefined;
699
+
700
+ @ColumnAccessControl({
701
+ create: [],
702
+ read: [
703
+ Permission.ProjectOwner,
704
+ Permission.ProjectAdmin,
705
+ Permission.ProjectMember,
706
+ Permission.Viewer,
707
+ Permission.SettingsAdmin,
708
+ Permission.SettingsMember,
709
+ Permission.SettingsViewer,
710
+ Permission.ReadDatabaseServer,
711
+ ],
712
+ update: [],
713
+ })
714
+ @TableColumn({
715
+ required: false,
716
+ type: TableColumnType.ShortText,
717
+ title: "Workload Kind",
718
+ description:
719
+ "Kind of workload this database runs as, e.g. StatefulSet, Deployment, Cluster (an operator-managed cluster) or Container.",
720
+ example: "StatefulSet",
721
+ })
722
+ @Column({
723
+ nullable: true,
724
+ type: ColumnType.ShortText,
725
+ length: ColumnLength.ShortText,
726
+ })
727
+ public workloadKind?: string = undefined;
728
+
729
+ @ColumnAccessControl({
730
+ create: [],
731
+ read: [
732
+ Permission.ProjectOwner,
733
+ Permission.ProjectAdmin,
734
+ Permission.ProjectMember,
735
+ Permission.Viewer,
736
+ Permission.SettingsAdmin,
737
+ Permission.SettingsMember,
738
+ Permission.SettingsViewer,
739
+ Permission.ReadDatabaseServer,
740
+ ],
741
+ update: [],
742
+ })
743
+ @TableColumn({
744
+ required: false,
745
+ type: TableColumnType.LongText,
746
+ title: "Workload Name",
747
+ description:
748
+ "Name of the workload (StatefulSet, Deployment, operator cluster or container group) this database runs as.",
749
+ example: "orders-db",
750
+ })
751
+ @Column({
752
+ nullable: true,
753
+ type: ColumnType.LongText,
754
+ length: ColumnLength.LongText,
755
+ })
756
+ public workloadName?: string = undefined;
757
+
758
+ @ColumnAccessControl({
759
+ create: [],
760
+ read: [
761
+ Permission.ProjectOwner,
762
+ Permission.ProjectAdmin,
763
+ Permission.ProjectMember,
764
+ Permission.Viewer,
765
+ Permission.SettingsAdmin,
766
+ Permission.SettingsMember,
767
+ Permission.SettingsViewer,
768
+ Permission.ReadDatabaseServer,
769
+ ],
770
+ update: [],
771
+ })
772
+ @TableColumn({
773
+ manyToOneRelationColumn: "dockerHostId",
774
+ type: TableColumnType.Entity,
775
+ modelType: DockerHost,
776
+ title: "Docker Host",
777
+ description:
778
+ "Docker host this database runs on, when it was discovered as a container on a monitored host.",
779
+ })
780
+ @ManyToOne(
781
+ () => {
782
+ return DockerHost;
783
+ },
784
+ {
785
+ eager: false,
786
+ nullable: true,
787
+ onDelete: "SET NULL",
788
+ orphanedRowAction: "nullify",
789
+ },
790
+ )
791
+ @JoinColumn({ name: "dockerHostId" })
792
+ public dockerHost?: DockerHost = undefined;
793
+
794
+ @ColumnAccessControl({
795
+ create: [],
796
+ read: [
797
+ Permission.ProjectOwner,
798
+ Permission.ProjectAdmin,
799
+ Permission.ProjectMember,
800
+ Permission.Viewer,
801
+ Permission.SettingsAdmin,
802
+ Permission.SettingsMember,
803
+ Permission.SettingsViewer,
804
+ Permission.ReadDatabaseServer,
805
+ ],
806
+ update: [],
807
+ })
808
+ @TableColumn({
809
+ type: TableColumnType.ObjectID,
810
+ title: "Docker Host ID",
811
+ description:
812
+ "ID of the Docker host this database runs on, when it was discovered as a container on a monitored host.",
813
+ })
814
+ @Column({
815
+ type: ColumnType.ObjectID,
816
+ nullable: true,
817
+ transformer: ObjectID.getDatabaseTransformer(),
818
+ })
819
+ public dockerHostId?: ObjectID = undefined;
820
+
821
+ @ColumnAccessControl({
822
+ create: [],
823
+ read: [
824
+ Permission.ProjectOwner,
825
+ Permission.ProjectAdmin,
826
+ Permission.ProjectMember,
827
+ Permission.Viewer,
828
+ Permission.SettingsAdmin,
829
+ Permission.SettingsMember,
830
+ Permission.SettingsViewer,
831
+ Permission.ReadDatabaseServer,
832
+ ],
833
+ update: [],
834
+ })
835
+ @TableColumn({
836
+ manyToOneRelationColumn: "podmanHostId",
837
+ type: TableColumnType.Entity,
838
+ modelType: PodmanHost,
839
+ title: "Podman Host",
840
+ description:
841
+ "Podman host this database runs on, when it was discovered as a container on a monitored host.",
842
+ })
843
+ @ManyToOne(
844
+ () => {
845
+ return PodmanHost;
846
+ },
847
+ {
848
+ eager: false,
849
+ nullable: true,
850
+ onDelete: "SET NULL",
851
+ orphanedRowAction: "nullify",
852
+ },
853
+ )
854
+ @JoinColumn({ name: "podmanHostId" })
855
+ public podmanHost?: PodmanHost = undefined;
856
+
857
+ @ColumnAccessControl({
858
+ create: [],
859
+ read: [
860
+ Permission.ProjectOwner,
861
+ Permission.ProjectAdmin,
862
+ Permission.ProjectMember,
863
+ Permission.Viewer,
864
+ Permission.SettingsAdmin,
865
+ Permission.SettingsMember,
866
+ Permission.SettingsViewer,
867
+ Permission.ReadDatabaseServer,
868
+ ],
869
+ update: [],
870
+ })
871
+ @TableColumn({
872
+ type: TableColumnType.ObjectID,
873
+ title: "Podman Host ID",
874
+ description:
875
+ "ID of the Podman host this database runs on, when it was discovered as a container on a monitored host.",
876
+ })
877
+ @Column({
878
+ type: ColumnType.ObjectID,
879
+ nullable: true,
880
+ transformer: ObjectID.getDatabaseTransformer(),
881
+ })
882
+ public podmanHostId?: ObjectID = undefined;
883
+
884
+ /*
885
+ * Telemetry entity keys of the workload's members (Kubernetes pod / deployment
886
+ * keys, container keys) mapped to the ISO time each was last seen
887
+ * (DatabaseServerMemberKeys). Merged - never replaced - on every discovery run
888
+ * and pruned by age, so logs of a pod that was replaced last week still show
889
+ * on the page.
890
+ */
891
+ @ColumnAccessControl({
892
+ create: [],
893
+ read: [
894
+ Permission.ProjectOwner,
895
+ Permission.ProjectAdmin,
896
+ Permission.ProjectMember,
897
+ Permission.Viewer,
898
+ Permission.SettingsAdmin,
899
+ Permission.SettingsMember,
900
+ Permission.SettingsViewer,
901
+ Permission.ReadDatabaseServer,
902
+ ],
903
+ update: [],
904
+ })
905
+ @TableColumn({
906
+ required: false,
907
+ type: TableColumnType.JSON,
908
+ title: "Member Entity Keys",
909
+ description:
910
+ "Telemetry entity keys of the pods / containers this database runs as, each with the time it was last seen. Maintained by discovery.",
911
+ })
912
+ @Column({
913
+ type: ColumnType.JSON,
914
+ nullable: true,
915
+ })
916
+ public memberEntityKeys?: JSONObject = undefined;
917
+
918
+ @ColumnAccessControl({
919
+ create: [],
920
+ read: [
921
+ Permission.ProjectOwner,
922
+ Permission.ProjectAdmin,
923
+ Permission.ProjectMember,
924
+ Permission.Viewer,
925
+ Permission.SettingsAdmin,
926
+ Permission.SettingsMember,
927
+ Permission.SettingsViewer,
928
+ Permission.ReadDatabaseServer,
929
+ ],
930
+ update: [],
931
+ })
932
+ @TableColumn({
933
+ type: TableColumnType.Number,
934
+ title: "Instance Count",
935
+ description:
936
+ "Number of running instances (pods / containers) last seen for this database's workload.",
937
+ })
938
+ @Column({
939
+ type: ColumnType.Number,
940
+ nullable: true,
941
+ default: 0,
942
+ })
943
+ public instanceCount?: number = undefined;
944
+
945
+ /*
946
+ * Collector liveness ONLY: "connected" while an OTel Collector database
947
+ * receiver (or the OneUptime Database Agent) keeps reporting engine metrics for
948
+ * this database, "disconnected" once it has stopped (the stale-collector
949
+ * sweep). Empty (NULL) while no collector ever reported - no DB default, so
950
+ * a database that is merely queried by applications, seen as a container or
951
+ * added by hand never claims a collector that "disconnected". lastSeenAt is
952
+ * the any-source signal.
953
+ */
954
+ @ColumnAccessControl({
955
+ create: [],
956
+ read: [
957
+ Permission.ProjectOwner,
958
+ Permission.ProjectAdmin,
959
+ Permission.ProjectMember,
960
+ Permission.Viewer,
961
+ Permission.SettingsAdmin,
962
+ Permission.SettingsMember,
963
+ Permission.SettingsViewer,
964
+ Permission.ReadDatabaseServer,
965
+ ],
966
+ update: [],
967
+ })
968
+ @TableColumn({
969
+ required: false,
970
+ type: TableColumnType.ShortText,
971
+ canReadOnRelationQuery: true,
972
+ title: "OTel Collector Status",
973
+ description:
974
+ "Whether engine metrics are currently being received from a collector / agent for this database (connected) or a collector reported and has stopped (disconnected). Empty when no collector has ever reported.",
975
+ example: "connected",
976
+ })
977
+ @Column({
978
+ nullable: true,
979
+ type: ColumnType.ShortText,
980
+ length: ColumnLength.ShortText,
981
+ })
982
+ public otelCollectorStatus?: string = undefined;
983
+
984
+ @ColumnAccessControl({
985
+ create: [],
986
+ read: [
987
+ Permission.ProjectOwner,
988
+ Permission.ProjectAdmin,
989
+ Permission.ProjectMember,
990
+ Permission.Viewer,
991
+ Permission.SettingsAdmin,
992
+ Permission.SettingsMember,
993
+ Permission.SettingsViewer,
994
+ Permission.ReadDatabaseServer,
995
+ ],
996
+ update: [],
997
+ })
998
+ @TableColumn({
999
+ required: false,
1000
+ type: TableColumnType.Date,
1001
+ title: "Collector Last Seen At",
1002
+ description:
1003
+ "When engine telemetry from a collector / agent was last received for this database.",
1004
+ })
1005
+ @Column({
1006
+ nullable: true,
1007
+ type: ColumnType.Date,
1008
+ })
1009
+ public collectorLastSeenAt?: Date = undefined;
1010
+
1011
+ @ColumnAccessControl({
1012
+ create: [],
1013
+ read: [
1014
+ Permission.ProjectOwner,
1015
+ Permission.ProjectAdmin,
1016
+ Permission.ProjectMember,
1017
+ Permission.Viewer,
1018
+ Permission.SettingsAdmin,
1019
+ Permission.SettingsMember,
1020
+ Permission.SettingsViewer,
1021
+ Permission.ReadDatabaseServer,
1022
+ ],
1023
+ update: [],
1024
+ })
1025
+ @TableColumn({
1026
+ required: false,
1027
+ type: TableColumnType.ShortText,
1028
+ title: "Agent Version",
1029
+ description:
1030
+ "Version of the OneUptime agent reporting this database, as self-reported via the oneuptime.agent.version resource attribute",
1031
+ example: "1.0.0",
1032
+ })
1033
+ @Column({
1034
+ nullable: true,
1035
+ type: ColumnType.ShortText,
1036
+ length: ColumnLength.ShortText,
1037
+ })
1038
+ public agentVersion?: string = undefined;
1039
+
1040
+ @ColumnAccessControl({
1041
+ create: [],
1042
+ read: [
1043
+ Permission.ProjectOwner,
1044
+ Permission.ProjectAdmin,
1045
+ Permission.ProjectMember,
1046
+ Permission.Viewer,
1047
+ Permission.SettingsAdmin,
1048
+ Permission.SettingsMember,
1049
+ Permission.SettingsViewer,
1050
+ Permission.ReadDatabaseServer,
1051
+ ],
1052
+ update: [],
1053
+ })
1054
+ @TableColumn({
1055
+ required: false,
1056
+ type: TableColumnType.Date,
1057
+ canReadOnRelationQuery: true,
1058
+ title: "Last Seen At",
1059
+ description:
1060
+ "When this database was last seen by any discovery source - engine telemetry, application database calls or the workload inventory.",
1061
+ })
1062
+ @Column({
1063
+ nullable: true,
1064
+ type: ColumnType.Date,
1065
+ })
1066
+ public lastSeenAt?: Date = undefined;
1067
+
1068
+ /*
1069
+ * Set only by the auto-archive sweep (DatabaseServer:CleanupStaleResources) and
1070
+ * cleared when the database is seen again. It is what lets discovery un-archive
1071
+ * a row it archived itself while never touching one a person archived.
1072
+ */
1073
+ @ColumnAccessControl({
1074
+ create: [],
1075
+ read: [
1076
+ Permission.ProjectOwner,
1077
+ Permission.ProjectAdmin,
1078
+ Permission.ProjectMember,
1079
+ Permission.Viewer,
1080
+ Permission.SettingsAdmin,
1081
+ Permission.SettingsMember,
1082
+ Permission.SettingsViewer,
1083
+ Permission.ReadDatabaseServer,
1084
+ ],
1085
+ update: [],
1086
+ })
1087
+ @TableColumn({
1088
+ required: false,
1089
+ type: TableColumnType.Date,
1090
+ title: "Auto Archived At",
1091
+ description:
1092
+ "When this database was archived automatically because no discovery source had seen it for a while. Empty when it was archived by a person or is not archived.",
1093
+ })
1094
+ @Column({
1095
+ nullable: true,
1096
+ type: ColumnType.Date,
1097
+ })
1098
+ public autoArchivedAt?: Date = undefined;
1099
+
1100
+ /*
1101
+ * Set when a PERSON restores the row from the archive (a hooked update to
1102
+ * isArchived=false), cleared when a person archives it. The auto-archive
1103
+ * sweep leaves such a row alone until discovery sees it again or a long
1104
+ * grace period passes - otherwise a Restore of a stale discovered database
1105
+ * would be undone by the next five-minute sweep.
1106
+ */
1107
+ @ColumnAccessControl({
1108
+ create: [],
1109
+ read: [
1110
+ Permission.ProjectOwner,
1111
+ Permission.ProjectAdmin,
1112
+ Permission.ProjectMember,
1113
+ Permission.Viewer,
1114
+ Permission.SettingsAdmin,
1115
+ Permission.SettingsMember,
1116
+ Permission.SettingsViewer,
1117
+ Permission.ReadDatabaseServer,
1118
+ ],
1119
+ update: [],
1120
+ })
1121
+ @TableColumn({
1122
+ required: false,
1123
+ type: TableColumnType.Date,
1124
+ title: "Manually Restored At",
1125
+ description:
1126
+ "When a person last restored this database from the archive. Automatic archiving leaves it alone until it is seen again or a grace period passes.",
1127
+ })
1128
+ @Column({
1129
+ nullable: true,
1130
+ type: ColumnType.Date,
1131
+ })
1132
+ public manuallyRestoredAt?: Date = undefined;
1133
+
1134
+ /*
1135
+ * Which evidence set dbSystem (DatabaseSystemEvidence in
1136
+ * DatabaseServerService): manual > collector > container > client-spans.
1137
+ * A stronger source may correct the engine a weaker one guessed (a pgx
1138
+ * client saying "postgresql" for CockroachDB), any source may refine an
1139
+ * engine to a fork of it (redis -> valkey), and nothing ever downgrades.
1140
+ * Empty on a row whose engine was set by the path that created it - its
1141
+ * discoverySource then says which evidence that was.
1142
+ */
1143
+ @ColumnAccessControl({
1144
+ create: [],
1145
+ read: [
1146
+ Permission.ProjectOwner,
1147
+ Permission.ProjectAdmin,
1148
+ Permission.ProjectMember,
1149
+ Permission.Viewer,
1150
+ Permission.SettingsAdmin,
1151
+ Permission.SettingsMember,
1152
+ Permission.SettingsViewer,
1153
+ Permission.ReadDatabaseServer,
1154
+ ],
1155
+ update: [],
1156
+ })
1157
+ @TableColumn({
1158
+ required: false,
1159
+ type: TableColumnType.ShortText,
1160
+ title: "Database Engine Source",
1161
+ description:
1162
+ "What the database engine was last determined from: manual, collector, container or client-spans. Stronger evidence may correct the engine; weaker evidence never changes it.",
1163
+ example: "container",
1164
+ })
1165
+ @Column({
1166
+ nullable: true,
1167
+ type: ColumnType.ShortText,
1168
+ length: ColumnLength.ShortText,
1169
+ })
1170
+ public dbSystemSource?: string = undefined;
1171
+
1172
+ /*
1173
+ * When Kubernetes / Docker / Podman discovery last saw this row's workload.
1174
+ * Unlike lastSeenAt, application traces and collector heartbeats never move
1175
+ * it, so it is what tells a workload that is gone (its endpoints may be
1176
+ * handed to the workload that replaced it) from one that is merely quiet.
1177
+ */
1178
+ @ColumnAccessControl({
1179
+ create: [],
1180
+ read: [
1181
+ Permission.ProjectOwner,
1182
+ Permission.ProjectAdmin,
1183
+ Permission.ProjectMember,
1184
+ Permission.Viewer,
1185
+ Permission.SettingsAdmin,
1186
+ Permission.SettingsMember,
1187
+ Permission.SettingsViewer,
1188
+ Permission.ReadDatabaseServer,
1189
+ ],
1190
+ update: [],
1191
+ })
1192
+ @TableColumn({
1193
+ required: false,
1194
+ type: TableColumnType.Date,
1195
+ title: "Workload Last Seen At",
1196
+ description:
1197
+ "When Kubernetes, Docker or Podman discovery last saw the workload this database runs as. Empty for a database that is not a discovered workload.",
1198
+ })
1199
+ @Column({
1200
+ nullable: true,
1201
+ type: ColumnType.Date,
1202
+ })
1203
+ public workloadLastSeenAt?: Date = undefined;
1204
+
1205
+ /*
1206
+ * The labels and owners that rules and ingest attached to this row on their
1207
+ * own ({ labelIds, ownerUserIds, ownerTeamIds }, ids as lowercase strings).
1208
+ * The auto-archive sweep counts only the OTHER labels and owners as a sign
1209
+ * that somebody cares about the row, so a catch-all label or owner rule
1210
+ * cannot keep every discovered database alive forever. A person adding
1211
+ * one of these labels or owners again takes it off the list.
1212
+ */
1213
+ @ColumnAccessControl({
1214
+ create: [],
1215
+ read: [
1216
+ Permission.ProjectOwner,
1217
+ Permission.ProjectAdmin,
1218
+ Permission.ProjectMember,
1219
+ Permission.Viewer,
1220
+ Permission.SettingsAdmin,
1221
+ Permission.SettingsMember,
1222
+ Permission.SettingsViewer,
1223
+ Permission.ReadDatabaseServer,
1224
+ ],
1225
+ update: [],
1226
+ })
1227
+ @TableColumn({
1228
+ required: false,
1229
+ type: TableColumnType.JSON,
1230
+ title: "Automatic Assignments",
1231
+ description:
1232
+ "Label and owner ids that label rules, owner rules or telemetry attached automatically. Maintained by OneUptime.",
1233
+ })
1234
+ @Column({
1235
+ type: ColumnType.JSON,
1236
+ nullable: true,
1237
+ })
1238
+ public automaticAssignments?: JSONObject = undefined;
1239
+
1240
+ @ColumnAccessControl({
1241
+ create: [
1242
+ Permission.ProjectOwner,
1243
+ Permission.ProjectAdmin,
1244
+ Permission.ProjectMember,
1245
+ Permission.SettingsAdmin,
1246
+ Permission.SettingsMember,
1247
+ Permission.CreateDatabaseServer,
1248
+ ],
1249
+ read: [
1250
+ Permission.ProjectOwner,
1251
+ Permission.ProjectAdmin,
1252
+ Permission.ProjectMember,
1253
+ Permission.Viewer,
1254
+ Permission.SettingsAdmin,
1255
+ Permission.SettingsMember,
1256
+ Permission.SettingsViewer,
1257
+ Permission.ReadDatabaseServer,
1258
+ ],
1259
+ update: [],
1260
+ })
1261
+ @TableColumn({
1262
+ manyToOneRelationColumn: "createdByUserId",
1263
+ type: TableColumnType.Entity,
1264
+ modelType: User,
1265
+ title: "Created by User",
1266
+ description:
1267
+ "Relation to User who created this object (if this object was created by a User)",
1268
+ })
1269
+ @ManyToOne(
1270
+ () => {
1271
+ return User;
1272
+ },
1273
+ {
1274
+ eager: false,
1275
+ nullable: true,
1276
+ onDelete: "SET NULL",
1277
+ orphanedRowAction: "nullify",
1278
+ },
1279
+ )
1280
+ @JoinColumn({ name: "createdByUserId" })
1281
+ public createdByUser?: User = undefined;
1282
+
1283
+ @ColumnAccessControl({
1284
+ create: [
1285
+ Permission.ProjectOwner,
1286
+ Permission.ProjectAdmin,
1287
+ Permission.ProjectMember,
1288
+ Permission.SettingsAdmin,
1289
+ Permission.SettingsMember,
1290
+ Permission.CreateDatabaseServer,
1291
+ ],
1292
+ read: [
1293
+ Permission.ProjectOwner,
1294
+ Permission.ProjectAdmin,
1295
+ Permission.ProjectMember,
1296
+ Permission.Viewer,
1297
+ Permission.SettingsAdmin,
1298
+ Permission.SettingsMember,
1299
+ Permission.SettingsViewer,
1300
+ Permission.ReadDatabaseServer,
1301
+ ],
1302
+ update: [],
1303
+ })
1304
+ @TableColumn({
1305
+ type: TableColumnType.ObjectID,
1306
+ title: "Created by User ID",
1307
+ description:
1308
+ "User ID who created this object (if this object was created by a User)",
1309
+ })
1310
+ @Column({
1311
+ type: ColumnType.ObjectID,
1312
+ nullable: true,
1313
+ transformer: ObjectID.getDatabaseTransformer(),
1314
+ })
1315
+ public createdByUserId?: ObjectID = undefined;
1316
+
1317
+ @ColumnAccessControl({
1318
+ create: [
1319
+ Permission.ProjectOwner,
1320
+ Permission.ProjectAdmin,
1321
+ Permission.ProjectMember,
1322
+ Permission.SettingsAdmin,
1323
+ Permission.SettingsMember,
1324
+ Permission.CreateDatabaseServer,
1325
+ ],
1326
+ read: [
1327
+ Permission.ProjectOwner,
1328
+ Permission.ProjectAdmin,
1329
+ Permission.ProjectMember,
1330
+ Permission.Viewer,
1331
+ Permission.SettingsAdmin,
1332
+ Permission.SettingsMember,
1333
+ Permission.SettingsViewer,
1334
+ Permission.ReadDatabaseServer,
1335
+ ],
1336
+ update: [
1337
+ Permission.ProjectOwner,
1338
+ Permission.ProjectAdmin,
1339
+ Permission.ProjectMember,
1340
+ Permission.SettingsAdmin,
1341
+ Permission.SettingsMember,
1342
+ Permission.EditDatabaseServer,
1343
+ ],
1344
+ })
1345
+ @TableColumn({
1346
+ isDefaultValueColumn: true,
1347
+ required: true,
1348
+ type: TableColumnType.Boolean,
1349
+ title: "Is Archived",
1350
+ description:
1351
+ "Is this database archived? Archived databases are hidden from lists but keep collecting telemetry.",
1352
+ defaultValue: false,
1353
+ })
1354
+ @Column({
1355
+ type: ColumnType.Boolean,
1356
+ nullable: false,
1357
+ default: false,
1358
+ })
1359
+ public isArchived?: boolean = undefined;
1360
+
1361
+ @ColumnAccessControl({
1362
+ create: [],
1363
+ read: [
1364
+ Permission.ProjectOwner,
1365
+ Permission.ProjectAdmin,
1366
+ Permission.ProjectMember,
1367
+ Permission.Viewer,
1368
+ Permission.SettingsAdmin,
1369
+ Permission.SettingsMember,
1370
+ Permission.SettingsViewer,
1371
+ Permission.ReadDatabaseServer,
1372
+ ],
1373
+ update: [],
1374
+ })
1375
+ @TableColumn({
1376
+ required: false,
1377
+ type: TableColumnType.Date,
1378
+ title: "Archived At",
1379
+ description: "When was this database archived?",
1380
+ })
1381
+ @Column({
1382
+ type: ColumnType.Date,
1383
+ nullable: true,
1384
+ })
1385
+ public archivedAt?: Date = undefined;
1386
+
1387
+ @ColumnAccessControl({
1388
+ create: [],
1389
+ read: [
1390
+ Permission.ProjectOwner,
1391
+ Permission.ProjectAdmin,
1392
+ Permission.ProjectMember,
1393
+ Permission.Viewer,
1394
+ Permission.SettingsAdmin,
1395
+ Permission.SettingsMember,
1396
+ Permission.SettingsViewer,
1397
+ Permission.ReadDatabaseServer,
1398
+ ],
1399
+ update: [],
1400
+ })
1401
+ @TableColumn({
1402
+ manyToOneRelationColumn: "archivedByUserId",
1403
+ type: TableColumnType.Entity,
1404
+ modelType: User,
1405
+ title: "Archived by User",
1406
+ description:
1407
+ "Relation to User who archived this object (if this object was archived by a User)",
1408
+ })
1409
+ @ManyToOne(
1410
+ () => {
1411
+ return User;
1412
+ },
1413
+ {
1414
+ eager: false,
1415
+ nullable: true,
1416
+ onDelete: "SET NULL",
1417
+ orphanedRowAction: "nullify",
1418
+ },
1419
+ )
1420
+ @JoinColumn({ name: "archivedByUserId" })
1421
+ public archivedByUser?: User = undefined;
1422
+
1423
+ @ColumnAccessControl({
1424
+ create: [],
1425
+ read: [
1426
+ Permission.ProjectOwner,
1427
+ Permission.ProjectAdmin,
1428
+ Permission.ProjectMember,
1429
+ Permission.Viewer,
1430
+ Permission.SettingsAdmin,
1431
+ Permission.SettingsMember,
1432
+ Permission.SettingsViewer,
1433
+ Permission.ReadDatabaseServer,
1434
+ ],
1435
+ update: [],
1436
+ })
1437
+ @TableColumn({
1438
+ type: TableColumnType.ObjectID,
1439
+ title: "Archived by User ID",
1440
+ description:
1441
+ "User ID who archived this object (if this object was archived by a User)",
1442
+ })
1443
+ @Column({
1444
+ type: ColumnType.ObjectID,
1445
+ nullable: true,
1446
+ transformer: ObjectID.getDatabaseTransformer(),
1447
+ })
1448
+ public archivedByUserId?: ObjectID = undefined;
1449
+
1450
+ @ColumnAccessControl({
1451
+ create: [],
1452
+ read: [
1453
+ Permission.ProjectOwner,
1454
+ Permission.ProjectAdmin,
1455
+ Permission.ProjectMember,
1456
+ Permission.Viewer,
1457
+ Permission.SettingsAdmin,
1458
+ Permission.SettingsMember,
1459
+ Permission.SettingsViewer,
1460
+ Permission.ReadDatabaseServer,
1461
+ ],
1462
+ update: [],
1463
+ })
1464
+ @TableColumn({
1465
+ manyToOneRelationColumn: "deletedByUserId",
1466
+ type: TableColumnType.Entity,
1467
+ title: "Deleted by User",
1468
+ modelType: User,
1469
+ description:
1470
+ "Relation to User who deleted this object (if this object was deleted by a User)",
1471
+ })
1472
+ @ManyToOne(
1473
+ () => {
1474
+ return User;
1475
+ },
1476
+ {
1477
+ cascade: false,
1478
+ eager: false,
1479
+ nullable: true,
1480
+ onDelete: "SET NULL",
1481
+ orphanedRowAction: "nullify",
1482
+ },
1483
+ )
1484
+ @JoinColumn({ name: "deletedByUserId" })
1485
+ public deletedByUser?: User = undefined;
1486
+
1487
+ @ColumnAccessControl({
1488
+ create: [],
1489
+ read: [
1490
+ Permission.ProjectOwner,
1491
+ Permission.ProjectAdmin,
1492
+ Permission.ProjectMember,
1493
+ Permission.Viewer,
1494
+ Permission.SettingsAdmin,
1495
+ Permission.SettingsMember,
1496
+ Permission.SettingsViewer,
1497
+ Permission.ReadDatabaseServer,
1498
+ ],
1499
+ update: [],
1500
+ })
1501
+ @TableColumn({
1502
+ type: TableColumnType.ObjectID,
1503
+ title: "Deleted by User ID",
1504
+ description:
1505
+ "User ID who deleted this object (if this object was deleted by a User)",
1506
+ })
1507
+ @Column({
1508
+ type: ColumnType.ObjectID,
1509
+ nullable: true,
1510
+ transformer: ObjectID.getDatabaseTransformer(),
1511
+ })
1512
+ public deletedByUserId?: ObjectID = undefined;
1513
+
1514
+ @ColumnAccessControl({
1515
+ create: [
1516
+ Permission.ProjectOwner,
1517
+ Permission.ProjectAdmin,
1518
+ Permission.ProjectMember,
1519
+ Permission.SettingsAdmin,
1520
+ Permission.SettingsMember,
1521
+ Permission.CreateDatabaseServer,
1522
+ ],
1523
+ read: [
1524
+ Permission.ProjectOwner,
1525
+ Permission.ProjectAdmin,
1526
+ Permission.ProjectMember,
1527
+ Permission.Viewer,
1528
+ Permission.SettingsAdmin,
1529
+ Permission.SettingsMember,
1530
+ Permission.SettingsViewer,
1531
+ Permission.ReadDatabaseServer,
1532
+ ],
1533
+ update: [
1534
+ Permission.ProjectOwner,
1535
+ Permission.ProjectAdmin,
1536
+ Permission.ProjectMember,
1537
+ Permission.SettingsAdmin,
1538
+ Permission.SettingsMember,
1539
+ Permission.EditDatabaseServer,
1540
+ ],
1541
+ })
1542
+ @TableColumn({
1543
+ required: false,
1544
+ type: TableColumnType.EntityArray,
1545
+ modelType: Label,
1546
+ title: "Labels",
1547
+ description:
1548
+ "Relation to Labels Array where this object is categorized in.",
1549
+ })
1550
+ @ManyToMany(
1551
+ () => {
1552
+ return Label;
1553
+ },
1554
+ { eager: false },
1555
+ )
1556
+ @JoinTable({
1557
+ name: "DatabaseServerLabel",
1558
+ inverseJoinColumn: {
1559
+ name: "labelId",
1560
+ referencedColumnName: "_id",
1561
+ },
1562
+ joinColumn: {
1563
+ name: "databaseServerId",
1564
+ referencedColumnName: "_id",
1565
+ },
1566
+ })
1567
+ public labels?: Array<Label> = undefined;
1568
+
1569
+ @ColumnAccessControl({
1570
+ create: [
1571
+ Permission.ProjectOwner,
1572
+ Permission.ProjectAdmin,
1573
+ Permission.ProjectMember,
1574
+ Permission.SettingsAdmin,
1575
+ Permission.SettingsMember,
1576
+ Permission.CreateDatabaseServer,
1577
+ ],
1578
+ read: [
1579
+ Permission.ProjectOwner,
1580
+ Permission.ProjectAdmin,
1581
+ Permission.ProjectMember,
1582
+ Permission.Viewer,
1583
+ Permission.SettingsAdmin,
1584
+ Permission.SettingsMember,
1585
+ Permission.SettingsViewer,
1586
+ Permission.ReadDatabaseServer,
1587
+ ],
1588
+ update: [
1589
+ Permission.ProjectOwner,
1590
+ Permission.ProjectAdmin,
1591
+ Permission.ProjectMember,
1592
+ Permission.SettingsAdmin,
1593
+ Permission.SettingsMember,
1594
+ Permission.EditDatabaseServer,
1595
+ ],
1596
+ })
1597
+ @TableColumn({
1598
+ type: TableColumnType.Number,
1599
+ title: "Retain Telemetry Data For Days",
1600
+ description:
1601
+ "Number of days to retain telemetry collected from this database by a collector / agent. Leave blank to use the project-wide default.",
1602
+ })
1603
+ @Column({
1604
+ type: ColumnType.Number,
1605
+ nullable: true,
1606
+ unique: false,
1607
+ })
1608
+ public retainTelemetryDataForDays?: number = undefined;
1609
+
1610
+ @ColumnAccessControl({
1611
+ create: [
1612
+ Permission.ProjectOwner,
1613
+ Permission.ProjectAdmin,
1614
+ Permission.ProjectMember,
1615
+ Permission.SettingsAdmin,
1616
+ Permission.SettingsMember,
1617
+ Permission.CreateDatabaseServer,
1618
+ ],
1619
+ read: [
1620
+ Permission.ProjectOwner,
1621
+ Permission.ProjectAdmin,
1622
+ Permission.ProjectMember,
1623
+ Permission.Viewer,
1624
+ Permission.SettingsAdmin,
1625
+ Permission.SettingsMember,
1626
+ Permission.SettingsViewer,
1627
+ Permission.ReadDatabaseServer,
1628
+ ],
1629
+ update: [
1630
+ Permission.ProjectOwner,
1631
+ Permission.ProjectAdmin,
1632
+ Permission.ProjectMember,
1633
+ Permission.SettingsAdmin,
1634
+ Permission.SettingsMember,
1635
+ Permission.EditDatabaseServer,
1636
+ ],
1637
+ })
1638
+ @TableColumn({
1639
+ type: TableColumnType.JSON,
1640
+ required: false,
1641
+ title: "Telemetry Data Retention Overrides",
1642
+ description:
1643
+ "Per-pillar retention overrides for telemetry collected from this database by a collector / agent (logs by severity, traces by status, metrics, profiles). Unset fields fall back to the database default, then the project's retention settings.",
1644
+ })
1645
+ @Column({
1646
+ type: ColumnType.JSON,
1647
+ nullable: true,
1648
+ })
1649
+ public telemetryRetentionConfig?: TelemetryRetentionConfig = undefined;
1650
+ }