@oneuptime/common 11.0.2 → 11.0.4

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 (498) hide show
  1. package/Models/DatabaseModels/Alert.ts +166 -0
  2. package/Models/DatabaseModels/AlertLabelRule.ts +38 -0
  3. package/Models/DatabaseModels/AlertOwnerRule.ts +38 -0
  4. package/Models/DatabaseModels/DockerSwarmCluster.ts +989 -0
  5. package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +514 -0
  6. package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +596 -0
  7. package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +487 -0
  8. package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +486 -0
  9. package/Models/DatabaseModels/DockerSwarmResource.ts +750 -0
  10. package/Models/DatabaseModels/GlobalConfig.ts +19 -0
  11. package/Models/DatabaseModels/GlobalOidc.ts +351 -0
  12. package/Models/DatabaseModels/GlobalOidcProject.ts +265 -0
  13. package/Models/DatabaseModels/GlobalSso.ts +312 -0
  14. package/Models/DatabaseModels/GlobalSsoProject.ts +268 -0
  15. package/Models/DatabaseModels/Incident.ts +166 -0
  16. package/Models/DatabaseModels/IncidentLabelRule.ts +38 -0
  17. package/Models/DatabaseModels/IncidentOwnerRule.ts +38 -0
  18. package/Models/DatabaseModels/IncidentTemplate.ts +56 -0
  19. package/Models/DatabaseModels/Index.ts +32 -0
  20. package/Models/DatabaseModels/PodmanHost.ts +859 -0
  21. package/Models/DatabaseModels/PodmanHostLabelRule.ts +514 -0
  22. package/Models/DatabaseModels/PodmanHostOwnerRule.ts +596 -0
  23. package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +487 -0
  24. package/Models/DatabaseModels/PodmanHostOwnerUser.ts +486 -0
  25. package/Models/DatabaseModels/PodmanResource.ts +498 -0
  26. package/Models/DatabaseModels/Project.ts +31 -0
  27. package/Models/DatabaseModels/ScheduledMaintenance.ts +110 -0
  28. package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +38 -0
  29. package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +38 -0
  30. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +56 -0
  31. package/Models/DatabaseModels/StatusPage.ts +82 -0
  32. package/Models/DatabaseModels/TelemetryException.ts +2 -0
  33. package/Server/API/DashboardAPI.ts +89 -0
  34. package/Server/API/DockerSwarmResourceAPI.ts +137 -0
  35. package/Server/API/StatusPageAPI.ts +2 -0
  36. package/Server/API/TelemetryAPI.ts +8 -1
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1781750000000-MigrationName.ts +3199 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1782000000000-AddGlobalSsoAndOidc.ts +176 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/1782100000000-AddStatusPageImageAltText.ts +25 -0
  40. package/Server/Infrastructure/Postgres/SchemaMigrations/1782200000000-AddRequireSsoForLoginToGlobalProviders.ts +25 -0
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1782300000000-MoveRequireSsoForLoginToGlobalConfig.ts +38 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1782310000000-MigrationName.ts +299 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1782400000000-RemoveIsTestedFromGlobalSsoAndOidc.ts +21 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +14 -0
  45. package/Server/Middleware/UserAuthorization.ts +113 -42
  46. package/Server/Services/AlertLabelRuleEngineService.ts +29 -0
  47. package/Server/Services/AlertOwnerRuleEngineService.ts +67 -0
  48. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +214 -0
  49. package/Server/Services/DockerSwarmClusterLabelRuleService.ts +14 -0
  50. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +232 -0
  51. package/Server/Services/DockerSwarmClusterOwnerRuleService.ts +14 -0
  52. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +10 -0
  53. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +10 -0
  54. package/Server/Services/DockerSwarmClusterService.ts +404 -0
  55. package/Server/Services/DockerSwarmResourceService.ts +381 -0
  56. package/Server/Services/ExceptionAggregationService.ts +1 -0
  57. package/Server/Services/GlobalConfigService.ts +50 -0
  58. package/Server/Services/GlobalOidcProjectService.ts +85 -0
  59. package/Server/Services/GlobalOidcService.ts +10 -0
  60. package/Server/Services/GlobalSsoProjectService.ts +85 -0
  61. package/Server/Services/GlobalSsoService.ts +10 -0
  62. package/Server/Services/IncidentLabelRuleEngineService.ts +27 -0
  63. package/Server/Services/IncidentOwnerRuleEngineService.ts +67 -0
  64. package/Server/Services/IncidentService.ts +11 -0
  65. package/Server/Services/Index.ts +22 -0
  66. package/Server/Services/LogAggregationService.ts +1 -0
  67. package/Server/Services/MetricAggregationService.ts +1 -0
  68. package/Server/Services/OpenTelemetryIngestService.ts +37 -0
  69. package/Server/Services/PodmanHostLabelRuleEngineService.ts +198 -0
  70. package/Server/Services/PodmanHostLabelRuleService.ts +14 -0
  71. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +216 -0
  72. package/Server/Services/PodmanHostOwnerRuleService.ts +14 -0
  73. package/Server/Services/PodmanHostOwnerTeamService.ts +10 -0
  74. package/Server/Services/PodmanHostOwnerUserService.ts +10 -0
  75. package/Server/Services/PodmanHostService.ts +368 -0
  76. package/Server/Services/PodmanResourceService.ts +310 -0
  77. package/Server/Services/ProjectService.ts +44 -1
  78. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +29 -0
  79. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +67 -0
  80. package/Server/Services/TelemetryUsageBillingService.ts +18 -0
  81. package/Server/Services/TraceAggregationService.ts +1 -0
  82. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +13 -0
  83. package/Server/Utils/Cookie.ts +39 -5
  84. package/Server/Utils/JsonWebToken.ts +7 -0
  85. package/Server/Utils/Monitor/MonitorAlert.ts +10 -0
  86. package/Server/Utils/Monitor/MonitorClusterContext.ts +35 -6
  87. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +306 -0
  88. package/Server/Utils/Monitor/MonitorIncident.ts +45 -0
  89. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +17 -0
  90. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +3 -0
  91. package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
  92. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +49 -0
  93. package/Server/Utils/Telemetry/Telemetry.ts +10 -0
  94. package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -0
  95. package/Server/Utils/ValidateGlobalProviderProjectTeams.ts +119 -0
  96. package/Tests/Server/Middleware/UserAuthorization.test.ts +51 -13
  97. package/Tests/Server/Middleware/UserAuthorizationSSOProvider.test.ts +163 -0
  98. package/Tests/Server/Utils/CookieSSOToken.test.ts +130 -0
  99. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +1 -0
  100. package/Tests/Types/DockerSwarm/DockerSwarmInventoryExtractor.test.ts +667 -0
  101. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +528 -0
  102. package/Types/Dashboard/DashboardComponentType.ts +7 -0
  103. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
  104. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.ts +17 -0
  105. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.ts +17 -0
  106. package/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.ts +16 -0
  107. package/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.ts +15 -0
  108. package/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.ts +16 -0
  109. package/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.ts +15 -0
  110. package/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.ts +15 -0
  111. package/Types/Dashboard/DashboardTemplates.ts +194 -0
  112. package/Types/DockerSwarm/DockerSwarmInventoryExtractor.ts +452 -0
  113. package/Types/Icon/IconProp.ts +1 -0
  114. package/Types/JsonWebTokenData.ts +3 -0
  115. package/Types/Monitor/DockerSwarmAlertTemplates.ts +461 -0
  116. package/Types/Monitor/DockerSwarmMetricCatalog.ts +139 -0
  117. package/Types/Monitor/HostAlertTemplates.ts +455 -0
  118. package/Types/Monitor/HostMetricCatalog.ts +177 -0
  119. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +21 -0
  120. package/Types/Monitor/MonitorStep.ts +99 -0
  121. package/Types/Monitor/MonitorStepDockerSwarmMonitor.ts +74 -0
  122. package/Types/Monitor/MonitorStepHostMonitor.ts +30 -0
  123. package/Types/Monitor/MonitorStepPodmanMonitor.ts +38 -0
  124. package/Types/Monitor/MonitorType.ts +42 -0
  125. package/Types/Monitor/PodmanAlertTemplates.ts +507 -0
  126. package/Types/Monitor/PodmanMetricCatalog.ts +226 -0
  127. package/Types/Permission.ts +465 -4
  128. package/Types/Podman/PodmanInventoryExtractor.ts +343 -0
  129. package/Types/SSO/SsoProviderType.ts +8 -0
  130. package/Types/Telemetry/EntityType.ts +12 -0
  131. package/Types/Telemetry/ServiceType.ts +2 -0
  132. package/UI/Components/Accordion/Accordion.tsx +5 -1
  133. package/UI/Components/CardSelect/CardSelect.tsx +6 -1
  134. package/UI/Components/CategoryCheckbox/Index.tsx +2 -1
  135. package/UI/Components/CodeEditor/CodeEditor.tsx +2 -0
  136. package/UI/Components/CollapsibleSection/CollapsibleSection.tsx +8 -1
  137. package/UI/Components/Dropdown/Dropdown.tsx +2 -0
  138. package/UI/Components/EntityDropdown/EntityDropdown.tsx +3 -0
  139. package/UI/Components/FilePicker/FilePicker.tsx +2 -0
  140. package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -0
  141. package/UI/Components/Forms/Fields/FieldLabel.tsx +4 -0
  142. package/UI/Components/Forms/Fields/FormField.tsx +72 -15
  143. package/UI/Components/Forms/Fields/IconPicker.tsx +2 -0
  144. package/UI/Components/Forms/Validation.ts +107 -23
  145. package/UI/Components/Icon/Icon.tsx +57 -0
  146. package/UI/Components/Input/Input.tsx +4 -0
  147. package/UI/Components/Link/Link.tsx +23 -0
  148. package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
  149. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
  150. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  151. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +3 -0
  152. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +63 -2
  153. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +6 -0
  154. package/UI/Components/Radio/Radio.tsx +2 -0
  155. package/UI/Components/RadioButtons/GroupRadioButtons.tsx +6 -1
  156. package/UI/Components/Tabs/Tabs.tsx +63 -0
  157. package/UI/Components/TextArea/TextArea.tsx +2 -0
  158. package/UI/Components/TimePicker/TimePicker.tsx +2 -0
  159. package/UI/Components/Toggle/Toggle.tsx +2 -1
  160. package/UI/Components/Tooltip/Tooltip.tsx +6 -1
  161. package/UI/Utils/TelemetryService.ts +1 -0
  162. package/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.ts +70 -0
  163. package/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.ts +61 -0
  164. package/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.ts +71 -0
  165. package/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.ts +100 -0
  166. package/Utils/Dashboard/Components/DashboardPodmanHostListComponent.ts +88 -0
  167. package/Utils/Dashboard/Components/DashboardPodmanImageListComponent.ts +97 -0
  168. package/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.ts +87 -0
  169. package/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.ts +87 -0
  170. package/Utils/Dashboard/Components/Index.ts +51 -0
  171. package/Utils/Telemetry/EntityKey.ts +18 -0
  172. package/build/dist/Models/DatabaseModels/Alert.js +162 -0
  173. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  174. package/build/dist/Models/DatabaseModels/AlertLabelRule.js +39 -0
  175. package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
  176. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +39 -0
  177. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
  178. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +1018 -0
  179. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -0
  180. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +522 -0
  181. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -0
  182. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +603 -0
  183. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -0
  184. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +503 -0
  185. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -0
  186. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +502 -0
  187. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -0
  188. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js +787 -0
  189. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js.map +1 -0
  190. package/build/dist/Models/DatabaseModels/GlobalConfig.js +20 -0
  191. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  192. package/build/dist/Models/DatabaseModels/GlobalOidc.js +379 -0
  193. package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -0
  194. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +276 -0
  195. package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -0
  196. package/build/dist/Models/DatabaseModels/GlobalSso.js +341 -0
  197. package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -0
  198. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +279 -0
  199. package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -0
  200. package/build/dist/Models/DatabaseModels/Incident.js +162 -0
  201. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  202. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +39 -0
  203. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
  204. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +39 -0
  205. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
  206. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +54 -0
  207. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  208. package/build/dist/Models/DatabaseModels/Index.js +32 -0
  209. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  210. package/build/dist/Models/DatabaseModels/PodmanHost.js +885 -0
  211. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -0
  212. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +522 -0
  213. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -0
  214. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +603 -0
  215. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -0
  216. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +503 -0
  217. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -0
  218. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +502 -0
  219. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -0
  220. package/build/dist/Models/DatabaseModels/PodmanResource.js +526 -0
  221. package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -0
  222. package/build/dist/Models/DatabaseModels/Project.js +32 -0
  223. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  224. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +108 -0
  225. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  226. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +39 -0
  227. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
  228. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +39 -0
  229. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
  230. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +54 -0
  231. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  232. package/build/dist/Models/DatabaseModels/StatusPage.js +84 -0
  233. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  234. package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
  235. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  236. package/build/dist/Server/API/DashboardAPI.js +89 -0
  237. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  238. package/build/dist/Server/API/DockerSwarmResourceAPI.js +100 -0
  239. package/build/dist/Server/API/DockerSwarmResourceAPI.js.map +1 -0
  240. package/build/dist/Server/API/StatusPageAPI.js +2 -0
  241. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  242. package/build/dist/Server/API/TelemetryAPI.js +8 -1
  243. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  244. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781750000000-MigrationName.js +1100 -0
  245. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781750000000-MigrationName.js.map +1 -0
  246. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782000000000-AddGlobalSsoAndOidc.js +73 -0
  247. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782000000000-AddGlobalSsoAndOidc.js.map +1 -0
  248. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782100000000-AddStatusPageImageAltText.js +14 -0
  249. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782100000000-AddStatusPageImageAltText.js.map +1 -0
  250. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782200000000-AddRequireSsoForLoginToGlobalProviders.js +14 -0
  251. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782200000000-AddRequireSsoForLoginToGlobalProviders.js.map +1 -0
  252. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782300000000-MoveRequireSsoForLoginToGlobalConfig.js +23 -0
  253. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782300000000-MoveRequireSsoForLoginToGlobalConfig.js.map +1 -0
  254. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782310000000-MigrationName.js +106 -0
  255. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782310000000-MigrationName.js.map +1 -0
  256. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782400000000-RemoveIsTestedFromGlobalSsoAndOidc.js +14 -0
  257. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782400000000-RemoveIsTestedFromGlobalSsoAndOidc.js.map +1 -0
  258. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +14 -0
  259. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  260. package/build/dist/Server/Middleware/UserAuthorization.js +77 -34
  261. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  262. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +30 -4
  263. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  264. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +62 -5
  265. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  266. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +168 -0
  267. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -0
  268. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js +13 -0
  269. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js.map +1 -0
  270. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +188 -0
  271. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -0
  272. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js +13 -0
  273. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js.map +1 -0
  274. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +9 -0
  275. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -0
  276. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +9 -0
  277. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -0
  278. package/build/dist/Server/Services/DockerSwarmClusterService.js +353 -0
  279. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -0
  280. package/build/dist/Server/Services/DockerSwarmResourceService.js +258 -0
  281. package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -0
  282. package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
  283. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  284. package/build/dist/Server/Services/GlobalConfigService.js +55 -0
  285. package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
  286. package/build/dist/Server/Services/GlobalOidcProjectService.js +80 -0
  287. package/build/dist/Server/Services/GlobalOidcProjectService.js.map +1 -0
  288. package/build/dist/Server/Services/GlobalOidcService.js +9 -0
  289. package/build/dist/Server/Services/GlobalOidcService.js.map +1 -0
  290. package/build/dist/Server/Services/GlobalSsoProjectService.js +80 -0
  291. package/build/dist/Server/Services/GlobalSsoProjectService.js.map +1 -0
  292. package/build/dist/Server/Services/GlobalSsoService.js +9 -0
  293. package/build/dist/Server/Services/GlobalSsoService.js.map +1 -0
  294. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +28 -4
  295. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  296. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +62 -5
  297. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  298. package/build/dist/Server/Services/IncidentService.js +8 -0
  299. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  300. package/build/dist/Server/Services/Index.js +22 -0
  301. package/build/dist/Server/Services/Index.js.map +1 -1
  302. package/build/dist/Server/Services/LogAggregationService.js +1 -0
  303. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  304. package/build/dist/Server/Services/MetricAggregationService.js +1 -0
  305. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  306. package/build/dist/Server/Services/OpenTelemetryIngestService.js +43 -13
  307. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  308. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +166 -0
  309. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -0
  310. package/build/dist/Server/Services/PodmanHostLabelRuleService.js +13 -0
  311. package/build/dist/Server/Services/PodmanHostLabelRuleService.js.map +1 -0
  312. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +186 -0
  313. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -0
  314. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js +13 -0
  315. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js.map +1 -0
  316. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +9 -0
  317. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -0
  318. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +9 -0
  319. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -0
  320. package/build/dist/Server/Services/PodmanHostService.js +319 -0
  321. package/build/dist/Server/Services/PodmanHostService.js.map +1 -0
  322. package/build/dist/Server/Services/PodmanResourceService.js +196 -0
  323. package/build/dist/Server/Services/PodmanResourceService.js.map +1 -0
  324. package/build/dist/Server/Services/ProjectService.js +36 -1
  325. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  326. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +30 -4
  327. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  328. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +62 -5
  329. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  330. package/build/dist/Server/Services/TelemetryUsageBillingService.js +13 -0
  331. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  332. package/build/dist/Server/Services/TraceAggregationService.js +1 -0
  333. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  334. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +13 -0
  335. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  336. package/build/dist/Server/Utils/Cookie.js +32 -3
  337. package/build/dist/Server/Utils/Cookie.js.map +1 -1
  338. package/build/dist/Server/Utils/JsonWebToken.js +6 -0
  339. package/build/dist/Server/Utils/JsonWebToken.js.map +1 -1
  340. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +8 -0
  341. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  342. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +35 -7
  343. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -1
  344. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +194 -0
  345. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  346. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +35 -1
  347. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  348. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +9 -0
  349. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  350. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +3 -0
  351. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  352. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +16 -0
  353. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  354. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +30 -0
  355. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  356. package/build/dist/Server/Utils/Telemetry/Telemetry.js +6 -0
  357. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  358. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +18 -0
  359. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  360. package/build/dist/Server/Utils/ValidateGlobalProviderProjectTeams.js +66 -0
  361. package/build/dist/Server/Utils/ValidateGlobalProviderProjectTeams.js.map +1 -0
  362. package/build/dist/Types/Dashboard/DashboardComponentType.js +7 -0
  363. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  364. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
  365. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  366. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js +2 -0
  367. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  368. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js +2 -0
  369. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  370. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js +2 -0
  371. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js.map +1 -0
  372. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js +2 -0
  373. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js.map +1 -0
  374. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js +2 -0
  375. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js.map +1 -0
  376. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js +2 -0
  377. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js.map +1 -0
  378. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js +2 -0
  379. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js.map +1 -0
  380. package/build/dist/Types/Dashboard/DashboardTemplates.js +168 -0
  381. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  382. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js +359 -0
  383. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js.map +1 -0
  384. package/build/dist/Types/Icon/IconProp.js +1 -0
  385. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  386. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +358 -0
  387. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -0
  388. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js +103 -0
  389. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js.map +1 -0
  390. package/build/dist/Types/Monitor/HostAlertTemplates.js +365 -0
  391. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -0
  392. package/build/dist/Types/Monitor/HostMetricCatalog.js +138 -0
  393. package/build/dist/Types/Monitor/HostMetricCatalog.js.map +1 -0
  394. package/build/dist/Types/Monitor/MonitorStep.js +69 -0
  395. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  396. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js +21 -0
  397. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js.map +1 -0
  398. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js +20 -0
  399. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js.map +1 -0
  400. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js +21 -0
  401. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js.map +1 -0
  402. package/build/dist/Types/Monitor/MonitorType.js +39 -0
  403. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  404. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +410 -0
  405. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -0
  406. package/build/dist/Types/Monitor/PodmanMetricCatalog.js +192 -0
  407. package/build/dist/Types/Monitor/PodmanMetricCatalog.js.map +1 -0
  408. package/build/dist/Types/Permission.js +420 -4
  409. package/build/dist/Types/Permission.js.map +1 -1
  410. package/build/dist/Types/Podman/PodmanInventoryExtractor.js +293 -0
  411. package/build/dist/Types/Podman/PodmanInventoryExtractor.js.map +1 -0
  412. package/build/dist/Types/SSO/SsoProviderType.js +9 -0
  413. package/build/dist/Types/SSO/SsoProviderType.js.map +1 -0
  414. package/build/dist/Types/Telemetry/EntityType.js +12 -0
  415. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  416. package/build/dist/Types/Telemetry/ServiceType.js +2 -0
  417. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  418. package/build/dist/UI/Components/Accordion/Accordion.js +5 -3
  419. package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
  420. package/build/dist/UI/Components/CardSelect/CardSelect.js +1 -1
  421. package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
  422. package/build/dist/UI/Components/CategoryCheckbox/Index.js +1 -1
  423. package/build/dist/UI/Components/CategoryCheckbox/Index.js.map +1 -1
  424. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +1 -1
  425. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  426. package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js +4 -2
  427. package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js.map +1 -1
  428. package/build/dist/UI/Components/Dropdown/Dropdown.js +1 -1
  429. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  430. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +2 -2
  431. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
  432. package/build/dist/UI/Components/FilePicker/FilePicker.js +1 -1
  433. package/build/dist/UI/Components/FilePicker/FilePicker.js.map +1 -1
  434. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
  435. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  436. package/build/dist/UI/Components/Forms/Fields/FieldLabel.js +1 -1
  437. package/build/dist/UI/Components/Forms/Fields/FieldLabel.js.map +1 -1
  438. package/build/dist/UI/Components/Forms/Fields/FormField.js +58 -22
  439. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  440. package/build/dist/UI/Components/Forms/Fields/IconPicker.js +1 -1
  441. package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
  442. package/build/dist/UI/Components/Forms/Validation.js +64 -15
  443. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  444. package/build/dist/UI/Components/Icon/Icon.js +16 -0
  445. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  446. package/build/dist/UI/Components/Input/Input.js +1 -1
  447. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  448. package/build/dist/UI/Components/Link/Link.js +22 -1
  449. package/build/dist/UI/Components/Link/Link.js.map +1 -1
  450. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +30 -2
  451. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  452. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +22 -0
  453. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  454. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  455. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  456. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +2 -2
  457. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  458. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +46 -2
  459. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  460. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +6 -0
  461. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  462. package/build/dist/UI/Components/Radio/Radio.js +1 -1
  463. package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
  464. package/build/dist/UI/Components/RadioButtons/GroupRadioButtons.js +1 -1
  465. package/build/dist/UI/Components/RadioButtons/GroupRadioButtons.js.map +1 -1
  466. package/build/dist/UI/Components/Tabs/Tabs.js +50 -1
  467. package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
  468. package/build/dist/UI/Components/TextArea/TextArea.js +1 -1
  469. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  470. package/build/dist/UI/Components/TimePicker/TimePicker.js +1 -1
  471. package/build/dist/UI/Components/TimePicker/TimePicker.js.map +1 -1
  472. package/build/dist/UI/Components/Toggle/Toggle.js +1 -1
  473. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  474. package/build/dist/UI/Components/Tooltip/Tooltip.js +6 -1
  475. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  476. package/build/dist/UI/Utils/TelemetryService.js +1 -0
  477. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  478. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js +55 -0
  479. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  480. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js +46 -0
  481. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js.map +1 -0
  482. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js +55 -0
  483. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  484. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js +77 -0
  485. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js.map +1 -0
  486. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js +71 -0
  487. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js.map +1 -0
  488. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js +77 -0
  489. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js.map +1 -0
  490. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js +68 -0
  491. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js.map +1 -0
  492. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js +68 -0
  493. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js.map +1 -0
  494. package/build/dist/Utils/Dashboard/Components/Index.js +28 -0
  495. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  496. package/build/dist/Utils/Telemetry/EntityKey.js +14 -0
  497. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  498. package/package.json +1 -1
