@oneuptime/common 14.0.2 → 14.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (765) hide show
  1. package/Models/DatabaseModels/Alert.ts +55 -0
  2. package/Models/DatabaseModels/AlertFeed.ts +2 -0
  3. package/Models/DatabaseModels/DatabaseServer.ts +1650 -0
  4. package/Models/DatabaseModels/DatabaseServerEndpoint.ts +540 -0
  5. package/Models/DatabaseModels/DatabaseServerFeed.ts +625 -0
  6. package/Models/DatabaseModels/DatabaseServerLabelRule.ts +514 -0
  7. package/Models/DatabaseModels/DatabaseServerOwnerRule.ts +596 -0
  8. package/Models/DatabaseModels/DatabaseServerOwnerTeam.ts +491 -0
  9. package/Models/DatabaseModels/DatabaseServerOwnerUser.ts +490 -0
  10. package/Models/DatabaseModels/Incident.ts +55 -0
  11. package/Models/DatabaseModels/IncidentAlert.ts +540 -0
  12. package/Models/DatabaseModels/IncidentFeed.ts +2 -0
  13. package/Models/DatabaseModels/Index.ts +18 -0
  14. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +26 -0
  15. package/Models/DatabaseModels/Project.ts +60 -0
  16. package/Models/DatabaseModels/RumApplication.ts +52 -1
  17. package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
  18. package/Models/DatabaseModels/TelemetryException.ts +2 -0
  19. package/Models/DatabaseModels/UserProjectSsoConsent.ts +146 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.ts +28 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.ts +89 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.ts +673 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.ts +51 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  25. package/Server/Middleware/MultipartFormData.ts +1 -1
  26. package/Server/Middleware/TelemetryIngest.ts +15 -8
  27. package/Server/Services/AlertReminderRuleService.ts +100 -24
  28. package/Server/Services/DatabaseServerEndpointService.ts +895 -0
  29. package/Server/Services/DatabaseServerFeedService.ts +128 -0
  30. package/Server/Services/DatabaseServerLabelRuleEngineService.ts +340 -0
  31. package/Server/Services/DatabaseServerLabelRuleService.ts +14 -0
  32. package/Server/Services/DatabaseServerOwnerRuleEngineService.ts +425 -0
  33. package/Server/Services/DatabaseServerOwnerRuleService.ts +14 -0
  34. package/Server/Services/DatabaseServerOwnerTeamService.ts +180 -0
  35. package/Server/Services/DatabaseServerOwnerUserService.ts +173 -0
  36. package/Server/Services/DatabaseServerService.ts +4546 -0
  37. package/Server/Services/DatabaseService.ts +14 -8
  38. package/Server/Services/DockerResourceService.ts +43 -2
  39. package/Server/Services/IncidentAlertService.ts +1811 -0
  40. package/Server/Services/IncidentReminderRuleService.ts +103 -23
  41. package/Server/Services/IncidentService.ts +210 -10
  42. package/Server/Services/IncidentStateTimelineService.ts +24 -0
  43. package/Server/Services/Index.ts +18 -0
  44. package/Server/Services/InventoryItemService.ts +113 -5
  45. package/Server/Services/IoTDeviceService.ts +145 -37
  46. package/Server/Services/OpenTelemetryIngestService.ts +19 -0
  47. package/Server/Services/PodmanResourceService.ts +43 -2
  48. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +107 -23
  49. package/Server/Services/ServiceService.ts +1 -1
  50. package/Server/Services/TelemetryUsageBillingService.ts +29 -2
  51. package/Server/Services/UserProjectSsoConsentService.ts +74 -0
  52. package/Server/Services/UserService.ts +14 -1
  53. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +18 -0
  54. package/Server/Types/Database/QueryHelper.ts +30 -1
  55. package/Server/Utils/AI/Toolbox/ResourceTools.ts +69 -1
  56. package/Server/Utils/Database/AffectedResourceRelations.ts +6 -0
  57. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +188 -6
  58. package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
  59. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +2262 -755
  60. package/Server/Utils/Monitor/MonitorIncident.ts +28 -1
  61. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +268 -6
  62. package/Server/Utils/Monitor/MonitorResource.ts +47 -11
  63. package/Server/Utils/Monitor/MonitorResourceContext.ts +1 -0
  64. package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +239 -21
  65. package/Server/Utils/Monitor/PerSeriesResolutionRootCause.ts +43 -0
  66. package/Server/Utils/Monitor/SeriesResourceLabels.ts +291 -0
  67. package/Server/Utils/Monitor/SeriesResourceLinker.ts +111 -12
  68. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
  69. package/Server/Utils/SessionReplay/SessionReplayGateCache.ts +24 -2
  70. package/Server/Utils/StartServer.ts +26 -6
  71. package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
  72. package/Server/Utils/Telemetry/DatabaseEndpointDiscovery.ts +688 -0
  73. package/Server/Utils/Telemetry/EntityRegistry.ts +5 -1
  74. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +18 -1
  75. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +175 -12
  76. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +12 -0
  77. package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +606 -36
  78. package/Server/Utils/Telemetry/Telemetry.ts +16 -0
  79. package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -22
  80. package/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.ts +16 -10
  81. package/Tests/App/Accounts/SignedInRedirect.test.tsx +241 -0
  82. package/Tests/App/AdminDashboard/AdminHeaderSmallScreens.test.tsx +221 -4
  83. package/Tests/App/Dashboard/AIInsightsResourcePageContext.test.ts +42 -0
  84. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +100 -0
  85. package/Tests/App/Dashboard/AffectedResourcesPicker.test.tsx +86 -0
  86. package/Tests/App/Dashboard/AffectedResourcesPickerHiddenTypes.test.tsx +2 -0
  87. package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +19 -0
  88. package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +14 -0
  89. package/Tests/App/Dashboard/BulkIncidentLinkActions.test.tsx +869 -0
  90. package/Tests/App/Dashboard/CephMetricTooltips.test.tsx +1777 -0
  91. package/Tests/App/Dashboard/CloudFleetSummary.test.ts +8 -0
  92. package/Tests/App/Dashboard/CloudMetricTooltips.test.tsx +887 -0
  93. package/Tests/App/Dashboard/ContainerHostMetricTooltips.test.tsx +1309 -0
  94. package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +26 -1
  95. package/Tests/App/Dashboard/DashboardAppSsoError.test.tsx +501 -0
  96. package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +64 -1
  97. package/Tests/App/Dashboard/DashboardHeaderSmallScreens.test.tsx +178 -18
  98. package/Tests/App/Dashboard/DashboardMasterPageSsoRedirect.test.tsx +444 -0
  99. package/Tests/App/Dashboard/DashboardNavBarForeignHiddenRule.test.tsx +573 -0
  100. package/Tests/App/Dashboard/DatabaseChartAxes.test.tsx +431 -0
  101. package/Tests/App/Dashboard/DatabaseContainerDetailBadge.test.tsx +249 -0
  102. package/Tests/App/Dashboard/DatabaseDashboardE2EFixes.test.ts +681 -0
  103. package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +1801 -0
  104. package/Tests/App/Dashboard/DatabaseFleetSummaryRefresh.test.tsx +280 -0
  105. package/Tests/App/Dashboard/DatabaseFormHelpers.test.tsx +321 -0
  106. package/Tests/App/Dashboard/DatabaseMetricMonitorLink.test.tsx +795 -0
  107. package/Tests/App/Dashboard/DatabaseOverviewHeader.test.tsx +580 -0
  108. package/Tests/App/Dashboard/DatabaseRecommendationsEngineMetrics.test.ts +270 -0
  109. package/Tests/App/Dashboard/DatabaseServerComponents.test.tsx +1486 -0
  110. package/Tests/App/Dashboard/DatabaseServerEngineMetricsFilter.test.ts +223 -0
  111. package/Tests/App/Dashboard/DatabaseServerPresentation.test.ts +435 -0
  112. package/Tests/App/Dashboard/DatabaseServerSummary.test.ts +186 -0
  113. package/Tests/App/Dashboard/DatabaseServerTelemetryQueries.test.ts +1553 -0
  114. package/Tests/App/Dashboard/DatabaseTableTruncation.test.tsx +326 -0
  115. package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +512 -0
  116. package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +774 -0
  117. package/Tests/App/Dashboard/DatabaseViewLayout.test.tsx +233 -0
  118. package/Tests/App/Dashboard/DatabaseWorkloadBadge.test.tsx +972 -0
  119. package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +5 -0
  120. package/Tests/App/Dashboard/DiscoveryReviewUnnamedHostHint.test.tsx +1061 -0
  121. package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +39 -0
  122. package/Tests/App/Dashboard/DockerSwarmClustersListTooltips.test.tsx +414 -0
  123. package/Tests/App/Dashboard/DockerSwarmMetricTooltips.test.ts +796 -0
  124. package/Tests/App/Dashboard/DockerSwarmOverviewTooltips.test.tsx +747 -0
  125. package/Tests/App/Dashboard/EventOverlayScope.test.ts +147 -0
  126. package/Tests/App/Dashboard/EventOverlayScopeHook.test.tsx +1 -0
  127. package/Tests/App/Dashboard/ExceptionMonitorEnvironmentFilter.test.tsx +38 -18
  128. package/Tests/App/Dashboard/HostDetailViewTooltips.test.tsx +725 -0
  129. package/Tests/App/Dashboard/HostListColumnTooltips.test.tsx +472 -0
  130. package/Tests/App/Dashboard/HostMetricTooltips.test.ts +709 -0
  131. package/Tests/App/Dashboard/HostOverviewTooltips.test.tsx +698 -0
  132. package/Tests/App/Dashboard/HostTooltipHarness.ts +124 -0
  133. package/Tests/App/Dashboard/HostsListTooltips.test.tsx +395 -0
  134. package/Tests/App/Dashboard/IncidentAlertLinkDialog.test.tsx +691 -0
  135. package/Tests/App/Dashboard/IncidentAlertLinkHelpers.test.ts +458 -0
  136. package/Tests/App/Dashboard/IncidentAlertLinkPages.test.tsx +828 -0
  137. package/Tests/App/Dashboard/IncidentAlertLinkSideMenus.test.tsx +231 -0
  138. package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +689 -0
  139. package/Tests/App/Dashboard/IoTMetricTooltips.test.tsx +1123 -0
  140. package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +837 -0
  141. package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +699 -0
  142. package/Tests/App/Dashboard/KubernetesContainersTabTooltips.test.tsx +320 -0
  143. package/Tests/App/Dashboard/KubernetesCostTooltips.test.tsx +502 -0
  144. package/Tests/App/Dashboard/KubernetesInsightsTooltips.test.tsx +222 -0
  145. package/Tests/App/Dashboard/KubernetesResourceMetricTooltips.test.ts +561 -0
  146. package/Tests/App/Dashboard/KubernetesResourcePagesTooltips.test.tsx +1168 -0
  147. package/Tests/App/Dashboard/LinkIncidentAlertModal.test.tsx +154 -0
  148. package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +1 -0
  149. package/Tests/App/Dashboard/MetricDescriptionRules.ts +170 -0
  150. package/Tests/App/Dashboard/MetricDescriptionsCatalog.test.ts +206 -0
  151. package/Tests/App/Dashboard/MetricDescriptionsConsistency.test.ts +275 -0
  152. package/Tests/App/Dashboard/MetricsViewerDrillDown.test.tsx +310 -0
  153. package/Tests/App/Dashboard/MetricsViewerEntityScopedRows.test.tsx +495 -0
  154. package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +132 -1
  155. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +5 -0
  156. package/Tests/App/Dashboard/NetworkDeviceTooltips.test.tsx +852 -0
  157. package/Tests/App/Dashboard/NetworkDiagnosticsTooltips.test.tsx +556 -0
  158. package/Tests/App/Dashboard/NetworkMetricTooltips.test.ts +1348 -0
  159. package/Tests/App/Dashboard/NetworkSiteTooltips.test.tsx +679 -0
  160. package/Tests/App/Dashboard/ProductOrientation.test.tsx +4 -3
  161. package/Tests/App/Dashboard/ProxmoxMetricTooltips.test.ts +592 -0
  162. package/Tests/App/Dashboard/ProxmoxOverviewTooltips.test.tsx +1002 -0
  163. package/Tests/App/Dashboard/ProxmoxResourcePageTooltips.test.tsx +923 -0
  164. package/Tests/App/Dashboard/RecommendationsLoadedContext.test.tsx +349 -0
  165. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +62 -0
  166. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
  167. package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +14 -0
  168. package/Tests/App/Dashboard/ResourceOverviewTileTooltips.test.tsx +1066 -0
  169. package/Tests/App/Dashboard/RumOverviewPage.test.tsx +1195 -0
  170. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +2 -0
  171. package/Tests/App/Dashboard/ServerlessMetricTooltips.test.tsx +474 -0
  172. package/Tests/App/Dashboard/ServiceMapDatabaseLink.test.tsx +1085 -0
  173. package/Tests/App/Dashboard/ServiceMetricTooltips.test.tsx +772 -0
  174. package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +56 -1
  175. package/Tests/App/Dashboard/TelemetryMetricsSignals.test.ts +1207 -0
  176. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +10 -0
  177. package/Tests/App/Dashboard/TelemetryResourceTabTooltips.test.tsx +437 -0
  178. package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +2 -1
  179. package/Tests/App/Dashboard/VMwareMetricTooltips.test.ts +801 -0
  180. package/Tests/App/Dashboard/VMwareOverviewTooltips.test.tsx +601 -0
  181. package/Tests/App/Dashboard/VMwareResourcePagesTooltips.test.tsx +646 -0
  182. package/Tests/App/Dashboard/VMwareTooltipHarness.ts +145 -0
  183. package/Tests/App/StatusPage/StatusPageHeaderForeignHiddenRule.test.tsx +284 -0
  184. package/Tests/ClassStrings.ts +178 -0
  185. package/Tests/Fixtures/MobilePasskeyUser.json +1 -2
  186. package/Tests/ForeignHiddenRuleGuard.ts +2152 -0
  187. package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +2250 -0
  188. package/Tests/Models/DatabaseModels/IncidentAlertModel.test.ts +554 -0
  189. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +24 -5
  190. package/Tests/Models/DatabaseModels/SessionReplayModels.test.ts +117 -0
  191. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
  192. package/Tests/RenderedMarkup.ts +518 -0
  193. package/Tests/ResponsiveVisibility.test.ts +490 -4
  194. package/Tests/ResponsiveVisibility.ts +505 -52
  195. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
  196. package/Tests/Server/Infrastructure/Postgres/AddDatabaseServerTablesMigration.test.ts +541 -0
  197. package/Tests/Server/Infrastructure/Postgres/AddIncidentAlertMigration.test.ts +341 -0
  198. package/Tests/Server/Infrastructure/Postgres/AddSessionReplaySameOriginTracePropagationMigration.test.ts +247 -0
  199. package/Tests/Server/Infrastructure/Postgres/AddUserProjectSsoConsentMigration.test.ts +234 -0
  200. package/Tests/Server/Services/ContainerSnapshotUpsertPostgres.test.ts +319 -0
  201. package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +13 -0
  202. package/Tests/Server/Services/DatabaseServerEndpointService.test.ts +2033 -0
  203. package/Tests/Server/Services/DatabaseServerFeedAndOwnerServices.test.ts +529 -0
  204. package/Tests/Server/Services/DatabaseServerLifecycle.test.ts +3302 -0
  205. package/Tests/Server/Services/DatabaseServerRegistries.test.ts +603 -0
  206. package/Tests/Server/Services/DatabaseServerRuleEngines.test.ts +754 -0
  207. package/Tests/Server/Services/DatabaseServerService.test.ts +3558 -0
  208. package/Tests/Server/Services/DatabaseServerSqlPostgres.test.ts +2045 -0
  209. package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlockedPostgres.test.ts +362 -0
  210. package/Tests/Server/Services/DatabaseServiceUpdateColumnsIfUnlockedReply.test.ts +210 -0
  211. package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +18 -0
  212. package/Tests/Server/Services/IncidentAlertPostgres.test.ts +903 -0
  213. package/Tests/Server/Services/IncidentAlertRegistration.test.ts +96 -0
  214. package/Tests/Server/Services/IncidentAlertService.test.ts +2225 -0
  215. package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +2 -0
  216. package/Tests/Server/Services/IncidentAlertStateCascade.test.ts +970 -0
  217. package/Tests/Server/Services/IncidentCreateFromAlerts.test.ts +1284 -0
  218. package/Tests/Server/Services/IncomingCallPolicyEscalationRuleTarget.test.ts +225 -0
  219. package/Tests/Server/Services/InventoryItemDisplayName.test.ts +280 -2
  220. package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +8 -2
  221. package/Tests/Server/Services/IoTDeviceLatestMetricsPostgres.test.ts +689 -0
  222. package/Tests/Server/Services/IoTDeviceService.test.ts +379 -0
  223. package/Tests/Server/Services/LatestMetricsValuesShape.test.ts +360 -0
  224. package/Tests/Server/Services/LlmModelPriceService.test.ts +402 -0
  225. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
  226. package/Tests/Server/Services/OwnerRowUniqueness.test.ts +61 -9
  227. package/Tests/Server/Services/ReminderRuleLookupPostgres.test.ts +2250 -0
  228. package/Tests/Server/Services/ReminderRuleRefreshOpenSubjectsPaging.test.ts +653 -0
  229. package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +68 -20
  230. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
  231. package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +9 -0
  232. package/Tests/Server/Services/UserProjectSsoConsentPostgres.test.ts +153 -0
  233. package/Tests/Server/Services/UserProjectSsoConsentService.test.ts +192 -0
  234. package/Tests/Server/Services/UserServiceFirstMasterAdminElection.test.ts +71 -0
  235. package/Tests/Server/Services/UserSignupIdTakeoverPostgres.test.ts +238 -0
  236. package/Tests/Server/Services/WorkspaceNotificationSummaryHelpers.test.ts +592 -0
  237. package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +3 -0
  238. package/Tests/Server/Types/Database/EventOverlayScopePostgres.test.ts +1 -0
  239. package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +11 -0
  240. package/Tests/Server/Types/Database/Permissions/InfrastructureOwnershipScope.test.ts +8 -0
  241. package/Tests/Server/Types/Database/QueryHelperBooleanForCriteriaBackedRule.test.ts +1094 -0
  242. package/Tests/Server/Utils/AI/ResourceTools.test.ts +134 -0
  243. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.test.ts +41 -0
  244. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaAnomalyUnits.test.ts +279 -9
  245. package/Tests/Server/Utils/Monitor/Criteria/MetricMonitorCriteriaDisplayContext.test.ts +933 -0
  246. package/Tests/Server/Utils/Monitor/DatabaseMaintenanceSuppression.test.ts +582 -0
  247. package/Tests/Server/Utils/Monitor/DatabaseServerMonitorLinking.test.ts +753 -0
  248. package/Tests/Server/Utils/Monitor/MonitorActionTimestamps.test.ts +1 -0
  249. package/Tests/Server/Utils/Monitor/MonitorAlertCriteriaReferences.test.ts +1 -0
  250. package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +119 -0
  251. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +60 -25
  252. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorAffectedResourceEdgeCases.test.ts +1719 -0
  253. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorKubernetesAffectedResources.test.ts +1447 -0
  254. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorKubernetesRatioEmail.test.ts +352 -0
  255. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformMetricUnits.test.ts +717 -0
  256. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformRawScan.test.ts +2125 -0
  257. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPlatformSeriesAffectedResources.test.ts +1288 -0
  258. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
  259. package/Tests/Server/Utils/Monitor/MonitorIncidentCriteriaReferences.test.ts +1 -0
  260. package/Tests/Server/Utils/Monitor/MonitorIncidentMemberRoleMembership.test.ts +1 -0
  261. package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +88 -0
  262. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +205 -0
  263. package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +62 -0
  264. package/Tests/Server/Utils/Monitor/MonitorResourceDatabaseMaintenance.test.ts +803 -0
  265. package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +133 -3
  266. package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
  267. package/Tests/Server/Utils/Monitor/PerSeriesRecoveryResolution.test.ts +472 -1
  268. package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
  269. package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +236 -2
  270. package/Tests/Server/Utils/SeriesResourceLabels.test.ts +70 -0
  271. package/Tests/Server/Utils/SessionReplay/SessionReplayGateCachePolicy.test.ts +103 -0
  272. package/Tests/Server/Utils/StartServerProtobufContentType.test.ts +54 -0
  273. package/Tests/Server/Utils/Telemetry/DatabaseEndpointDiscovery.test.ts +1895 -0
  274. package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +7 -0
  275. package/Tests/Server/Utils/Telemetry/LogExceptionExtractorSeverityGate.test.ts +90 -0
  276. package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +570 -0
  277. package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +97 -2
  278. package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +1337 -0
  279. package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +295 -0
  280. package/Tests/Types/AI/AIResourceContext.test.ts +30 -0
  281. package/Tests/Types/DatabaseServer/DatabaseContainerClassifier.test.ts +3644 -0
  282. package/Tests/Types/DatabaseServer/DatabaseContainerCommand.test.ts +340 -0
  283. package/Tests/Types/DatabaseServer/DatabaseContainerCommandCorpus.ts +826 -0
  284. package/Tests/Types/DatabaseServer/DatabaseContainerCommandPostgres.test.ts +150 -0
  285. package/Tests/Types/DatabaseServer/DatabaseEndpoint.test.ts +2657 -0
  286. package/Tests/Types/DatabaseServer/DatabaseServerDiscoverySource.test.ts +64 -0
  287. package/Tests/Types/DatabaseServer/DatabaseServerEntityKeys.test.ts +952 -0
  288. package/Tests/Types/DatabaseServer/DatabaseServerMetricCatalog.test.ts +1161 -0
  289. package/Tests/Types/DatabaseServer/DatabaseSystem.test.ts +1514 -0
  290. package/Tests/Types/DatabaseServer/DatabaseTelemetryResolver.test.ts +1558 -0
  291. package/Tests/Types/Monitor/CephAlertTemplates.test.ts +255 -6
  292. package/Tests/Types/Monitor/DatabaseAlertTemplates.test.ts +2254 -0
  293. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +298 -0
  294. package/Tests/Types/Monitor/KubernetesMetricCatalog.test.ts +271 -0
  295. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +253 -9
  296. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +13 -5
  297. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +4 -2
  298. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +111 -2
  299. package/Tests/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.test.ts +61 -0
  300. package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +114 -0
  301. package/Tests/Types/Monitor/Utils/KubernetesAgentEmittedMetrics.ts +181 -0
  302. package/Tests/Types/NetworkDevice/DiscoveredHostNamingStatus.test.ts +401 -0
  303. package/Tests/Types/Rum/WebVitals.test.ts +173 -0
  304. package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +4 -1
  305. package/Tests/Types/Telemetry/ResourceFacetCatalog.test.ts +24 -2
  306. package/Tests/UI/Components/Card.test.tsx +93 -2
  307. package/Tests/UI/Components/FeedOptions.test.ts +6 -0
  308. package/Tests/UI/Components/FeedOptionsButton.test.tsx +8 -1
  309. package/Tests/UI/Components/FieldLabelInfoCardTooltip.test.tsx +413 -0
  310. package/Tests/UI/Components/ForeignHiddenRuleResilience.test.tsx +1147 -0
  311. package/Tests/UI/Components/HeaderRightRail.test.tsx +41 -1
  312. package/Tests/UI/Components/InfoTooltip.test.tsx +242 -0
  313. package/Tests/UI/Components/LogsEntityNames.test.ts +16 -1
  314. package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +7 -3
  315. package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +207 -3
  316. package/Tests/UI/Components/ModelTable/BaseModelTableBulkDeleteVerb.test.tsx +367 -0
  317. package/Tests/UI/Components/ModelTable/BaseModelTableCreateButtonTitle.test.tsx +275 -0
  318. package/Tests/UI/Components/ResourceFacetConfigs.test.ts +2 -1
  319. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  320. package/Tests/UI/Components/SrOnlyForeignRule.test.tsx +994 -0
  321. package/Tests/UI/Components/StatusPage/ResourceListSelection.test.tsx +34 -1
  322. package/Tests/UI/Components/TableHeaderTooltip.test.tsx +662 -0
  323. package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +4 -1
  324. package/Tests/UI/ForeignHiddenRuleGuard.test.ts +1951 -0
  325. package/Tests/UI/Rum/PrivacySummaryCard.test.tsx +166 -9
  326. package/Tests/UI/Rum/RecordingHealthTooltips.test.tsx +447 -0
  327. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +164 -0
  328. package/Tests/UI/Rum/ReplayFrameCapture.test.ts +6750 -0
  329. package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +19 -1
  330. package/Tests/UI/Rum/ReplayRail.test.tsx +723 -12
  331. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +86 -0
  332. package/Tests/UI/Rum/ReplayScreenshot.test.ts +2124 -0
  333. package/Tests/UI/Rum/ReplayScreenshotActions.test.tsx +3288 -0
  334. package/Tests/UI/Rum/ReplayStage.test.tsx +62 -0
  335. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +983 -2
  336. package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +19 -1
  337. package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +149 -0
  338. package/Tests/UI/Rum/SessionReplaySetupGuide.test.tsx +107 -6
  339. package/Tests/UI/Rum/SessionReplayUsersTableTooltips.test.tsx +330 -0
  340. package/Tests/UI/Rum/UserFlowTooltips.test.tsx +886 -0
  341. package/Tests/UI/TailwindPlayCdnForeignHiddenRule.test.ts +1005 -0
  342. package/Tests/UI/ThemeGroupHoverReveal.test.ts +847 -0
  343. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +80 -0
  344. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +23 -0
  345. package/Tests/UI/Utils/ModelAPISsoRedirect.test.ts +127 -0
  346. package/Tests/UI/Utils/Navigation.test.ts +102 -0
  347. package/Tests/UI/Utils/PermissionGate.test.ts +76 -0
  348. package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +23 -0
  349. package/Tests/Utils/Incident/IncidentFromAlerts.test.ts +696 -0
  350. package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
  351. package/Tests/Utils/MetricUnitUtil.test.ts +227 -2
  352. package/Tests/Utils/Monitor/MetricValueFormatter.test.ts +288 -2
  353. package/Tests/Utils/Monitor/PlatformResourceIdentityAndUnits.test.ts +1559 -0
  354. package/Tests/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.test.ts +2546 -0
  355. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +315 -0
  356. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +336 -1
  357. package/Tests/Utils/NetworkDiscovery/NetbiosNameUtil.test.ts +244 -0
  358. package/Tests/Utils/Rum/SessionTraceState.test.ts +239 -0
  359. package/Tests/Utils/ValueFormatter.test.ts +50 -0
  360. package/Tests/tsconfig.json +16 -0
  361. package/Types/AI/AIResourceContext.ts +7 -0
  362. package/Types/Dashboard/DashboardTemplates.ts +2 -1
  363. package/Types/DatabaseServer/DatabaseConnectionSpan.ts +77 -0
  364. package/Types/DatabaseServer/DatabaseContainerClassifier.ts +2068 -0
  365. package/Types/DatabaseServer/DatabaseContainerCommand.ts +801 -0
  366. package/Types/DatabaseServer/DatabaseEndpoint.ts +1943 -0
  367. package/Types/DatabaseServer/DatabaseServerDiscoverySource.ts +68 -0
  368. package/Types/DatabaseServer/DatabaseServerMetricCatalog.ts +966 -0
  369. package/Types/DatabaseServer/DatabaseSystem.ts +2124 -0
  370. package/Types/DatabaseServer/DatabaseTelemetryResolver.ts +555 -0
  371. package/Types/Email/EmailTemplateType.ts +1 -0
  372. package/Types/Incident/IncidentAlertLink.ts +38 -0
  373. package/Types/Monitor/CephAlertTemplates.ts +18 -0
  374. package/Types/Monitor/DatabaseAlertTemplates.ts +2020 -0
  375. package/Types/Monitor/KubernetesAlertTemplates.ts +64 -24
  376. package/Types/Monitor/KubernetesMetricCatalog.ts +118 -19
  377. package/Types/Monitor/MetricMonitor/MetricCriteriaContext.ts +14 -0
  378. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +93 -10
  379. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +109 -8
  380. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +36 -7
  381. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +43 -2
  382. package/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.ts +41 -6
  383. package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +26 -0
  384. package/Types/NetworkDevice/DiscoveredHostNamingStatus.ts +147 -0
  385. package/Types/Permission.ts +315 -0
  386. package/Types/Probe/ProbeApiIngestResponse.ts +8 -0
  387. package/Types/Rules/RuleCriteriaFieldRegistry.ts +10 -0
  388. package/Types/Rules/RuleRun.ts +12 -0
  389. package/Types/Rum/SessionReplay.ts +25 -6
  390. package/Types/Rum/WebVitals.ts +52 -0
  391. package/Types/Telemetry/EntityType.ts +23 -0
  392. package/Types/Telemetry/ResourceFacetCatalog.ts +14 -0
  393. package/Types/Telemetry/ServiceType.ts +8 -0
  394. package/UI/Components/Banner/Banner.tsx +1 -1
  395. package/UI/Components/Card/Card.tsx +1 -1
  396. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +2 -2
  397. package/UI/Components/Charts/Line/LineChart.tsx +7 -0
  398. package/UI/Components/CommandPalette/CommandPalette.tsx +1 -1
  399. package/UI/Components/Date/StartAndEndDate.tsx +5 -5
  400. package/UI/Components/Detail/FieldLabel.tsx +8 -0
  401. package/UI/Components/Diagram/HorizontalStepChain.tsx +1 -1
  402. package/UI/Components/Feed/FeedOptionsButton.tsx +1 -1
  403. package/UI/Components/Forms/BasicForm.tsx +1 -1
  404. package/UI/Components/Header/Header.tsx +1 -1
  405. package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -1
  406. package/UI/Components/HeaderAlert/HeaderAlert.tsx +1 -1
  407. package/UI/Components/InfoCard/InfoCard.tsx +47 -1
  408. package/UI/Components/LogsViewer/components/FacetValueRow.tsx +1 -1
  409. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +1 -1
  410. package/UI/Components/Modal/ModalFooter.tsx +1 -1
  411. package/UI/Components/ModelDetail/CardModelDetail.tsx +2 -2
  412. package/UI/Components/ModelTable/BaseModelTable.tsx +99 -21
  413. package/UI/Components/ModelTable/Column.ts +5 -0
  414. package/UI/Components/Navbar/NavBar.tsx +9 -2
  415. package/UI/Components/Navbar/NavBarMenuModal.tsx +2 -2
  416. package/UI/Components/Page/Page.tsx +1 -1
  417. package/UI/Components/Pagination/Pagination.tsx +3 -3
  418. package/UI/Components/ProgressButtons/ProgressButtonItem.tsx +1 -1
  419. package/UI/Components/SideMenu/SideMenu.tsx +4 -1
  420. package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +4 -2
  421. package/UI/Components/StatusPage/ResourceList.tsx +6 -6
  422. package/UI/Components/Table/TableHeader.tsx +47 -2
  423. package/UI/Components/Table/Types/Column.ts +7 -0
  424. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +1 -1
  425. package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +1 -1
  426. package/UI/Components/Tooltip/InfoTooltip.tsx +78 -0
  427. package/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.tsx +1 -1
  428. package/UI/Components/Workflow/ComponentsModal.tsx +2 -2
  429. package/UI/Components/Workflow/StepTraceViewer.tsx +1 -1
  430. package/UI/Styles/Theme.css +8 -1
  431. package/UI/Utils/Navigation.ts +89 -42
  432. package/UI/Utils/PermissionGate.ts +11 -2
  433. package/UI/Utils/Telemetry/TelemetryEntityNames.ts +7 -0
  434. package/UI/Utils/TelemetryService.ts +4 -3
  435. package/Utils/Incident/IncidentFromAlerts.ts +516 -0
  436. package/Utils/LabelRuleImportExport.ts +2 -0
  437. package/Utils/MetricUnitUtil.ts +103 -11
  438. package/Utils/Monitor/MetricValueFormatter.ts +66 -13
  439. package/Utils/Monitor/PlatformMetricUnitUtil.ts +215 -0
  440. package/Utils/Monitor/PlatformResourceIdentity.ts +514 -0
  441. package/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.ts +425 -0
  442. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +32 -0
  443. package/Utils/NetworkDiscovery/NetbiosNameUtil.ts +73 -0
  444. package/Utils/Rum/SessionTraceState.ts +212 -0
  445. package/Utils/Telemetry/DatabaseServerEntityKeys.ts +275 -0
  446. package/Utils/Telemetry/EntityKey.ts +176 -0
  447. package/Utils/ValueFormatter.ts +16 -0
  448. package/build/dist/Models/DatabaseModels/Alert.js +54 -0
  449. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  450. package/build/dist/Models/DatabaseModels/AlertFeed.js +2 -0
  451. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  452. package/build/dist/Models/DatabaseModels/DatabaseServer.js +1683 -0
  453. package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -0
  454. package/build/dist/Models/DatabaseModels/DatabaseServerEndpoint.js +559 -0
  455. package/build/dist/Models/DatabaseModels/DatabaseServerEndpoint.js.map +1 -0
  456. package/build/dist/Models/DatabaseModels/DatabaseServerFeed.js +648 -0
  457. package/build/dist/Models/DatabaseModels/DatabaseServerFeed.js.map +1 -0
  458. package/build/dist/Models/DatabaseModels/DatabaseServerLabelRule.js +522 -0
  459. package/build/dist/Models/DatabaseModels/DatabaseServerLabelRule.js.map +1 -0
  460. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerRule.js +603 -0
  461. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerRule.js.map +1 -0
  462. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerTeam.js +506 -0
  463. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerTeam.js.map +1 -0
  464. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerUser.js +505 -0
  465. package/build/dist/Models/DatabaseModels/DatabaseServerOwnerUser.js.map +1 -0
  466. package/build/dist/Models/DatabaseModels/Incident.js +54 -0
  467. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  468. package/build/dist/Models/DatabaseModels/IncidentAlert.js +553 -0
  469. package/build/dist/Models/DatabaseModels/IncidentAlert.js.map +1 -0
  470. package/build/dist/Models/DatabaseModels/IncidentFeed.js +2 -0
  471. package/build/dist/Models/DatabaseModels/IncidentFeed.js.map +1 -1
  472. package/build/dist/Models/DatabaseModels/Index.js +18 -0
  473. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  474. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  475. package/build/dist/Models/DatabaseModels/Project.js +62 -0
  476. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  477. package/build/dist/Models/DatabaseModels/RumApplication.js +53 -1
  478. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  479. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +54 -0
  480. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  481. package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
  482. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  483. package/build/dist/Models/DatabaseModels/UserProjectSsoConsent.js +162 -0
  484. package/build/dist/Models/DatabaseModels/UserProjectSsoConsent.js.map +1 -0
  485. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js +20 -0
  486. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794800000000-AddSessionReplaySameOriginTracePropagation.js.map +1 -0
  487. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js +42 -0
  488. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1794900000000-AddIncidentAlert.js.map +1 -0
  489. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.js +240 -0
  490. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795000000000-AddDatabaseServerTables.js.map +1 -0
  491. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.js +26 -0
  492. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795100000000-AddUserProjectSsoConsent.js.map +1 -0
  493. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  494. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  495. package/build/dist/Server/Middleware/MultipartFormData.js +1 -1
  496. package/build/dist/Server/Middleware/TelemetryIngest.js +15 -8
  497. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  498. package/build/dist/Server/Services/AlertReminderRuleService.js +72 -23
  499. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  500. package/build/dist/Server/Services/DatabaseServerEndpointService.js +694 -0
  501. package/build/dist/Server/Services/DatabaseServerEndpointService.js.map +1 -0
  502. package/build/dist/Server/Services/DatabaseServerFeedService.js +110 -0
  503. package/build/dist/Server/Services/DatabaseServerFeedService.js.map +1 -0
  504. package/build/dist/Server/Services/DatabaseServerLabelRuleEngineService.js +272 -0
  505. package/build/dist/Server/Services/DatabaseServerLabelRuleEngineService.js.map +1 -0
  506. package/build/dist/Server/Services/DatabaseServerLabelRuleService.js +13 -0
  507. package/build/dist/Server/Services/DatabaseServerLabelRuleService.js.map +1 -0
  508. package/build/dist/Server/Services/DatabaseServerOwnerRuleEngineService.js +340 -0
  509. package/build/dist/Server/Services/DatabaseServerOwnerRuleEngineService.js.map +1 -0
  510. package/build/dist/Server/Services/DatabaseServerOwnerRuleService.js +13 -0
  511. package/build/dist/Server/Services/DatabaseServerOwnerRuleService.js.map +1 -0
  512. package/build/dist/Server/Services/DatabaseServerOwnerTeamService.js +160 -0
  513. package/build/dist/Server/Services/DatabaseServerOwnerTeamService.js.map +1 -0
  514. package/build/dist/Server/Services/DatabaseServerOwnerUserService.js +153 -0
  515. package/build/dist/Server/Services/DatabaseServerOwnerUserService.js.map +1 -0
  516. package/build/dist/Server/Services/DatabaseServerService.js +3272 -0
  517. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -0
  518. package/build/dist/Server/Services/DatabaseService.js +8 -4
  519. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  520. package/build/dist/Server/Services/DockerResourceService.js +30 -3
  521. package/build/dist/Server/Services/DockerResourceService.js.map +1 -1
  522. package/build/dist/Server/Services/IncidentAlertService.js +1370 -0
  523. package/build/dist/Server/Services/IncidentAlertService.js.map +1 -0
  524. package/build/dist/Server/Services/IncidentReminderRuleService.js +73 -23
  525. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  526. package/build/dist/Server/Services/IncidentService.js +164 -12
  527. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  528. package/build/dist/Server/Services/IncidentStateTimelineService.js +21 -0
  529. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  530. package/build/dist/Server/Services/Index.js +18 -0
  531. package/build/dist/Server/Services/Index.js.map +1 -1
  532. package/build/dist/Server/Services/InventoryItemService.js +88 -5
  533. package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
  534. package/build/dist/Server/Services/IoTDeviceService.js +111 -24
  535. package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
  536. package/build/dist/Server/Services/OpenTelemetryIngestService.js +24 -9
  537. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  538. package/build/dist/Server/Services/PodmanResourceService.js +30 -3
  539. package/build/dist/Server/Services/PodmanResourceService.js.map +1 -1
  540. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +75 -23
  541. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  542. package/build/dist/Server/Services/ServiceService.js +1 -1
  543. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  544. package/build/dist/Server/Services/TelemetryUsageBillingService.js +23 -2
  545. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  546. package/build/dist/Server/Services/UserProjectSsoConsentService.js +79 -0
  547. package/build/dist/Server/Services/UserProjectSsoConsentService.js.map +1 -0
  548. package/build/dist/Server/Services/UserService.js +13 -1
  549. package/build/dist/Server/Services/UserService.js.map +1 -1
  550. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +18 -0
  551. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  552. package/build/dist/Server/Types/Database/QueryHelper.js +26 -1
  553. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  554. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js +46 -0
  555. package/build/dist/Server/Utils/AI/Toolbox/ResourceTools.js.map +1 -1
  556. package/build/dist/Server/Utils/Database/AffectedResourceRelations.js +6 -0
  557. package/build/dist/Server/Utils/Database/AffectedResourceRelations.js.map +1 -1
  558. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +134 -13
  559. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  560. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +22 -6
  561. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  562. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +1489 -524
  563. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  564. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +22 -6
  565. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  566. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +196 -6
  567. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  568. package/build/dist/Server/Utils/Monitor/MonitorResource.js +36 -9
  569. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  570. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +1 -0
  571. package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
  572. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +175 -17
  573. package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
  574. package/build/dist/Server/Utils/Monitor/PerSeriesResolutionRootCause.js +29 -0
  575. package/build/dist/Server/Utils/Monitor/PerSeriesResolutionRootCause.js.map +1 -0
  576. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +211 -0
  577. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  578. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +82 -10
  579. package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
  580. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
  581. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
  582. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js +8 -0
  583. package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCache.js.map +1 -1
  584. package/build/dist/Server/Utils/StartServer.js +20 -4
  585. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  586. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
  587. package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
  588. package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js +442 -0
  589. package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js.map +1 -0
  590. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +5 -1
  591. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  592. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +15 -1
  593. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
  594. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +121 -5
  595. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  596. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +12 -0
  597. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  598. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +438 -36
  599. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -1
  600. package/build/dist/Server/Utils/Telemetry/Telemetry.js +12 -0
  601. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  602. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +17 -18
  603. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  604. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js +16 -10
  605. package/build/dist/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.js.map +1 -1
  606. package/build/dist/Types/AI/AIResourceContext.js +7 -0
  607. package/build/dist/Types/AI/AIResourceContext.js.map +1 -1
  608. package/build/dist/Types/Dashboard/DashboardTemplates.js +2 -1
  609. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  610. package/build/dist/Types/DatabaseServer/DatabaseConnectionSpan.js +71 -0
  611. package/build/dist/Types/DatabaseServer/DatabaseConnectionSpan.js.map +1 -0
  612. package/build/dist/Types/DatabaseServer/DatabaseContainerClassifier.js +1462 -0
  613. package/build/dist/Types/DatabaseServer/DatabaseContainerClassifier.js.map +1 -0
  614. package/build/dist/Types/DatabaseServer/DatabaseContainerCommand.js +691 -0
  615. package/build/dist/Types/DatabaseServer/DatabaseContainerCommand.js.map +1 -0
  616. package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js +1407 -0
  617. package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js.map +1 -0
  618. package/build/dist/Types/DatabaseServer/DatabaseServerDiscoverySource.js +60 -0
  619. package/build/dist/Types/DatabaseServer/DatabaseServerDiscoverySource.js.map +1 -0
  620. package/build/dist/Types/DatabaseServer/DatabaseServerMetricCatalog.js +804 -0
  621. package/build/dist/Types/DatabaseServer/DatabaseServerMetricCatalog.js.map +1 -0
  622. package/build/dist/Types/DatabaseServer/DatabaseSystem.js +1860 -0
  623. package/build/dist/Types/DatabaseServer/DatabaseSystem.js.map +1 -0
  624. package/build/dist/Types/DatabaseServer/DatabaseTelemetryResolver.js +406 -0
  625. package/build/dist/Types/DatabaseServer/DatabaseTelemetryResolver.js.map +1 -0
  626. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  627. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  628. package/build/dist/Types/Incident/IncidentAlertLink.js +34 -0
  629. package/build/dist/Types/Incident/IncidentAlertLink.js.map +1 -0
  630. package/build/dist/Types/Monitor/CephAlertTemplates.js +18 -0
  631. package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -1
  632. package/build/dist/Types/Monitor/DatabaseAlertTemplates.js +1518 -0
  633. package/build/dist/Types/Monitor/DatabaseAlertTemplates.js.map +1 -0
  634. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +57 -24
  635. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  636. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js +104 -18
  637. package/build/dist/Types/Monitor/KubernetesMetricCatalog.js.map +1 -1
  638. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +80 -3
  639. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
  640. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +10 -3
  641. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
  642. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +29 -0
  643. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
  644. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js +21 -6
  645. package/build/dist/Types/Monitor/Recommendation/RecommendationCriteriaBuilder.js.map +1 -1
  646. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +25 -0
  647. package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
  648. package/build/dist/Types/NetworkDevice/DiscoveredHostNamingStatus.js +136 -0
  649. package/build/dist/Types/NetworkDevice/DiscoveredHostNamingStatus.js.map +1 -0
  650. package/build/dist/Types/Permission.js +276 -0
  651. package/build/dist/Types/Permission.js.map +1 -1
  652. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +10 -0
  653. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  654. package/build/dist/Types/Rules/RuleRun.js +4 -0
  655. package/build/dist/Types/Rules/RuleRun.js.map +1 -1
  656. package/build/dist/Types/Rum/WebVitals.js +25 -0
  657. package/build/dist/Types/Rum/WebVitals.js.map +1 -1
  658. package/build/dist/Types/Telemetry/EntityType.js +23 -0
  659. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  660. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +14 -0
  661. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -1
  662. package/build/dist/Types/Telemetry/ServiceType.js +8 -0
  663. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  664. package/build/dist/UI/Components/Banner/Banner.js +1 -1
  665. package/build/dist/UI/Components/Banner/Banner.js.map +1 -1
  666. package/build/dist/UI/Components/Card/Card.js +1 -1
  667. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  668. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +2 -2
  669. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  670. package/build/dist/UI/Components/Charts/Line/LineChart.js +1 -1
  671. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  672. package/build/dist/UI/Components/CommandPalette/CommandPalette.js +1 -1
  673. package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -1
  674. package/build/dist/UI/Components/Date/StartAndEndDate.js +5 -5
  675. package/build/dist/UI/Components/Date/StartAndEndDate.js.map +1 -1
  676. package/build/dist/UI/Components/Detail/FieldLabel.js +2 -0
  677. package/build/dist/UI/Components/Detail/FieldLabel.js.map +1 -1
  678. package/build/dist/UI/Components/Diagram/HorizontalStepChain.js +1 -1
  679. package/build/dist/UI/Components/Diagram/HorizontalStepChain.js.map +1 -1
  680. package/build/dist/UI/Components/Feed/FeedOptionsButton.js +1 -1
  681. package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +1 -1
  682. package/build/dist/UI/Components/Forms/BasicForm.js +1 -1
  683. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  684. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -1
  685. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  686. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js +1 -1
  687. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js.map +1 -1
  688. package/build/dist/UI/Components/InfoCard/InfoCard.js +22 -1
  689. package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
  690. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +1 -1
  691. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
  692. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +1 -1
  693. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  694. package/build/dist/UI/Components/Modal/ModalFooter.js +1 -1
  695. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  696. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +2 -2
  697. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  698. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +70 -18
  699. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  700. package/build/dist/UI/Components/Navbar/NavBar.js +9 -2
  701. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  702. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -2
  703. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  704. package/build/dist/UI/Components/Page/Page.js +1 -1
  705. package/build/dist/UI/Components/Page/Page.js.map +1 -1
  706. package/build/dist/UI/Components/Pagination/Pagination.js +3 -3
  707. package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
  708. package/build/dist/UI/Components/ProgressButtons/ProgressButtonItem.js +1 -1
  709. package/build/dist/UI/Components/ProgressButtons/ProgressButtonItem.js.map +1 -1
  710. package/build/dist/UI/Components/SideMenu/SideMenu.js +4 -1
  711. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  712. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +3 -1
  713. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -1
  714. package/build/dist/UI/Components/StatusPage/ResourceList.js +6 -6
  715. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
  716. package/build/dist/UI/Components/Table/TableHeader.js +18 -2
  717. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  718. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +1 -1
  719. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  720. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +1 -1
  721. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
  722. package/build/dist/UI/Components/Tooltip/InfoTooltip.js +28 -0
  723. package/build/dist/UI/Components/Tooltip/InfoTooltip.js.map +1 -0
  724. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js +1 -1
  725. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js.map +1 -1
  726. package/build/dist/UI/Components/Workflow/ComponentsModal.js +2 -2
  727. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  728. package/build/dist/UI/Components/Workflow/StepTraceViewer.js +1 -1
  729. package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -1
  730. package/build/dist/UI/Utils/Navigation.js +66 -33
  731. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  732. package/build/dist/UI/Utils/PermissionGate.js +4 -2
  733. package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
  734. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js +7 -0
  735. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js.map +1 -1
  736. package/build/dist/UI/Utils/TelemetryService.js +3 -2
  737. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  738. package/build/dist/Utils/Incident/IncidentFromAlerts.js +306 -0
  739. package/build/dist/Utils/Incident/IncidentFromAlerts.js.map +1 -0
  740. package/build/dist/Utils/LabelRuleImportExport.js +2 -0
  741. package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
  742. package/build/dist/Utils/MetricUnitUtil.js +77 -13
  743. package/build/dist/Utils/MetricUnitUtil.js.map +1 -1
  744. package/build/dist/Utils/Monitor/MetricValueFormatter.js +58 -13
  745. package/build/dist/Utils/Monitor/MetricValueFormatter.js.map +1 -1
  746. package/build/dist/Utils/Monitor/PlatformMetricUnitUtil.js +161 -0
  747. package/build/dist/Utils/Monitor/PlatformMetricUnitUtil.js.map +1 -0
  748. package/build/dist/Utils/Monitor/PlatformResourceIdentity.js +323 -0
  749. package/build/dist/Utils/Monitor/PlatformResourceIdentity.js.map +1 -0
  750. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.js +270 -0
  751. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostNamingDiagnosis.js.map +1 -0
  752. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +23 -0
  753. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  754. package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js +61 -0
  755. package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js.map +1 -1
  756. package/build/dist/Utils/Rum/SessionTraceState.js +154 -0
  757. package/build/dist/Utils/Rum/SessionTraceState.js.map +1 -0
  758. package/build/dist/Utils/Telemetry/DatabaseServerEntityKeys.js +178 -0
  759. package/build/dist/Utils/Telemetry/DatabaseServerEntityKeys.js.map +1 -0
  760. package/build/dist/Utils/Telemetry/EntityKey.js +133 -0
  761. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  762. package/build/dist/Utils/ValueFormatter.js +15 -0
  763. package/build/dist/Utils/ValueFormatter.js.map +1 -1
  764. package/package.json +1 -1
  765. package/tsconfig.tests.json +7 -5
