@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
@@ -23,6 +23,7 @@ import ErrorMessage from "../ErrorMessage/ErrorMessage";
23
23
  import Service from "../../../Models/DatabaseModels/Service";
24
24
  import Host from "../../../Models/DatabaseModels/Host";
25
25
  import DockerHost from "../../../Models/DatabaseModels/DockerHost";
26
+ import PodmanHost from "../../../Models/DatabaseModels/PodmanHost";
26
27
  import KubernetesCluster from "../../../Models/DatabaseModels/KubernetesCluster";
27
28
  import { LIMIT_PER_PROJECT } from "../../../Types/Database/LimitMax";
28
29
  import SortOrder from "../../../Types/BaseDatabase/SortOrder";
@@ -228,6 +229,9 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
228
229
  const [dockerHostMap, setDockerHostMap] = useState<Dictionary<DockerHost>>(
229
230
  {},
230
231
  );
232
+ const [podmanHostMap, setPodmanHostMap] = useState<Dictionary<PodmanHost>>(
233
+ {},
234
+ );
231
235
  const [kubernetesClusterMap, setKubernetesClusterMap] = useState<
232
236
  Dictionary<KubernetesCluster>
233
237
  >({});
@@ -394,10 +398,17 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
394
398
  setIsPageLoading(true);
395
399
  setPageError("");
396
400
 