@@ -18,6 +18,8 @@ import HostOwnerTeamService from "../../../Services/HostOwnerTeamService";
18
18
  import HostOwnerUserService from "../../../Services/HostOwnerUserService";
19
19
  import DockerHostOwnerTeamService from "../../../Services/DockerHostOwnerTeamService";
20
20
  import DockerHostOwnerUserService from "../../../Services/DockerHostOwnerUserService";
21
+ import PodmanHostOwnerTeamService from "../../../Services/PodmanHostOwnerTeamService";
22
+ import PodmanHostOwnerUserService from "../../../Services/PodmanHostOwnerUserService";
21
23
  import KubernetesClusterOwnerTeamService from "../../../Services/KubernetesClusterOwnerTeamService";
22
24
  import KubernetesClusterOwnerUserService from "../../../Services/KubernetesClusterOwnerUserService";
23
25
  import ServerlessFunctionOwnerTeamService from "../../../Services/ServerlessFunctionOwnerTeamService";
@@ -40,6 +42,7 @@ import ServiceService from "../../../Services/ServiceService";
40
42
  import MonitorService from "../../../Services/MonitorService";
41
43
  import HostService from "../../../Services/HostService";
42
44
  import DockerHostService from "../../../Services/DockerHostService";
45
+ import PodmanHostService from "../../../Services/PodmanHostService";
43
46
  import KubernetesClusterService from "../../../Services/KubernetesClusterService";