@@ -0,0 +1,691 @@
1
+ /*
2
+ * "Does this container run the database server, or something else that
3
+ * happens to use a database image?" — read from the program a Kubernetes
4
+ * container starts (`command` followed by `args`).
5
+ *
6
+ * It fails OPEN: a container is a possible server unless its command line
7
+ * proves otherwise. Proof is
8
+ * - a client, dump or admin tool as the program itself (`psql`,
9
+ * `redis-cli`, `pg_dump`, `mongosh`) — "client";
10
+ * - a keep-alive as the program itself (`sleep infinity`, `tail -f
11
+ * /dev/null`, `cat`), or a shell with no script to run (`bash`,
12
+ * `sh -i`) — "keep-alive";
13
+ * - a Redis-family Sentinel (`redis-sentinel`, `redis-server … --sentinel`)
14
+ * — "companion";
15
+ * - a `sh -c` script EVERY command of which is one of those, a shell
16
+ * keyword or builtin, or a plain utility (`echo`, `set -x`, `until …; do
17
+ * sleep 1; done`, `cp`) — so a script that starts anything else
18
+ * (`exec postgres`, a start script, `"$@"`, a nested shell) is a possible
19
+ * server however it begins.
20
+ * A launcher that runs the rest of its arguments as the command — `env`
21
+ * (with its flags and `NAME=value` words), `nohup`, `setsid`, `tini [--]`,
22
+ * `dumb-init [--]`, or an official image's `docker-entrypoint.sh` followed by
23
+ * a program — is looked through to the program it starts, at most
24
+ * MAX_WRAPPER_WORDS words deep; inside a script, `exec`, `env` and `nohup`
25
+ * (and `NAME=value` prefixes) are looked through the same way.
26
+ * `docker-entrypoint.sh -c …` starts the image's server with those flags.
27
+ * Whatever cannot be read — a script FILE (`bash /start.sh`), a launcher
28
+ * whose program is not a plain word (`gosu user …`, `timeout 30 …`), a
29
+ * heredoc, a script longer than MAX_SCRIPT_CHARACTERS, a script the
30
+ * projection lost — is a possible server: a false positive auto-archives
31
+ * later, a server that is never discovered is never seen at all.
32
+ *
33
+ * The rules read a REDUCED command line, which Postgres computes before a
34
+ * pod spec leaves the database (containerCommandProjectionSql) and
35
+ * reduceContainerCommand, its JavaScript twin, computes from a full spec:
36
+ * the launchers dropped, then the program's first word; for a shell, each of its first
37
+ * MAX_SHELL_ARGUMENTS arguments as either a flag or the set of command names
38
+ * it would run — each one on CONTAINER_COMMAND_KNOWN_WORDS or replaced by
39
+ * "?". Argument values, environment variables and every other word stay in
40
+ * Postgres. classifyContainerCommand always reduces first, and reducing a
41
+ * reduction changes nothing, so a full spec and a projected one classify
42
+ * alike by construction. Both twins are built from the same regular
43
+ * expression sources, written in the subset JavaScript and Postgres ARE
44
+ * read the same way (no `\s`, `.` or POSIX classes; whitespace spelled out),
45
+ * and DatabaseContainerCommandPostgres.test.ts holds them together.
46
+ */
47
+ // The engines' clients, dump / restore / admin tools and benchmarks.
48
+ const CLIENT_PROGRAMS = new Set([
49
+ "arangodump",
50
+ "arangoexport",
51
+ "arangoimport",
52
+ "arangorestore",
53
+ "arangosh",
54
+ "bsondump",
55
+ "cassandra-stress",
56
+ "cbq",
57
+ "clickhouse-benchmark",
58
+ "clickhouse-client",
59
+ "clusterdb",
60
+ "cqlsh",
61
+ "createdb",
62
+ "createuser",
63
+ "cypher-shell",
64
+ "dropdb",
65
+ "dropuser",
66
+ "etcdctl",
67
+ "influx",
68
+ "keydb-benchmark",
69
+ "keydb-cli",
70
+ "mariabackup",
71
+ "mariadb",
72
+ "mariadb-admin",
73
+ "mariadb-backup",
74
+ "mariadb-binlog",
75
+ "mariadb-check",
76
+ "mariadb-dump",
77
+ "mariadb-import",
78
+ "mariadb-slap",
79
+ "memtier_benchmark",
80
+ "mongo",
81
+ "mongodump",
82
+ "mongoexport",
83
+ "mongofiles",
84
+ "mongoimport",
85
+ "mongorestore",
86
+ "mongosh",
87
+ "mongostat",
88
+ "mongotop",
89
+ "mysql",
90
+ "mysqladmin",
91
+ "mysqlbinlog",
92
+ "mysqlcheck",
93
+ "mysqldump",
94
+ "mysqlimport",
95
+ "mysqlpump",
96
+ "mysqlsh",
97
+ "mysqlslap",
98
+ "nodetool",
99
+ "pg_amcheck",
100
+ "pg_basebackup",
101
+ "pg_dump",
102
+ "pg_dumpall",
103
+ "pg_isready",
104
+ "pg_receivewal",
105
+ "pg_restore",
106
+ "pg_verifybackup",
107
+ "pgbench",
108
+ "psql",
109
+ "redis-benchmark",
110
+ "redis-check-aof",
111
+ "redis-check-rdb",
112
+ "redis-cli",
113
+ "reindexdb",
114
+ "sqlcmd",
115
+ "sqlplus",
116
+ "vacuumdb",
117
+ "valkey-benchmark",
118
+ "valkey-check-aof",
119
+ "valkey-check-rdb",
120
+ "valkey-cli",
121
+ "xtrabackup",
122
+ "ycqlsh",
123
+ "ysqlsh",
124
+ ]);
125
+ // Commands that only hold a debug pod open.
126
+ const KEEP_ALIVE_PROGRAMS = new Set([
127
+ "cat",
128
+ "sleep",
129
+ "tail",
130
+ "true",
131
+ ]);
132
+ const COMPANION_PROGRAMS = new Set([
133
+ "keydb-sentinel",
134
+ "redis-sentinel",
135
+ "valkey-sentinel",
136
+ ]);
137
+ // Servers that run as a Sentinel when given this flag.
138
+ const SENTINEL_FLAG = "--sentinel";
139
+ const SENTINEL_CAPABLE_SERVERS = new Set([
140
+ "keydb-server",
141
+ "redis-server",
142
+ "valkey-server",
143
+ ]);
144
+ /*
145
+ * Shell keywords, builtins and utilities that never start a server. Nothing
146
+ * here may run another program: `env`, `exec`, `eval`, `source` / `.`,
147
+ * `xargs`, `find`, `timeout`, `nohup`, `su`, `gosu` and the shells
148
+ * themselves are absent on purpose.
149
+ */
150
+ const SCRIPT_UTILITIES = new Set([
151
+ "!",
152
+ ":",
153
+ "[",
154
+ "[[",
155
+ "{",
156
+ "}",
157
+ "awk",
158
+ "base64",
159
+ "basename",
160
+ "break",
161
+ "case",
162
+ "cd",
163
+ "chmod",
164
+ "chown",
165
+ "continue",
166
+ "cp",
167
+ "curl",
168
+ "cut",
169
+ "date",
170
+ "declare",
171
+ "dirname",
172
+ "do",
173
+ "done",
174
+ "echo",
175
+ "elif",
176
+ "else",
177
+ "envsubst",
178
+ "esac",
179
+ "exit",
180
+ "export",
181
+ "expr",
182
+ "false",
183
+ "fi",
184
+ "for",
185
+ "getent",
186
+ "grep",
187
+ "gzip",
188
+ "head",
189
+ "hostname",
190
+ "id",
191
+ "if",
192
+ "in",
193
+ "install",
194
+ "jq",
195
+ "kill",
196
+ "ln",
197
+ "local",
198
+ "ls",
199
+ "mkdir",
200
+ "mktemp",
201
+ "mv",
202
+ "nslookup",
203
+ "printf",
204
+ "pwd",
205
+ "read",
206
+ "readonly",
207
+ "return",
208
+ "rm",
209
+ "sed",
210
+ "seq",
211
+ "set",
212
+ "shift",
213
+ "shopt",
214
+ "sort",
215
+ "tee",
216
+ "test",
217
+ "then",
218
+ "touch",
219
+ "tr",
220
+ "trap",
221
+ "typeset",
222
+ "ulimit",
223
+ "umask",
224
+ "uniq",
225
+ "unset",
226
+ "until",
227
+ "wait",
228
+ "wc",
229
+ "wget",
230
+ "while",
231
+ ]);
232
+ const SHELL_PROGRAMS = new Set([
233
+ "ash",
234
+ "bash",
235
+ "dash",
236
+ "sh",
237
+ "zsh",
238
+ ]);
239
+ /*
240
+ * Launchers that run the rest of their arguments as the command, after
241
+ * their own flags (`env -i`, `tini -g --`, `dumb-init --single-child`) and,
242
+ * for `env`, `NAME=value` words. A flag that takes a separate value
243
+ * (`env -u NAME`, `tini -e 143`) leaves that value as the "program", which
244
+ * reads as a possible server — never as a client.
245
+ */
246
+ const WRAPPER_PROGRAMS = [
247
+ "dumb-init",
248
+ "env",
249
+ "nohup",
250
+ "setsid",
251
+ "tini",
252
+ "tini-static",
253
+ ];
254
+ /*
255
+ * An official image's entrypoint: it runs its first argument as the
256
+ * command, unless that argument is a flag — then it starts the image's own
257
+ * server with those flags (`docker-entrypoint.sh -c max_connections=200`).
258
+ */
259
+ const ENTRYPOINT_PROGRAMS = ["docker-entrypoint.sh"];
260
+ // Launcher words read before the program; a longer chain is unreadable.
261
+ const MAX_WRAPPER_WORDS = 8;
262
+ /*
263
+ * The command names that may leave Postgres as themselves; any other
264
+ * command name leaves it as UNKNOWN_WORD. None of them can start a server.
265
+ */
266
+ export const CONTAINER_COMMAND_KNOWN_WORDS = Array.from(new Set([
267
+ ...Array.from(CLIENT_PROGRAMS),
268
+ ...Array.from(KEEP_ALIVE_PROGRAMS),
269
+ ...Array.from(COMPANION_PROGRAMS),
270
+ ...Array.from(SCRIPT_UTILITIES),
271
+ ])).sort();
272
+ const KNOWN_WORDS = new Set(CONTAINER_COMMAND_KNOWN_WORDS);
273
+ // A command name that is not a known word (or text that cannot be read).
274
+ const UNKNOWN_WORD = "?";
275
+ // A shell's arguments read after its program; more are marked UNKNOWN_WORD.
276
+ const MAX_SHELL_ARGUMENTS = 8;
277
+ /*
278
+ * A longer shell argument is not read (it reduces to "?"): it bounds what
279
+ * the candidate-pod query spends per container on a pathological inline
280
+ * script. Counted in characters (code points), as Postgres length() counts.
281
+ */
282
+ const MAX_SCRIPT_CHARACTERS = 16384;
283
+ // ---- the shared regular expressions ----------------------------------------
284
+ // Whitespace, spelled out: `\s` and [[:space:]] do not agree.
285
+ const WS = " \\t\\n\\r\\f\\v";
286
+ // The first word of argv[0], after any leading whitespace.
287
+ const PROGRAM_SOURCE = `^[${WS}]*([^${WS};&|=]+)`;
288
+ const SHELL_PROGRAM_SOURCE = "(^|/)(sh|bash|ash|dash|zsh)$";
289
+ // `-ecx`, `+o`, `--`, `--noprofile`: a shell argument kept verbatim.
290
+ const SHELL_OPTION_SOURCE = "^([-+][A-Za-z]{0,8}|--|--[A-Za-z][A-Za-z-]{0,23})$";
291
+ // A launcher's flag (`-i`, `--`, `--single-child`) and an `env` NAME=value word.
292
+ const FLAG_WORD_SOURCE = "^-";
293
+ const ASSIGNMENT_WORD_SOURCE = "^[A-Za-z_][A-Za-z0-9_]*=";
294
+ /*
295
+ * A script is cleaned in this order, then its command names are read:
296
+ * line continuations → a space; backslash escapes → "?"; comments (outside
297
+ * quotes) dropped; quoted strings and `$( )` / `${ }` / backquote
298
+ * substitutions → "?"; redirections → a space; `NAME=value` words dropped.
299
+ */
300
+ const LINE_CONTINUATION_SOURCE = "\\\\\\r?\\n";
301
+ const ESCAPED_CHARACTER_SOURCE = "\\\\[^\\n]";
302
+ const COMMENT_SOURCE = `('[^']*'|"[^"]*")|(^|[${WS};&|()])#[^\\n]*`;
303
+ const QUOTED_SOURCE = "'[^']*'|\"[^\"]*\"|`[^`]*`|\\$\\([^()]*\\)|\\$\\{[^}]*\\}";
304
+ const REDIRECTION_SOURCE = "&?[0-9]*[<>]+&?[0-9]*-?";
305
+ const ASSIGNMENT_SOURCE = `(^|[${WS};&|()])[A-Za-z_][A-Za-z0-9_]*=[^${WS};&|()]*`;
306
+ /*
307
+ * A command name: the first word after the start, a newline or one of
308
+ * `; & | ( )`, past any keyword that is followed by a command (`then`, `do`,
309
+ * `!`, `exec` …) or launcher that runs one (`env`, `nohup`; `NAME=value`
310
+ * words are already gone).
311
+ */
312
+ const COMMAND_WORD_SOURCE = `(?:^|[;&|()\\n])[${WS}]*(?:(?:if|then|else|elif|do|while|until|exec|time|env|nohup|!|\\{)[${WS}]+)*([^${WS};&|()]+)`;
313
+ const PROGRAM_REGEX = new RegExp(PROGRAM_SOURCE);
314
+ const SHELL_PROGRAM_REGEX = new RegExp(SHELL_PROGRAM_SOURCE, "i");
315
+ const SHELL_OPTION_REGEX = new RegExp(SHELL_OPTION_SOURCE);
316
+ const FLAG_WORD_REGEX = new RegExp(FLAG_WORD_SOURCE);
317
+ const ASSIGNMENT_WORD_REGEX = new RegExp(ASSIGNMENT_WORD_SOURCE);
318
+ const WRAPPER_PROGRAM_SET = new Set(WRAPPER_PROGRAMS);
319
+ const ENTRYPOINT_PROGRAM_SET = new Set(ENTRYPOINT_PROGRAMS);
320
+ const LINE_CONTINUATION_REGEX = new RegExp(LINE_CONTINUATION_SOURCE, "g");
321
+ const ESCAPED_CHARACTER_REGEX = new RegExp(ESCAPED_CHARACTER_SOURCE, "g");
322
+ const COMMENT_REGEX = new RegExp(COMMENT_SOURCE, "g");
323
+ const QUOTED_REGEX = new RegExp(QUOTED_SOURCE, "g");
324
+ const REDIRECTION_REGEX = new RegExp(REDIRECTION_SOURCE, "g");
325
+ const ASSIGNMENT_REGEX = new RegExp(ASSIGNMENT_SOURCE, "g");
326
+ // A single-dash flag cluster with `c`: the shell runs its operand as a script.
327
+ const SCRIPT_FLAG_REGEX = /^-[A-Za-z]*c/;
328
+ // `-o` / `+o` / `-O` / `+O` last in a cluster: the next argument is its value.
329
+ const VALUED_FLAG_REGEX = /^[-+][A-Za-z]*[oO]$/;
330
+ // ---- the JavaScript twin -----------------------------------------------------
331
+ // A JSON array element as Postgres `->>` reads it.
332
+ function toText(value) {
333
+ if (typeof value === "string") {
334
+ return value;
335
+ }
336
+ if (typeof value === "number" || typeof value === "boolean") {
337
+ return String(value);
338
+ }
339
+ return null;
340
+ }
341
+ function isLongerThan(value, characters) {
342
+ // UTF-16 length is an upper bound on the code point count.
343
+ return value.length > characters && Array.from(value).length > characters;
344
+ }
345
+ function baseName(value) {
346
+ return value.substring(value.lastIndexOf("/") + 1).toLowerCase();
347
+ }
348
+ // The command names a script runs, as a sorted "\n"-joined set.
349
+ function reduceScript(script) {
350
+ const cleaned = script
351
+ .replace(LINE_CONTINUATION_REGEX, " ")
352
+ .replace(ESCAPED_CHARACTER_REGEX, "?")
353
+ .replace(COMMENT_REGEX, "$1$2")
354
+ .replace(QUOTED_REGEX, "?")
355
+ .replace(REDIRECTION_REGEX, " ")
356
+ .replace(ASSIGNMENT_REGEX, "$1");
357
+ const names = new Set();
358
+ const commandWords = new RegExp(COMMAND_WORD_SOURCE, "g");
359
+ let match = commandWords.exec(cleaned);
360
+ while (match) {
361
+ const name = baseName(match[1]);
362
+ names.add(KNOWN_WORDS.has(name) ? name : UNKNOWN_WORD);
363
+ match = commandWords.exec(cleaned);
364
+ }
365
+ return Array.from(names).sort().join("\n");
366
+ }
367
+ // What one argv word is to the launcher walk (the Postgres twin's CASE, in order).
368
+ function launcherWordKind(value) {
369
+ const text = toText(value);
370
+ if (text === null) {
371
+ return "other";
372
+ }
373
+ if (FLAG_WORD_REGEX.test(text)) {
374
+ return "flag";
375
+ }
376
+ if (ASSIGNMENT_WORD_REGEX.test(text)) {
377
+ return "assignment";
378
+ }
379
+ const program = PROGRAM_REGEX.exec(text);
380
+ if (!program) {
381
+ return "other";
382
+ }
383
+ const name = baseName(program[1]);
384
+ if (WRAPPER_PROGRAM_SET.has(name)) {
385
+ return "wrapper";
386
+ }
387
+ return ENTRYPOINT_PROGRAM_SET.has(name) ? "entrypoint" : "other";
388
+ }
389
+ /*
390
+ * `command ++ args` from the program a chain of launchers starts: the whole
391
+ * argv when it starts with no launcher; from the first word that is not a
392
+ * launcher, a launcher's flag or an `env` assignment; just the first
393
+ * launcher (a possible server) when that program is out of reach — more
394
+ * than MAX_WRAPPER_WORDS words deep, missing, or a flag handed to an
395
+ * image's entrypoint (which then starts the server with it).
396
+ */
397
+ function unwrapLaunchers(argv) {
398
+ let previous = null;
399
+ const last = Math.min(argv.length - 1, MAX_WRAPPER_WORDS);
400
+ for (let index = 0; index <= last; index++) {
401
+ const kind = launcherWordKind(argv[index]);
402
+ const skipped = kind === "wrapper" ||
403
+ kind === "entrypoint" ||
404
+ ((kind === "flag" || kind === "assignment") &&
405
+ (previous === "wrapper" ||
406
+ previous === "flag" ||
407
+ previous === "assignment"));
408
+ if (!skipped) {
409
+ if (index === 0) {
410
+ return argv;
411
+ }
412
+ return kind === "flag" || kind === "assignment"
413
+ ? argv.slice(0, 1)
414
+ : argv.slice(index);
415
+ }
416
+ previous = kind;
417
+ }
418
+ return argv.slice(0, 1);
419
+ }
420
+ /**
421
+ * The reduced command line containerCommandProjectionSql computes in
422
+ * Postgres, from a full `command ++ args`: launchers dropped (see
423
+ * unwrapLaunchers), then [] when there is no program; `[program]` (plus
424
+ * "--sentinel" when present) for anything but a shell; for a shell,
425
+ * `[program, …]` with each of its first MAX_SHELL_ARGUMENTS arguments kept
426
+ * when it is a flag and reduced to the command names it runs otherwise ("?"
427
+ * when longer than MAX_SCRIPT_CHARACTERS), and "?" appended when there are
428
+ * more.
429
+ */
430
+ export function reduceContainerCommand(argv) {
431
+ return reduceProgramCommand(unwrapLaunchers(argv));
432
+ }
433
+ // reduceContainerCommand once the launchers are gone.
434
+ function reduceProgramCommand(argv) {
435
+ const first = toText(argv[0]);
436
+ const program = first === null ? null : PROGRAM_REGEX.exec(first);
437
+ if (!program) {
438
+ return [];
439
+ }
440
+ const name = program[1];
441
+ if (!SHELL_PROGRAM_REGEX.test(name)) {
442
+ return argv.includes(SENTINEL_FLAG) ? [name, SENTINEL_FLAG] : [name];
443
+ }
444
+ const reduced = [name];
445
+ const last = Math.min(argv.length - 1, MAX_SHELL_ARGUMENTS);
446
+ for (let index = 1; index <= last; index++) {
447
+ const word = toText(argv[index]);
448
+ if (word === null) {
449
+ reduced.push(null);
450
+ }
451
+ else if (SHELL_OPTION_REGEX.test(word)) {
452
+ reduced.push(word);
453
+ }
454
+ else if (isLongerThan(word, MAX_SCRIPT_CHARACTERS)) {
455
+ reduced.push(UNKNOWN_WORD);
456
+ }
457
+ else {
458
+ reduced.push(reduceScript(word));
459
+ }
460
+ }
461
+ if (argv.length > MAX_SHELL_ARGUMENTS + 1) {
462
+ reduced.push(UNKNOWN_WORD);
463
+ }
464
+ return reduced;
465
+ }
466
+ // ---- the rules ----------------------------------------------------------------
467
+ function roleOfScript(script) {
468
+ let runsClient = false;
469
+ let runsCompanion = false;
470
+ for (const name of reduceScript(script).split("\n")) {
471
+ if (!name) {
472
+ continue;
473
+ }
474
+ if (COMPANION_PROGRAMS.has(name)) {
475
+ runsCompanion = true;
476
+ }
477
+ else if (CLIENT_PROGRAMS.has(name)) {
478
+ runsClient = true;
479
+ }
480
+ else if (!KEEP_ALIVE_PROGRAMS.has(name) && !SCRIPT_UTILITIES.has(name)) {
481
+ // Anything else, a nested shell or an unreadable word included.
482
+ return "server";
483
+ }
484
+ }
485
+ if (runsCompanion) {
486
+ return "companion";
487
+ }
488
+ return runsClient ? "client" : "keep-alive";
489
+ }
490
+ function roleOfReducedCommand(reduced) {
491
+ // A gap (null) ends what can be trusted about the command line.
492
+ const words = [];
493
+ for (const word of reduced) {
494
+ if (typeof word !== "string") {
495
+ break;
496
+ }
497
+ words.push(word);
498
+ }
499
+ if (words.length === 0) {
500
+ // Neither command nor args: the image's entrypoint, i.e. the server.
501
+ return "server";
502
+ }
503
+ const program = baseName(words[0]);
504
+ if (!SHELL_PROGRAMS.has(program)) {
505
+ if (COMPANION_PROGRAMS.has(program) ||
506
+ (SENTINEL_CAPABLE_SERVERS.has(program) && words.includes(SENTINEL_FLAG))) {
507
+ return "companion";
508
+ }
509
+ if (CLIENT_PROGRAMS.has(program)) {
510
+ return "client";
511
+ }
512
+ if (KEEP_ALIVE_PROGRAMS.has(program) || SCRIPT_UTILITIES.has(program)) {
513
+ return "keep-alive";
514
+ }
515
+ return "server";
516
+ }
517
+ // A shell: walk its flags to its operand.
518
+ let runsScript = false;
519
+ let index = 1;
520
+ while (index < words.length) {
521
+ const word = words[index];
522
+ if (word === "--" || word === "-") {
523
+ index++;
524
+ break;
525
+ }
526
+ if (!SHELL_OPTION_REGEX.test(word)) {
527
+ break;
528
+ }
529
+ if (SCRIPT_FLAG_REGEX.test(word)) {
530
+ runsScript = true;
531
+ }
532
+ index += VALUED_FLAG_REGEX.test(word) ? 2 : 1;
533
+ }
534
+ const operand = words[index];
535
+ if (operand === undefined) {
536
+ // `bash`, `sh -i` are interactive; `sh -c` with its script lost is unreadable.
537
+ return runsScript ? "server" : "keep-alive";
538
+ }
539
+ if (!runsScript) {
540
+ // A script FILE: whatever it starts cannot be read here.
541
+ return "server";
542
+ }
543
+ return roleOfScript(operand);
544
+ }
545
+ /**
546
+ * What a Kubernetes container runs, from its `command` and `args` — a full
547
+ * spec's or the reduction CANDIDATE_PODS_SQL projects (pass that as
548
+ * `command`). See the file header for the rules.
549
+ */
550
+ export function classifyContainerCommand(container) {
551
+ const command = container === null || container === void 0 ? void 0 : container.command;
552
+ const args = container === null || container === void 0 ? void 0 : container.args;
553
+ const argv = [
554
+ ...(Array.isArray(command) ? command : []),
555
+ ...(Array.isArray(args) ? args : []),
556
+ ];
557
+ return roleOfReducedCommand(reduceContainerCommand(argv));
558
+ }
559
+ // True when the container is proven to run a client, keep-alive or Sentinel — not a server.
560
+ export function isNonServerCommand(container) {
561
+ return classifyContainerCommand(container) !== "server";
562
+ }
563
+ // ---- the Postgres twin ------------------------------------------------------
564
+ // A dollar-quoted literal: read verbatim whatever standard_conforming_strings is.
565
+ function sqlLiteral(value) {
566
+ if (value.includes("$re$")) {
567
+ throw new Error("a projection literal cannot contain its own quote tag");
568
+ }
569
+ return `$re$${value}$re$`;
570
+ }
571
+ function sqlTextArray(values) {
572
+ return `ARRAY[${values.map(sqlLiteral).join(", ")}]::text[]`;
573
+ }
574
+ /**
575
+ * The Postgres expression reduceContainerCommand is the twin of: a jsonb
576
+ * array computed from `argv` (a SQL expression for the jsonb array
577
+ * `command || args`), with `knownWords` (a SQL expression for a text[]
578
+ * holding CONTAINER_COMMAND_KNOWN_WORDS) deciding which command names may
579
+ * leave as themselves.
580
+ */
581
+ export function containerCommandProjectionSql(data) {
582
+ const argv = data.argv;
583
+ const launcherName = `lower(regexp_replace(substring(lw.word from ${sqlLiteral(PROGRAM_SOURCE)}), '^.*/', ''))`;
584
+ // unwrapLaunchers' twin: the argv from the program a chain of launchers starts.
585
+ return `(
586
+ SELECT ${programCommandProjectionSql({
587
+ argv: "lu.argv",
588
+ knownWords: data.knownWords,
589
+ })}
590
+ FROM (
591
+ SELECT CASE
592
+ WHEN lf.position = 1 THEN ${argv}
593
+ WHEN lf.position IS NULL OR lf.kind IN ('flag', 'assignment')
594
+ THEN jsonb_build_array(${argv} -> 0)
595
+ ELSE (
596
+ SELECT jsonb_agg(le.value ORDER BY le.position)
597
+ FROM jsonb_array_elements(${argv}) WITH ORDINALITY AS le(value, position)
598
+ WHERE le.position >= lf.position
599
+ )
600
+ END AS argv
601
+ FROM (SELECT 1) AS lone
602
+ LEFT JOIN LATERAL (
603
+ SELECT lk.position, lk.kind
604
+ FROM (
605
+ SELECT lc.position, lc.kind,
606
+ lag(lc.kind) OVER (ORDER BY lc.position) AS previous
607
+ FROM (
608
+ SELECT lw.position,
609
+ CASE
610
+ WHEN lw.word ~ ${sqlLiteral(FLAG_WORD_SOURCE)} THEN 'flag'
611
+ WHEN lw.word ~ ${sqlLiteral(ASSIGNMENT_WORD_SOURCE)} THEN 'assignment'
612
+ WHEN ${launcherName} = ANY(${sqlTextArray(WRAPPER_PROGRAMS)}) THEN 'wrapper'
613
+ WHEN ${launcherName} = ANY(${sqlTextArray(ENTRYPOINT_PROGRAMS)}) THEN 'entrypoint'
614
+ ELSE 'other'
615
+ END AS kind
616
+ FROM jsonb_array_elements_text(${argv}) WITH ORDINALITY AS lw(word, position)
617
+ WHERE lw.position <= ${MAX_WRAPPER_WORDS + 1}
618
+ ) AS lc
619
+ ) AS lk
620
+ WHERE NOT (
621
+ lk.kind IN ('wrapper', 'entrypoint')
622
+ OR (
623
+ lk.kind IN ('flag', 'assignment')
624
+ AND COALESCE(lk.previous IN ('wrapper', 'flag', 'assignment'), false)
625
+ )
626
+ )
627
+ ORDER BY lk.position
628
+ LIMIT 1
629
+ ) AS lf ON true
630
+ ) AS lu
631
+ )`;
632
+ }
633
+ // reduceProgramCommand's twin: `argv` has no launcher in front any more.
634
+ function programCommandProjectionSql(data) {
635
+ const argv = data.argv;
636
+ const cleanedScript = [
637
+ [LINE_CONTINUATION_SOURCE, " "],
638
+ [ESCAPED_CHARACTER_SOURCE, "?"],
639
+ [COMMENT_SOURCE, "\\1\\2"],
640
+ [QUOTED_SOURCE, "?"],
641
+ [REDIRECTION_SOURCE, " "],
642
+ [ASSIGNMENT_SOURCE, "\\1"],
643
+ ].reduce((expression, step) => {
644
+ return `regexp_replace(${expression}, ${sqlLiteral(step[0])}, ${sqlLiteral(step[1])}, 'g')`;
645
+ }, "w.word");
646
+ return `(
647
+ SELECT CASE
648
+ WHEN p.program IS NULL THEN '[]'::jsonb
649
+ WHEN p.program !~* ${sqlLiteral(SHELL_PROGRAM_SOURCE)}
650
+ THEN jsonb_build_array(p.program)
651
+ || CASE WHEN ${argv} ? '${SENTINEL_FLAG}'
652
+ THEN '["${SENTINEL_FLAG}"]'::jsonb ELSE '[]'::jsonb END
653
+ ELSE jsonb_build_array(p.program)
654
+ || COALESCE((
655
+ SELECT jsonb_agg(
656
+ CASE
657
+ WHEN w.word IS NULL THEN NULL
658
+ WHEN w.word ~ ${sqlLiteral(SHELL_OPTION_SOURCE)} THEN w.word
659
+ WHEN length(w.word) > ${MAX_SCRIPT_CHARACTERS} THEN '${UNKNOWN_WORD}'
660
+ ELSE COALESCE((
661
+ SELECT string_agg(DISTINCT n.name COLLATE "C", chr(10) ORDER BY n.name COLLATE "C")
662
+ FROM (
663
+ SELECT CASE
664
+ WHEN b.name = ANY(${data.knownWords}) THEN b.name
665
+ ELSE '${UNKNOWN_WORD}'
666
+ END AS name
667
+ FROM regexp_matches(
668
+ ${cleanedScript},
669
+ ${sqlLiteral(COMMAND_WORD_SOURCE)},
670
+ 'g'
671
+ ) AS m(parts)
672
+ CROSS JOIN LATERAL (
673
+ SELECT lower(regexp_replace(m.parts[1], '^.*/', '')) AS name
674
+ ) AS b
675
+ ) AS n
676
+ ), '')
677
+ END
678
+ ORDER BY w.position
679
+ )
680
+ FROM jsonb_array_elements_text(${argv}) WITH ORDINALITY AS w(word, position)
681
+ WHERE w.position BETWEEN 2 AND ${MAX_SHELL_ARGUMENTS + 1}
682
+ ), '[]'::jsonb)
683
+ || CASE WHEN jsonb_array_length(${argv}) > ${MAX_SHELL_ARGUMENTS + 1}
684
+ THEN '["${UNKNOWN_WORD}"]'::jsonb ELSE '[]'::jsonb END
685
+ END
686
+ FROM (
687
+ SELECT substring(${argv} ->> 0 from ${sqlLiteral(PROGRAM_SOURCE)}) AS program
688
+ ) AS p
689
+ )`;
690
+ }
691
+ //# sourceMappingURL=DatabaseContainerCommand.js.map