397
- const [telemetryServices, hosts, dockerHosts, kubernetesClusters]: [
401
+ const [
402
+ telemetryServices,
403
+ hosts,
404
+ dockerHosts,
405
+ podmanHosts,
406
+ kubernetesClusters,
407
+ ]: [
398
408
  ListResult<Service>,
399
409
  ListResult<Host>,
400
410
  ListResult<DockerHost>,
411
+ ListResult<PodmanHost>,
401
412
  ListResult<KubernetesCluster>,
402
413
  ] = await Promise.all([
403
414
  ModelAPI.getList({
@@ -439,6 +450,19 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
439
450
  name: SortOrder.Ascending,
440
451
  },
441
452
  }),
453
+ ModelAPI.getList({
454
+ modelType: PodmanHost,
455
+ query: {},
456
+ select: {
457
+ name: true,
458
+ hostIdentifier: true,
459
+ },
460
+ limit: LIMIT_PER_PROJECT,
461
+ skip: 0,
462
+ sort: {
463
+ name: SortOrder.Ascending,
464
+ },
465
+ }),
442
466
  ModelAPI.getList({
443
467
  modelType: KubernetesCluster,
444
468
  query: {},
@@ -492,6 +516,14 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
492
516
  dockerHostsById[dockerHost.id.toString()] = dockerHost;
493
517
  });
494
518
 
519
+ const podmanHostsById: Dictionary<PodmanHost> = {};
520
+ podmanHosts.data.forEach((podmanHost: PodmanHost) => {
521
+ if (!podmanHost.id) {
522
+ return;
523
+ }
524
+ podmanHostsById[podmanHost.id.toString()] = podmanHost;
525
+ });
526
+
495
527
  const clustersById: Dictionary<KubernetesCluster> = {};
496
528
  kubernetesClusters.data.forEach((cluster: KubernetesCluster) => {
497
529
  if (!cluster.id) {
@@ -503,6 +535,7 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
503
535
  setServiceMap(services);
504
536
  setHostMap(hostsById);
505
537
  setDockerHostMap(dockerHostsById);
538
+ setPodmanHostMap(podmanHostsById);
506
539
  setKubernetesClusterMap(clustersById);
507
540
  } catch (err) {
508
541
  setPageError(
@@ -846,6 +879,14 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
846
879
  dockerHost?.name || dockerHost?.hostIdentifier || filter.value,
847
880
  };
848
881
  }
882
+ if (filter.facetKey === "podmanHostId" && podmanHostMap[filter.value]) {
883
+ const podmanHost: PodmanHost | undefined = podmanHostMap[filter.value];
884
+ return {
885
+ ...filter,
886
+ displayValue:
887
+ podmanHost?.name || podmanHost?.hostIdentifier || filter.value,
888
+ };
889
+ }
849
890
  if (
850
891
  filter.facetKey === "kubernetesClusterId" &&
851
892
  kubernetesClusterMap[filter.value]
@@ -866,6 +907,7 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
866
907
  serviceMap,
867
908
  hostMap,
868
909
  dockerHostMap,
910
+ podmanHostMap,
869
911
  kubernetesClusterMap,
870
912
  ]);
871
913
 
@@ -1084,6 +1126,7 @@ const LogsViewer: FunctionComponent<ComponentProps> = (
1084
1126
  serviceMap={serviceMap}
1085
1127
  hostMap={hostMap}
1086
1128
  dockerHostMap={dockerHostMap}
1129
+ podmanHostMap={podmanHostMap}
1087
1130
  kubernetesClusterMap={kubernetesClusterMap}
1088
1131
  onIncludeFilter={props.onFacetInclude || (() => {})}
1089
1132
  onExcludeFilter={props.onFacetExclude || (() => {})}
@@ -9,6 +9,7 @@ import FacetSection from "./FacetSection";
9
9
  import Service from "../../../../Models/DatabaseModels/Service";
10
10
  import Host from "../../../../Models/DatabaseModels/Host";
11
11
  import DockerHost from "../../../../Models/DatabaseModels/DockerHost";
12
+ import PodmanHost from "../../../../Models/DatabaseModels/PodmanHost";
12
13
  import KubernetesCluster from "../../../../Models/DatabaseModels/KubernetesCluster";
13
14
  import Dictionary from "../../../../Types/Dictionary";
14
15
  import ComponentLoader from "../../ComponentLoader/ComponentLoader";
@@ -21,6 +22,7 @@ export interface LogsFacetSidebarProps {
21
22
  serviceMap: Dictionary<Service>;
22
23
  hostMap?: Dictionary<Host>;
23
24
  dockerHostMap?: Dictionary<DockerHost>;
25
+ podmanHostMap?: Dictionary<PodmanHost>;
24
26
  kubernetesClusterMap?: Dictionary<KubernetesCluster>;
25
27
  onIncludeFilter: (facetKey: string, value: string) => void;
26
28
  onExcludeFilter: (facetKey: string, value: string) => void;
@@ -42,6 +44,7 @@ const RESOURCE_FACET_KEYS: ReadonlySet<string> = new Set([
42
44
  "primaryEntityId",
43
45
  "hostId",
44
46
  "dockerHostId",
47
+ "podmanHostId",
45
48
  "kubernetesClusterId",
46
49
  ]);
47
50
 
@@ -126,6 +129,23 @@ function buildDockerHostDisplayMap(
126
129
  return map;
127
130
  }
128
131
 
132
+ function buildPodmanHostDisplayMap(
133
+ podmanHostMap: Dictionary<PodmanHost> | undefined,
134
+ ): Record<string, string> {
135
+ const map: Record<string, string> = {};
136
+ if (!podmanHostMap) {
137
+ return map;
138
+ }
139
+ for (const [id, podmanHost] of Object.entries(podmanHostMap)) {
140
+ const label: string | undefined =
141
+ podmanHost?.name || podmanHost?.hostIdentifier;
142
+ if (label) {
143
+ map[id] = label;
144
+ }
145
+ }
146
+ return map;
147
+ }
148
+
129
149
  function buildClusterDisplayMap(
130
150
  clusterMap: Dictionary<KubernetesCluster> | undefined,
131
151
  ): Record<string, string> {
@@ -149,6 +169,7 @@ function getFacetTitle(key: string): string {
149
169
  primaryEntityId: "Service",
150
170
  hostId: "Host",
151
171
  dockerHostId: "Docker Host",
172
+ podmanHostId: "Podman Host",
152
173
  kubernetesClusterId: "Kubernetes Cluster",
153
174
  traceId: "Trace ID",
154
175
  spanId: "Span ID",
@@ -180,6 +201,10 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
180
201
  return buildDockerHostDisplayMap(props.dockerHostMap);
181
202
  }, [props.dockerHostMap]);
182
203
 
204
+ const podmanHostDisplayMap: Record<string, string> = useMemo(() => {
205
+ return buildPodmanHostDisplayMap(props.podmanHostMap);
206
+ }, [props.podmanHostMap]);
207
+
183
208
  const clusterDisplayMap: Record<string, string> = useMemo(() => {
184
209
  return buildClusterDisplayMap(props.kubernetesClusterMap);
185
210
  }, [props.kubernetesClusterMap]);
@@ -190,6 +215,7 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
190
215
  "primaryEntityId",
191
216
  "hostId",
192
217
  "dockerHostId",
218
+ "podmanHostId",
193
219
  "kubernetesClusterId",
194
220
  ];
195
221
  const otherKeys: Array<string> = Object.keys(props.facetData).filter(
@@ -287,6 +313,8 @@ const LogsFacetSidebar: FunctionComponent<LogsFacetSidebarProps> = (
287
313
  valueDisplayMap = hostDisplayMap;
288
314
  } else if (key === "dockerHostId") {
289
315
  valueDisplayMap = dockerHostDisplayMap;
316
+ } else if (key === "podmanHostId") {
317
+ valueDisplayMap = podmanHostDisplayMap;
290
318
  } else if (key === "kubernetesClusterId") {
291
319
  valueDisplayMap = clusterDisplayMap;
292
320
  } else if (key === "severityText") {
@@ -30,6 +30,7 @@ export interface ComponentProps {
30
30
  // Default: false (spell check enabled). Set to true to disable spell check.
31
31
  disableSpellCheck?: boolean | undefined;
32
32
  dataTestId?: string | undefined;
33
+ ariaLabelledby?: string | undefined;
33
34
  }
34
35
 
35
36
  type EditorMode = "wysiwyg" | "markdown";
@@ -1112,6 +1113,7 @@ const MarkdownEditor: FunctionComponent<ComponentProps> = (
1112
1113
  ref={editableRef}
1113
1114
  role="textbox"
1114
1115
  aria-multiline="true"
1116
+ aria-labelledby={props.ariaLabelledby}
1115
1117
  contentEditable
1116
1118
  suppressContentEditableWarning
1117
1119
  spellCheck={props.disableSpellCheck !== true}
@@ -1159,6 +1161,7 @@ const MarkdownEditor: FunctionComponent<ComponentProps> = (
1159
1161
  <textarea
1160
1162
  ref={textareaRef}
1161
1163
  autoFocus={false}
1164
+ aria-labelledby={props.ariaLabelledby}
1162
1165
  placeholder={props.placeholder || "Type your markdown here..."}
1163
1166
  className={`${className} rounded-t-none min-h-32 ${
1164
1167
  isDraggingOver
@@ -316,6 +316,35 @@ const LocalTime: FunctionComponent<{ isoValue: string }> = ({
316
316
  );
317
317
  };
318
318
 
319
+ /*
320
+ * Recursively pull the plain text out of a React children tree. Used to derive
321
+ * an accessible name for task-list checkboxes (WCAG 4.1.2), whose visible label
322
+ * is a sibling text node not otherwise associated with the <input>.
323
+ */
324
+ const extractTextFromChildren: (children: unknown) => string = (
325
+ children: unknown,
326
+ ): string => {
327
+ if (children === null || children === undefined || children === false) {
328
+ return "";
329
+ }
330
+ if (typeof children === "string" || typeof children === "number") {
331
+ return String(children);
332
+ }
333
+ if (Array.isArray(children)) {
334
+ return children
335
+ .map((child: unknown) => {
336
+ return extractTextFromChildren(child);
337
+ })
338
+ .join("");
339
+ }
340
+ if (React.isValidElement(children)) {
341
+ return extractTextFromChildren(
342
+ (children.props as { children?: unknown }).children,
343
+ );
344
+ }
345
+ return "";
346
+ };
347
+
319
348
  const MarkdownViewer: FunctionComponent<ComponentProps> = (
320
349
  props: ComponentProps,
321
350
  ): ReactElement => {
@@ -439,12 +468,44 @@ const MarkdownViewer: FunctionComponent<ComponentProps> = (
439
468
  />
440
469
  );
441
470
  },
442
- li: ({ ...props }: any) => {
471
+ li: ({ children, ...props }: any) => {
472
+ const isTaskItem: boolean =
473
+ typeof props.className === "string" &&
474
+ props.className.includes("task-list-item");
475
+
476
+ // Give the task-list checkbox an accessible name from its label text.
477
+ const renderedChildren: any = isTaskItem
478
+ ? React.Children.map(children, (child: any) => {
479
+ if (
480
+ React.isValidElement(child) &&
481
+ (child.type === "input" ||
482
+ (child.props as { type?: string } | null)?.type ===
483
+ "checkbox")
484
+ ) {
485
+ const existingLabel: string | undefined = (
486
+ child.props as { ["aria-label"]?: string }
487
+ )["aria-label"];
488
+ return React.cloneElement(
489
+ child as ReactElement,
490
+ {
491
+ "aria-label":
492
+ existingLabel ||
493
+ extractTextFromChildren(children).trim() ||
494
+ "Task item",
495
+ } as any,
496
+ );
497
+ }
498
+ return child;
499
+ })
500
+ : children;
501
+
443
502
  return (
444
503
  <li
445
504
  className="text-sm mt-1 mb-1 text-gray-700 leading-relaxed"
446
505
  {...props}
447
- />
506
+ >
507
+ {renderedChildren}
508
+ </li>
448
509
  );
449
510
  },
450
511
  ul: ({ ...props }: any) => {
@@ -53,6 +53,9 @@ export default class TemplateVariablesCatalog {
53
53
  input.monitorType === MonitorType.Metrics ||
54
54
  input.monitorType === MonitorType.Kubernetes ||
55
55
  input.monitorType === MonitorType.Docker ||
56
+ input.monitorType === MonitorType.Host ||
57
+ input.monitorType === MonitorType.Podman ||
58
+ input.monitorType === MonitorType.DockerSwarm ||
56
59
  input.monitorType === MonitorType.Proxmox ||
57
60
  input.monitorType === MonitorType.Ceph
58
61
  ) {
@@ -487,6 +490,9 @@ export default class TemplateVariablesCatalog {
487
490
  case MonitorType.Metrics:
488
491
  case MonitorType.Kubernetes:
489
492
  case MonitorType.Docker:
493
+ case MonitorType.Host:
494
+ case MonitorType.Podman:
495
+ case MonitorType.DockerSwarm:
490
496
  case MonitorType.Proxmox:
491
497
  case MonitorType.Ceph:
492
498
  return {
@@ -24,6 +24,7 @@ export interface ComponentProps {
24
24
  error?: string | undefined;
25
25
  dataTestId?: string | undefined;
26
26
  ariaLabel?: string | undefined;
27
+ ariaLabelledby?: string | undefined;
27
28
  }
28
29
 
29
30
  const Radio: FunctionComponent<ComponentProps> = (
@@ -47,6 +48,7 @@ const Radio: FunctionComponent<ComponentProps> = (
47
48
  data-testid={props.dataTestId}
48
49
  role="radiogroup"
49
50
  aria-label={props.ariaLabel}
51
+ aria-labelledby={props.ariaLabelledby}
50
52
  aria-invalid={props.error ? "true" : undefined}
51
53
  aria-describedby={props.error ? errorId : undefined}
52
54
  >
@@ -20,6 +20,7 @@ export interface ComponentProps {
20
20
  options: Array<RadioButton>;
21
21
  error?: string | undefined;
22
22
  dataTestId?: string | undefined;
23
+ ariaLabelledby?: string | undefined;
23
24
  }
24
25
 
25
26
  const RadioButtons: FunctionComponent<ComponentProps> = (
@@ -46,7 +47,11 @@ const RadioButtons: FunctionComponent<ComponentProps> = (
46
47
 
47
48
  return (
48
49
  <div>
49
- <fieldset role="radiogroup" data-testid={props.dataTestId}>
50
+ <fieldset
51
+ role="radiogroup"
52
+ aria-labelledby={props.ariaLabelledby}
53
+ data-testid={props.dataTestId}
54
+ >
50
55
  <div className="space-y-2 mt-2">
51
56
  {props.options &&
52
57
  props.options.map((radioButton: RadioButton, i: number) => {
@@ -19,6 +19,67 @@ const Tabs: FunctionComponent<ComponentProps> = (
19
19
  const hasInitialized: React.MutableRefObject<boolean> =
20
20
  useRef<boolean>(false);
21
21
 
22
+ /*
23
+ * When the active tab changes as a result of keyboard arrow navigation we move
24
+ * DOM focus onto the newly active tab (roving tabindex pattern). This ref keeps
25
+ * us from stealing focus when the tab changes for any other reason (e.g. click).
26
+ */
27
+ const moveFocusToActiveTab: React.MutableRefObject<boolean> =
28
+ useRef<boolean>(false);
29
+
30
+ useEffect(() => {
31
+ if (moveFocusToActiveTab.current && currentTabName) {
32
+ document.getElementById(`tab-${currentTabName}`)?.focus();
33
+ moveFocusToActiveTab.current = false;
34
+ }
35
+ }, [currentTabName]);
36
+
37
+ type ActivateTabByOffsetFunction = (offset: number) => void;
38
+
39
+ const activateTabByOffset: ActivateTabByOffsetFunction = (
40
+ offset: number,
41
+ ): void => {
42
+ if (props.tabs.length === 0) {
43
+ return;
44
+ }
45
+ const currentIndex: number = props.tabs.findIndex((t: Tab) => {
46
+ return t.name === currentTabName;
47
+ });
48
+ const fromIndex: number = currentIndex < 0 ? 0 : currentIndex;
49
+ const nextIndex: number =
50
+ (fromIndex + offset + props.tabs.length) % props.tabs.length;
51
+ moveFocusToActiveTab.current = true;
52
+ setCurrentTabName(props.tabs[nextIndex]!.name);
53
+ };
54
+
55
+ type HandleTabListKeyDownFunction = (
56
+ event: React.KeyboardEvent<HTMLElement>,
57
+ ) => void;
58
+
59
+ const handleTabListKeyDown: HandleTabListKeyDownFunction = (
60
+ event: React.KeyboardEvent<HTMLElement>,
61
+ ): void => {
62
+ if (event.key === "ArrowRight" || event.key === "ArrowDown") {
63
+ event.preventDefault();
64
+ activateTabByOffset(1);
65
+ } else if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
66
+ event.preventDefault();
67
+ activateTabByOffset(-1);
68
+ } else if (event.key === "Home") {
69
+ event.preventDefault();
70
+ if (props.tabs.length > 0) {
71
+ moveFocusToActiveTab.current = true;
72
+ setCurrentTabName(props.tabs[0]!.name);
73
+ }
74
+ } else if (event.key === "End") {
75
+ event.preventDefault();
76
+ if (props.tabs.length > 0) {
77
+ moveFocusToActiveTab.current = true;
78
+ setCurrentTabName(props.tabs[props.tabs.length - 1]!.name);
79
+ }
80
+ }
81
+ };
82
+
22
83
  // Initialize current tab only once, or when the tab list names change
23
84
  useEffect(() => {
24
85
  const tabNames: Array<string> = props.tabs.map((t: Tab) => {
@@ -60,8 +121,10 @@ const Tabs: FunctionComponent<ComponentProps> = (
60
121
  <div>
61
122
  <nav
62
123
  role="tablist"
124
+ aria-orientation="horizontal"
63
125
  className="flex space-x-2 overflow-x-auto md:overflow-visible md:space-x-4"
64
126
  aria-label="Tabs"
127
+ onKeyDown={handleTabListKeyDown}
65
128
  >
66
129
  {props.tabs.map((tab: Tab) => {
67
130
  return (
@@ -11,6 +11,7 @@ import React, {
11
11
  export interface ComponentProps {
12
12
  onChange?: undefined | ((value: string) => void);
13
13
  initialValue?: string | undefined;
14
+ id?: string | undefined;
14
15
  value?: string | undefined;
15
16
  placeholder?: undefined | string;
16
17
  onFocus?: () => void;
@@ -63,6 +64,7 @@ const TextArea: FunctionComponent<ComponentProps> = (
63
64
  <div className="relative mt-2 mb-1 rounded-md shadow-sm">
64
65
  <textarea
65
66
  autoFocus={props.autoFocus}
67
+ id={props.id}
66
68
  placeholder={translateString(props.placeholder)}
67
69
  data-testid={props.dataTestId}
68
70
  className={`${className || ""}`}
@@ -24,6 +24,7 @@ export interface ComponentProps {
24
24
  tabIndex?: number | undefined;
25
25
  autoFocus?: boolean | undefined;
26
26
  error?: string | undefined;
27
+ ariaLabelledby?: string | undefined;
27
28
  }
28
29
 
29
30
  const pad2: (n: number) => string = (n: number): string => {
@@ -161,6 +162,7 @@ const TimePicker: FunctionComponent<ComponentProps> = (
161
162
  }
162
163
  role="group"
163
164
  aria-label="Time input"
165
+ aria-labelledby={props.ariaLabelledby}
164
166
  aria-disabled={props.disabled ? true : undefined}
165
167
  aria-describedby={props.error ? "timepicker-error" : undefined}
166
168
  onClick={openModal}
@@ -21,6 +21,7 @@ export interface ComponentProps {
21
21
  error?: string | undefined;
22
22
  dataTestId?: string | undefined;
23
23
  tooltip?: string | undefined;
24
+ ariaLabelledby?: string | undefined;
24
25
  }
25
26
 
26
27
  const Toggle: FunctionComponent<ComponentProps> = (
@@ -96,7 +97,7 @@ const Toggle: FunctionComponent<ComponentProps> = (
96
97
  className={buttonClassName}
97
98
  role="switch"
98
99
  aria-checked={isChecked ? "true" : "false"}
99
- aria-labelledby={labelId}
100
+ aria-labelledby={props.ariaLabelledby || labelId}
100
101
  aria-describedby={props.error ? errorId : undefined}
101
102
  aria-invalid={props.error ? "true" : undefined}
102
103
  >
@@ -48,7 +48,12 @@ const Tooltip: FunctionComponent<ComponentProps> = (
48
48
  {...animationProps}
49
49
  aria={{
50
50
  content: "describedby",
51
- expanded: "auto",
51
+ /*
52
+ * Tippy's default ("auto") stamps aria-expanded onto the trigger, but our
53
+ * triggers are often plain non-interactive elements (e.g. uptime bars) whose
54
+ * role does not support aria-expanded (WCAG 4.1.2). Disable it.
55
+ */
56
+ expanded: false,
52
57
  }}
53
58
  >
54
59
  {props.children}
@@ -102,6 +102,7 @@ export default class TelemetryServiceUtil {
102
102
  const typeLabels: Record<string, string> = {
103
103
  [ServiceType.Host]: "Host telemetry",
104
104
  [ServiceType.DockerHost]: "Docker host telemetry",
105
+ [ServiceType.PodmanHost]: "Podman host telemetry",
105
106
  [ServiceType.KubernetesCluster]: "Kubernetes telemetry",
106
107
  [ServiceType.ProxmoxCluster]: "Proxmox Cluster",
107
108
  [ServiceType.CephCluster]: "Ceph Cluster",
@@ -0,0 +1,70 @@
1
+ import DashboardDockerSwarmNodeListComponent from "../../../Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent";
2
+ import { ObjectType } from "../../../Types/JSON";
3
+ import ObjectID from "../../../Types/ObjectID";
4
+ import DashboardBaseComponentUtil from "./DashboardBaseComponent";
5
+ import {
6
+ ComponentArgument,
7
+ ComponentInputType,
8
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
9
+ import DashboardComponentType from "../../../Types/Dashboard/DashboardComponentType";
10
+ import {
11
+ DockerSwarmFiltersSection,
12
+ getDockerSwarmCommonArguments,
13
+ } from "./DashboardDockerSwarmResourceListShared";
14
+
15
+ export default class DashboardDockerSwarmNodeListComponentUtil extends DashboardBaseComponentUtil {
16
+ public static override getDefaultComponent(): DashboardDockerSwarmNodeListComponent {
17
+ return {
18
+ _type: ObjectType.DashboardComponent,
19
+ componentType: DashboardComponentType.DockerSwarmNodeList,
20
+ widthInDashboardUnits: 6,
21
+ heightInDashboardUnits: 4,
22
+ topInDashboardUnits: 0,
23
+ leftInDashboardUnits: 0,
24
+ componentId: ObjectID.generate(),
25
+ minHeightInDashboardUnits: 3,
26
+ minWidthInDashboardUnits: 6,
27
+ arguments: {
28
+ maxRows: 25,
29
+ },
30
+ };
31
+ }
32
+
33
+ public static override getComponentConfigArguments(): Array<
34
+ ComponentArgument<DashboardDockerSwarmNodeListComponent>
35
+ > {
36
+ const args: Array<
37
+ ComponentArgument<DashboardDockerSwarmNodeListComponent>
38
+ > = getDockerSwarmCommonArguments<DashboardDockerSwarmNodeListComponent>();
39
+
40
+ args.push({
41
+ name: "Role",
42
+ description: "Show only manager nodes or only worker nodes",
43
+ required: false,
44
+ type: ComponentInputType.Dropdown,
45
+ id: "roleFilter",
46
+ section: DockerSwarmFiltersSection,
47
+ dropdownOptions: [
48
+ { label: "All", value: "" },
49
+ { label: "Managers only", value: "manager" },
50
+ { label: "Workers only", value: "worker" },
51
+ ],
52
+ });
53
+
54
+ args.push({
55
+ name: "Status",
56
+ description: "Quick filter by node readiness",
57
+ required: false,
58
+ type: ComponentInputType.Dropdown,
59
+ id: "statusFilter",
60
+ section: DockerSwarmFiltersSection,
61
+ dropdownOptions: [
62
+ { label: "All", value: "" },
63
+ { label: "Ready only", value: "ready" },
64
+ { label: "Not ready only", value: "notready" },
65
+ ],
66
+ });
67
+
68
+ return args;
69
+ }
70
+ }
@@ -0,0 +1,61 @@
1
+ import {
2
+ ComponentArgument,
3
+ ComponentArgumentSection,
4
+ ComponentInputType,
5
+ EntityFilterModelType,
6
+ } from "../../../Types/Dashboard/DashboardComponents/ComponentArgument";
7
+ import DashboardBaseComponent from "../../../Types/Dashboard/DashboardComponents/DashboardBaseComponent";
8
+ import { getViewModeArgument } from "./DashboardListSharedArgs";
9
+
10
+ export const DockerSwarmDisplaySection: ComponentArgumentSection = {
11
+ name: "Display Options",
12
+ description: "Configure the widget title and row limit",
13
+ order: 1,
14
+ };
15
+
16
+ export const DockerSwarmFiltersSection: ComponentArgumentSection = {
17
+ name: "Filters",
18
+ description: "Narrow down which resources are shown",
19
+ order: 2,
20
+ defaultCollapsed: true,
21
+ };
22
+
23
+ export function getDockerSwarmCommonArguments<
24
+ T extends DashboardBaseComponent,
25
+ >(): Array<ComponentArgument<T>> {
26
+ const args: Array<ComponentArgument<T>> = [];
27
+
28
+ args.push({
29
+ name: "Title",
30
+ description: "Header shown above the list",
31
+ required: false,
32
+ type: ComponentInputType.Text,
33
+ id: "title" as keyof T["arguments"],
34
+ section: DockerSwarmDisplaySection,
35
+ });
36
+
37
+ args.push({
38
+ name: "Max Rows",
39
+ description: "Maximum number of rows to show",
40
+ required: false,
41
+ type: ComponentInputType.Number,
42
+ id: "maxRows" as keyof T["arguments"],
43
+ placeholder: "25",
44
+ section: DockerSwarmDisplaySection,
45
+ });
46
+
47
+ args.push(getViewModeArgument<T>(DockerSwarmDisplaySection));
48
+
49
+ args.push({
50
+ name: "Clusters",
51
+ description: "Show only resources from the selected Docker Swarm clusters",
52
+ required: false,
53
+ type: ComponentInputType.EntityMultiSelectDropdown,
54
+ id: "dockerSwarmClusterIds" as keyof T["arguments"],
55
+ placeholder: "All clusters",
56
+ section: DockerSwarmFiltersSection,
57
+ entityFilterModelType: EntityFilterModelType.DockerSwarmCluster,
58
+ });
59
+
60
+ return args;
61
+ }