44
47
  import ServerlessFunctionService from "../../../Services/ServerlessFunctionService";
45
48
  import CloudResourceService from "../../../Services/CloudResourceService";
@@ -180,6 +183,16 @@ const ownerTableRegistry: Map<string, OwnerTablePair> = new Map<
180
183
  modelService: DockerHostService,
181
184
  },
182
185
  ],
186
+ [
187
+ "PodmanHost",
188
+ {
189
+ ownerUserService: PodmanHostOwnerUserService,
190
+ ownerTeamService: PodmanHostOwnerTeamService,
191
+ fkColumn: "podmanHostId",
192
+ canOwnTelemetry: true,
193
+ modelService: PodmanHostService,
194
+ },
195
+ ],
183
196
  [
184
197
  "KubernetesCluster",
185
198
  {
@@ -8,6 +8,7 @@ import StatusPagePrivateUser from "../../Models/DatabaseModels/StatusPagePrivate
8
8
  import OneUptimeDate from "../../Types/Date";
9
9
  import PositiveNumber from "../../Types/PositiveNumber";
10
10
  import CookieName from "../../Types/CookieName";
11
+ import SsoProviderType from "../../Types/SSO/SsoProviderType";
11
12
  import {
12
13
  MASTER_PASSWORD_COOKIE_IDENTIFIER,
13
14
  MASTER_PASSWORD_COOKIE_MAX_AGE_IN_DAYS,
@@ -38,15 +39,24 @@ export default class CookieUtil {
38
39
  return cookies;
39
40
  }
40
41
 
42
+ /*
43
+ * Builds a per-project SSO token. The optional `ssoProviderId` /
44
+ * `ssoProviderType` discriminator records WHICH identity provider issued the
45
+ * token, so a project that enforces SSO can require a specific provider
46
+ * (e.g. its own Project SSO, or an instance-wide Global SSO). Used by both
47
+ * the cookie flow (web) and the deep-link flow (mobile) so the token shape
48
+ * stays identical.
49
+ */
41
50
  @CaptureSpan()
42
- public static setSSOCookie(data: {
51
+ public static getSSOToken(data: {
43
52
  user: User;
44
53
  projectId: ObjectID;
45
- expressResponse: ExpressResponse;
46
- }): void {
47
- const { user, projectId, expressResponse: res } = data;
54
+ ssoProviderId?: ObjectID | undefined;
55
+ ssoProviderType?: SsoProviderType | undefined;
56
+ }): string {
57
+ const { user, projectId } = data;
48
58
 
49
- const ssoToken: string = JSONWebToken.sign({
59
+ return JSONWebToken.sign({
50
60
  data: {
51
61
  userId: user.id!,
52
62
  projectId: projectId,
@@ -54,9 +64,33 @@ export default class CookieUtil {
54
64
  email: user.email,
55
65
  isMasterAdmin: false,
56
66
  isGeneralLogin: false,
67
+ ssoProviderId: data.ssoProviderId
68
+ ? data.ssoProviderId.toString()
69
+ : undefined,
70
+ ssoProviderType: data.ssoProviderType
71
+ ? data.ssoProviderType.toString()
72
+ : undefined,
57
73
  },
58
74
  expiresInSeconds: OneUptimeDate.getSecondsInDays(new PositiveNumber(30)),
59
75
  });
76
+ }
77
+
78
+ @CaptureSpan()
79
+ public static setSSOCookie(data: {
80
+ user: User;
81
+ projectId: ObjectID;
82
+ expressResponse: ExpressResponse;
83
+ ssoProviderId?: ObjectID | undefined;
84
+ ssoProviderType?: SsoProviderType | undefined;
85
+ }): void {
86
+ const { projectId, expressResponse: res } = data;
87
+
88
+ const ssoToken: string = CookieUtil.getSSOToken({
89
+ user: data.user,
90
+ projectId: projectId,
91
+ ssoProviderId: data.ssoProviderId,
92
+ ssoProviderType: data.ssoProviderType,
93
+ });
60
94
 
61
95
  CookieUtil.setCookie(res, CookieUtil.getUserSSOKey(projectId), ssoToken, {
62
96
  maxAge: OneUptimeDate.getMillisecondsInDays(new PositiveNumber(30)),
@@ -6,6 +6,7 @@ import JSONFunctions from "../../Types/JSONFunctions";
6
6
  import JSONWebTokenData from "../../Types/JsonWebTokenData";
7
7
  import Name from "../../Types/Name";
8
8
  import ObjectID from "../../Types/ObjectID";
9
+ import SsoProviderType from "../../Types/SSO/SsoProviderType";
9
10
  import Timezone from "../../Types/Timezone";
10
11
  import StatusPagePrivateUser from "../../Models/DatabaseModels/StatusPagePrivateUser";
11
12
  import User from "../../Models/DatabaseModels/User";
@@ -139,6 +140,12 @@ class JSONWebToken {
139
140
  sessionId: decoded["sessionId"]
140
141
  ? new ObjectID(decoded["sessionId"] as string)
141
142
  : undefined,
143
+ ssoProviderId: decoded["ssoProviderId"]
144
+ ? new ObjectID(decoded["ssoProviderId"] as string)
145
+ : undefined,
146
+ ssoProviderType: decoded["ssoProviderType"]
147
+ ? (decoded["ssoProviderType"] as SsoProviderType)
148
+ : undefined,
142
149
  };
143
150
  } catch (e) {
144
151
  logger.error(e);
@@ -2,6 +2,7 @@ import Alert from "../../../Models/DatabaseModels/Alert";
2
2
  import AlertSeverity from "../../../Models/DatabaseModels/AlertSeverity";
3
3
  import AlertStateTimeline from "../../../Models/DatabaseModels/AlertStateTimeline";
4
4
  import CephCluster from "../../../Models/DatabaseModels/CephCluster";
5
+ import DockerSwarmCluster from "../../../Models/DatabaseModels/DockerSwarmCluster";
5
6
  import Host from "../../../Models/DatabaseModels/Host";
6
7
  import Label from "../../../Models/DatabaseModels/Label";
7
8
  import Monitor from "../../../Models/DatabaseModels/Monitor";
@@ -420,6 +421,15 @@ export default class MonitorAlert {
420
421
  },
421
422
  );
422
423
  }
424
+ if (clusterContext.dockerSwarmClusterIds.length > 0) {
425
+ alert.dockerSwarmClusters = clusterContext.dockerSwarmClusterIds.map(
426
+ (id: string): DockerSwarmCluster => {
427
+ const cluster: DockerSwarmCluster = new DockerSwarmCluster();
428
+ cluster._id = id;
429
+ return cluster;
430
+ },
431
+ );
432
+ }
423
433
 
424
434
  alert.onCallDutyPolicies =
425
435
  criteriaAlert.onCallPolicyIds?.map((id: ObjectID) => {
@@ -1,9 +1,11 @@
1
1
  import CephCluster from "../../../Models/DatabaseModels/CephCluster";
2
+ import DockerSwarmCluster from "../../../Models/DatabaseModels/DockerSwarmCluster";
2
3
  import Monitor from "../../../Models/DatabaseModels/Monitor";
3
4
  import ProxmoxCluster from "../../../Models/DatabaseModels/ProxmoxCluster";
4
5
  import MonitorStep from "../../../Types/Monitor/MonitorStep";
5
6
  import MonitorType from "../../../Types/Monitor/MonitorType";
6
7
  import CephClusterService from "../../Services/CephClusterService";
8
+ import DockerSwarmClusterService from "../../Services/DockerSwarmClusterService";
7
9
  import ProxmoxClusterService from "../../Services/ProxmoxClusterService";
8
10
  import QueryHelper from "../../Types/Database/QueryHelper";
9
11
  import logger from "../Logger";
@@ -23,6 +25,7 @@ import logger from "../Logger";
23
25
  export interface MonitorClusterContext {
24
26
  proxmoxClusterIds: Array<string>;
25
27
  cephClusterIds: Array<string>;
28
+ dockerSwarmClusterIds: Array<string>;
26
29
  }
27
30
 
28
31
  export default class MonitorClusterContextUtil {
@@ -42,13 +45,15 @@ export default class MonitorClusterContextUtil {
42
45
  const context: MonitorClusterContext = {
43
46
  proxmoxClusterIds: [],
44
47
  cephClusterIds: [],
48
+ dockerSwarmClusterIds: [],
45
49
  };
46
50
 
47
51
  const monitorType: MonitorType | undefined = input.monitor.monitorType;
48
52
 
49
53
  if (
50
54
  monitorType !== MonitorType.Proxmox &&
51
- monitorType !== MonitorType.Ceph
55
+ monitorType !== MonitorType.Ceph &&
56
+ monitorType !== MonitorType.DockerSwarm
52
57
  ) {
53
58
  return context;
54
59
  }
@@ -63,10 +68,16 @@ export default class MonitorClusterContextUtil {
63
68
  const clusterIdentifiers: Set<string> = new Set<string>();
64
69
 
65
70
  for (const monitorStep of monitorSteps) {
66
- const clusterIdentifier: string | undefined =
67
- monitorType === MonitorType.Proxmox
68
- ? monitorStep.data?.proxmoxMonitor?.clusterIdentifier
69
- : monitorStep.data?.cephMonitor?.clusterIdentifier;
71
+ let clusterIdentifier: string | undefined = undefined;
72
+
73
+ if (monitorType === MonitorType.Proxmox) {
74
+ clusterIdentifier = monitorStep.data?.proxmoxMonitor?.clusterIdentifier;
75
+ } else if (monitorType === MonitorType.Ceph) {
76
+ clusterIdentifier = monitorStep.data?.cephMonitor?.clusterIdentifier;
77
+ } else if (monitorType === MonitorType.DockerSwarm) {
78
+ clusterIdentifier =
79
+ monitorStep.data?.dockerSwarmMonitor?.clusterIdentifier;
80
+ }
70
81
 
71
82
  if (clusterIdentifier && clusterIdentifier.trim().length > 0) {
72
83
  clusterIdentifiers.add(clusterIdentifier.trim());
@@ -98,7 +109,7 @@ export default class MonitorClusterContextUtil {
98
109
  if (proxmoxCluster?._id) {
99
110
  context.proxmoxClusterIds.push(String(proxmoxCluster._id));
100
111
  }
101
- } else {
112
+ } else if (monitorType === MonitorType.Ceph) {
102
113
  const cephCluster: CephCluster | null =
103
114
  await CephClusterService.findOneBy({
104
115
  query: {
@@ -116,6 +127,24 @@ export default class MonitorClusterContextUtil {
116
127
  if (cephCluster?._id) {
117
128
  context.cephClusterIds.push(String(cephCluster._id));
118
129
  }
130
+ } else {
131
+ const dockerSwarmCluster: DockerSwarmCluster | null =
132
+ await DockerSwarmClusterService.findOneBy({
133
+ query: {
134
+ projectId: input.monitor.projectId,
135
+ name: QueryHelper.findWithSameText(clusterIdentifier),
136
+ },
137
+ select: {
138
+ _id: true,
139
+ },
140
+ props: {
141
+ isRoot: true,
142
+ },
143
+ });
144
+
145
+ if (dockerSwarmCluster?._id) {
146
+ context.dockerSwarmClusterIds.push(String(dockerSwarmCluster._id));
147
+ }
119
148
  }
120
149
  } catch (err) {
121
150
  logger.error(
@@ -58,6 +58,8 @@ import MetricMonitorResponse, {
58
58
  ProxmoxResourceBreakdown,
59
59
  CephAffectedResource,
60
60
  CephResourceBreakdown,
61
+ DockerSwarmAffectedResource,
62
+ DockerSwarmResourceBreakdown,
61
63
  } from "../../../Types/Monitor/MetricMonitor/MetricMonitorResponse";
62
64
  import MetricSeriesResult from "../../../Types/Monitor/MetricMonitor/MetricSeriesResult";
63
65
  import MetricCriteriaContext, {
@@ -66,8 +68,11 @@ import MetricCriteriaContext, {
66
68
  MetricComponentValue,
67
69
  } from "../../../Types/Monitor/MetricMonitor/MetricCriteriaContext";
68
70
  import MonitorStepDockerMonitor from "../../../Types/Monitor/MonitorStepDockerMonitor";
71
+ import MonitorStepHostMonitor from "../../../Types/Monitor/MonitorStepHostMonitor";
72
+ import MonitorStepPodmanMonitor from "../../../Types/Monitor/MonitorStepPodmanMonitor";
69
73
  import MonitorStepProxmoxMonitor from "../../../Types/Monitor/MonitorStepProxmoxMonitor";
70
74
  import MonitorStepCephMonitor from "../../../Types/Monitor/MonitorStepCephMonitor";
75
+ import MonitorStepDockerSwarmMonitor from "../../../Types/Monitor/MonitorStepDockerSwarmMonitor";
71
76
 
72
77
  export default class MonitorCriteriaEvaluator {
73
78
  public static async processMonitorStep(input: {
@@ -237,6 +242,9 @@ ${contextBlock}
237
242
  input.monitor.monitorType !== MonitorType.Metrics &&
238
243
  input.monitor.monitorType !== MonitorType.Kubernetes &&
239
244
  input.monitor.monitorType !== MonitorType.Docker &&
245
+ input.monitor.monitorType !== MonitorType.Host &&
246
+ input.monitor.monitorType !== MonitorType.Podman &&
247
+ input.monitor.monitorType !== MonitorType.DockerSwarm &&
240
248
  input.monitor.monitorType !== MonitorType.Proxmox &&
241
249
  input.monitor.monitorType !== MonitorType.Ceph
242
250
  ) {
@@ -685,6 +693,9 @@ ${contextBlock}
685
693
  input.monitor.monitorType === MonitorType.Metrics ||
686
694
  input.monitor.monitorType === MonitorType.Kubernetes ||
687
695
  input.monitor.monitorType === MonitorType.Docker ||
696
+ input.monitor.monitorType === MonitorType.Host ||
697
+ input.monitor.monitorType === MonitorType.Podman ||
698
+ input.monitor.monitorType === MonitorType.DockerSwarm ||
688
699
  input.monitor.monitorType === MonitorType.Proxmox ||
689
700
  input.monitor.monitorType === MonitorType.Ceph
690
701
  ) {
@@ -819,11 +830,26 @@ ${contextBlock}
819
830
  return MonitorCriteriaEvaluator.buildDockerRootCauseContext(input);
820
831
  }
821
832
 
833
+ // Handle Host monitors with resource context
834
+ if (input.monitor.monitorType === MonitorType.Host) {
835
+ return MonitorCriteriaEvaluator.buildHostRootCauseContext(input);
836
+ }
837
+
838
+ // Handle Podman monitors with resource context
839
+ if (input.monitor.monitorType === MonitorType.Podman) {
840
+ return MonitorCriteriaEvaluator.buildPodmanRootCauseContext(input);
841
+ }
842
+
822
843
  // Handle Proxmox monitors with resource context
823
844
  if (input.monitor.monitorType === MonitorType.Proxmox) {
824
845
  return MonitorCriteriaEvaluator.buildProxmoxRootCauseContext(input);
825
846
  }
826
847
 
848
+ // Handle Docker Swarm monitors with resource context
849
+ if (input.monitor.monitorType === MonitorType.DockerSwarm) {
850
+ return MonitorCriteriaEvaluator.buildDockerSwarmRootCauseContext(input);
851
+ }
852
+
827
853
  // Handle Ceph monitors with resource context
828
854
  if (input.monitor.monitorType === MonitorType.Ceph) {
829
855
  return MonitorCriteriaEvaluator.buildCephRootCauseContext(input);
@@ -1593,6 +1619,124 @@ ${contextBlock}
1593
1619
  return sections.length > 0 ? sections.join("\n") : null;
1594
1620
  }
1595
1621
 
1622
+ private static buildHostRootCauseContext(input: {
1623
+ dataToProcess: DataToProcess;
1624
+ monitorStep: MonitorStep;
1625
+ monitor: Monitor;
1626
+ }): string | null {
1627
+ const metricResponse: MetricMonitorResponse =
1628
+ input.dataToProcess as MetricMonitorResponse;
1629
+
1630
+ const sections: Array<string> = [];
1631
+
1632
+ // Host context
1633
+ const hostMonitor: MonitorStepHostMonitor | undefined =
1634
+ input.monitorStep.data?.hostMonitor;
1635
+
1636
+ if (hostMonitor) {
1637
+ const hostDetails: Array<string> = [];
1638
+ hostDetails.push(`- Host: ${hostMonitor.hostIdentifier || "Unknown"}`);
1639
+
1640
+ // Add metric name from the query config
1641
+ if (
1642
+ hostMonitor.metricViewConfig?.queryConfigs?.length > 0 &&
1643
+ hostMonitor.metricViewConfig.queryConfigs[0]
1644
+ ) {
1645
+ const metricName: string = hostMonitor.metricViewConfig.queryConfigs[0]
1646
+ .metricQueryData?.filterData?.metricName as string;
1647
+ if (metricName) {
1648
+ hostDetails.push(`- Metric: \`${metricName}\``);
1649
+ }
1650
+ }
1651
+
1652
+ sections.push(`**Host Details**\n${hostDetails.join("\n")}`);
1653
+ }
1654
+
1655
+ // Metric results summary
1656
+ if (metricResponse.metricResult && metricResponse.metricResult.length > 0) {
1657
+ const resultDetails: Array<string> = [];
1658
+
1659
+ for (const result of metricResponse.metricResult) {
1660
+ if (result.data && result.data.length > 0) {
1661
+ resultDetails.push(
1662
+ `- ${result.data.length} metric data point(s) returned`,
1663
+ );
1664
+ }
1665
+ }
1666
+
1667
+ if (resultDetails.length > 0) {
1668
+ sections.push(`\n\n**Metric Summary**\n${resultDetails.join("\n")}`);
1669
+ }
1670
+ }
1671
+
1672
+ return sections.length > 0 ? sections.join("\n") : null;
1673
+ }
1674
+
1675
+ private static buildPodmanRootCauseContext(input: {
1676
+ dataToProcess: DataToProcess;
1677
+ monitorStep: MonitorStep;
1678
+ monitor: Monitor;
1679
+ }): string | null {
1680
+ const metricResponse: MetricMonitorResponse =
1681
+ input.dataToProcess as MetricMonitorResponse;
1682
+
1683
+ const sections: Array<string> = [];
1684
+
1685
+ // Podman host context
1686
+ const podmanMonitor: MonitorStepPodmanMonitor | undefined =
1687
+ input.monitorStep.data?.podmanMonitor;
1688
+
1689
+ if (podmanMonitor) {
1690
+ const hostDetails: Array<string> = [];
1691
+ hostDetails.push(`- Host: ${podmanMonitor.hostIdentifier || "Unknown"}`);
1692
+
1693
+ if (podmanMonitor.containerFilters?.containerName) {
1694
+ hostDetails.push(
1695
+ `- Container Name Filter: ${podmanMonitor.containerFilters.containerName}`,
1696
+ );
1697
+ }
1698
+
1699
+ if (podmanMonitor.containerFilters?.containerImage) {
1700
+ hostDetails.push(
1701
+ `- Container Image Filter: ${podmanMonitor.containerFilters.containerImage}`,
1702
+ );
1703
+ }
1704
+
1705
+ // Add metric name from the query config
1706
+ if (
1707
+ podmanMonitor.metricViewConfig?.queryConfigs?.length > 0 &&
1708
+ podmanMonitor.metricViewConfig.queryConfigs[0]
1709
+ ) {
1710
+ const metricName: string = podmanMonitor.metricViewConfig
1711
+ .queryConfigs[0].metricQueryData?.filterData?.metricName as string;
1712
+ if (metricName) {
1713
+ hostDetails.push(`- Metric: \`${metricName}\``);
1714
+ }
1715
+ }
1716
+
1717
+ sections.push(`**Podman Host Details**\n${hostDetails.join("\n")}`);
1718
+ }
1719
+
1720
+ // Metric results summary
1721
+ if (metricResponse.metricResult && metricResponse.metricResult.length > 0) {
1722
+ const resultDetails: Array<string> = [];
1723
+
1724
+ for (const result of metricResponse.metricResult) {
1725
+ if (result.data && result.data.length > 0) {
1726
+ resultDetails.push(
1727
+ `- ${result.data.length} metric data point(s) returned`,
1728
+ );
1729
+ }
1730
+ }
1731
+
1732
+ if (resultDetails.length > 0) {
1733
+ sections.push(`\n\n**Metric Summary**\n${resultDetails.join("\n")}`);
1734
+ }
1735
+ }
1736
+
1737
+ return sections.length > 0 ? sections.join("\n") : null;
1738
+ }
1739
+
1596
1740
  private static buildProxmoxRootCauseContext(input: {
1597
1741
  dataToProcess: DataToProcess;
1598
1742
  monitorStep: MonitorStep;
@@ -1758,6 +1902,168 @@ ${contextBlock}
1758
1902
  return sections.length > 0 ? sections.join("\n") : null;
1759
1903
  }
1760
1904
 
1905
+ private static buildDockerSwarmRootCauseContext(input: {
1906
+ dataToProcess: DataToProcess;
1907
+ monitorStep: MonitorStep;
1908
+ monitor: Monitor;
1909
+ }): string | null {
1910
+ const metricResponse: MetricMonitorResponse =
1911
+ input.dataToProcess as MetricMonitorResponse;
1912
+
1913
+ const breakdown: DockerSwarmResourceBreakdown | undefined =
1914
+ metricResponse.dockerSwarmResourceBreakdown;
1915
+
1916
+ const sections: Array<string> = [];
1917
+
1918
+ // Docker Swarm cluster context
1919
+ const dockerSwarmMonitor: MonitorStepDockerSwarmMonitor | undefined =
1920
+ input.monitorStep.data?.dockerSwarmMonitor;
1921
+
1922
+ if (dockerSwarmMonitor || breakdown) {
1923
+ const clusterDetails: Array<string> = [];
1924
+ clusterDetails.push(
1925
+ `- Cluster: ${breakdown?.clusterName || dockerSwarmMonitor?.clusterIdentifier || "Unknown"}`,
1926
+ );
1927
+
1928
+ if (breakdown) {
1929
+ clusterDetails.push(
1930
+ `- Metric: ${breakdown.metricFriendlyName} (\`${breakdown.metricName}\`)`,
1931
+ );
1932
+ } else if (
1933
+ dockerSwarmMonitor &&
1934
+ dockerSwarmMonitor.metricViewConfig?.queryConfigs?.length > 0 &&
1935
+ dockerSwarmMonitor.metricViewConfig.queryConfigs[0]
1936
+ ) {
1937
+ const metricName: string = dockerSwarmMonitor.metricViewConfig
1938
+ .queryConfigs[0].metricQueryData?.filterData?.metricName as string;
1939
+ if (metricName) {
1940
+ clusterDetails.push(`- Metric: \`${metricName}\``);
1941
+ }
1942
+ }
1943
+
1944
+ if (dockerSwarmMonitor?.resourceFilters?.serviceName) {
1945
+ clusterDetails.push(
1946
+ `- Service Filter: ${dockerSwarmMonitor.resourceFilters.serviceName}`,
1947
+ );
1948
+ }
1949
+
1950
+ if (dockerSwarmMonitor?.resourceFilters?.nodeName) {
1951
+ clusterDetails.push(
1952
+ `- Node Filter: ${dockerSwarmMonitor.resourceFilters.nodeName}`,
1953
+ );
1954
+ }
1955
+
1956
+ if (dockerSwarmMonitor?.resourceFilters?.containerName) {
1957
+ clusterDetails.push(
1958
+ `- Container Name Filter: ${dockerSwarmMonitor.resourceFilters.containerName}`,
1959
+ );
1960
+ }
1961
+
1962
+ if (dockerSwarmMonitor?.resourceFilters?.containerImage) {
1963
+ clusterDetails.push(
1964
+ `- Container Image Filter: ${dockerSwarmMonitor.resourceFilters.containerImage}`,
1965
+ );
1966
+ }
1967
+
1968
+ sections.push(
1969
+ `**Docker Swarm Cluster Details**\n${clusterDetails.join("\n")}`,
1970
+ );
1971
+ }
1972
+
1973
+ // Affected resources (Task / Service / Node / Value)
1974
+ let renderedBreakdownTable: boolean = false;
1975
+
1976
+ if (breakdown && breakdown.affectedResources.length > 0) {
1977
+ /*
1978
+ * K8s/Proxmox-parity render: drop zero-value rows, worst (highest)
1979
+ * first, top 10. For the task-down template the breaching rows ARE
1980
+ * the zero-uptime ones — those still drive alerting through the
1981
+ * per-series criteria evaluation; this table is supplementary
1982
+ * context only.
1983
+ */
1984
+ const sortedResources: Array<DockerSwarmAffectedResource> = [
1985
+ ...breakdown.affectedResources,
1986
+ ]
1987
+ .filter((r: DockerSwarmAffectedResource) => {
1988
+ return r.metricValue > 0;
1989
+ })
1990
+ .sort(
1991
+ (a: DockerSwarmAffectedResource, b: DockerSwarmAffectedResource) => {
1992
+ return b.metricValue - a.metricValue;
1993
+ },
1994
+ );
1995
+
1996
+ /*
1997
+ * Skip the table when no row carries any identity label
1998
+ * (cluster-wide series) — it would add nothing.
1999
+ */
2000
+ const hasIdentity: boolean = sortedResources.some(
2001
+ (r: DockerSwarmAffectedResource) => {
2002
+ return r.containerName || r.serviceName || r.nodeName;
2003
+ },
2004
+ );
2005
+
2006
+ if (sortedResources.length > 0 && hasIdentity) {
2007
+ const resourcesToShow: Array<DockerSwarmAffectedResource> =
2008
+ sortedResources.slice(0, 10);
2009
+
2010
+ const resourceLines: Array<string> = [];
2011
+ resourceLines.push(`| Task / Container | Service | Node | Value |`);
2012
+ resourceLines.push(`| --- | --- | --- | --- |`);
2013
+
2014
+ for (const resource of resourcesToShow) {
2015
+ const taskCell: string = resource.containerName
2016
+ ? `\`${resource.containerName}\``
2017
+ : "-";
2018
+ const serviceCell: string = resource.serviceName
2019
+ ? `\`${resource.serviceName}\``
2020
+ : "-";
2021
+ const nodeCell: string = resource.nodeName
2022
+ ? `\`${resource.nodeName}\``
2023
+ : "-";
2024
+
2025
+ resourceLines.push(
2026
+ `| ${taskCell} | ${serviceCell} | ${nodeCell} | **${resource.metricValue}** |`,
2027
+ );
2028
+ }
2029
+
2030
+ if (sortedResources.length > 10) {
2031
+ resourceLines.push(
2032
+ `\n*... and ${sortedResources.length - 10} more affected tasks*`,
2033
+ );
2034
+ }
2035
+
2036
+ sections.push(
2037
+ `\n\n**Affected Tasks** (${sortedResources.length} total)\n\n${resourceLines.join("\n")}`,
2038
+ );
2039
+ renderedBreakdownTable = true;
2040
+ }
2041
+ }
2042
+
2043
+ // Metric results summary (fallback context when no table rendered)
2044
+ if (
2045
+ !renderedBreakdownTable &&
2046
+ metricResponse.metricResult &&
2047
+ metricResponse.metricResult.length > 0
2048
+ ) {
2049
+ const resultDetails: Array<string> = [];
2050
+
2051
+ for (const result of metricResponse.metricResult) {
2052
+ if (result.data && result.data.length > 0) {
2053
+ resultDetails.push(
2054
+ `- ${result.data.length} metric data point(s) returned`,
2055
+ );
2056
+ }
2057
+ }
2058
+
2059
+ if (resultDetails.length > 0) {
2060
+ sections.push(`\n\n**Metric Summary**\n${resultDetails.join("\n")}`);
2061
+ }
2062
+ }
2063
+
2064
+ return sections.length > 0 ? sections.join("\n") : null;
2065
+ }
2066
+
1761
2067
  private static buildCephRootCauseContext(input: {
1762
2068
  dataToProcess: DataToProcess;
1763
2069
  monitorStep: MonitorStep;