@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
@@ -28,6 +28,7 @@ export enum DashboardTemplateType {
28
28
  Host = "Host",
29
29
  Proxmox = "Proxmox",
30
30
  Ceph = "Ceph",
31
+ DockerSwarm = "DockerSwarm",
31
32
  Metrics = "Metrics",
32
33
  }
33
34
 
@@ -87,6 +88,13 @@ export const DashboardTemplates: Array<DashboardTemplate> = [
87
88
  "OSD wall and pool capacity lists, health and capacity stats, degraded-PG trends, client throughput, and cluster logs.",
88
89
  icon: IconProp.Database,
89
90
  },
91
+ {
92
+ type: DashboardTemplateType.DockerSwarm,
93
+ name: "Docker Swarm Dashboard",
94
+ description:
95
+ "Live node and service inventories with role/status, container CPU and memory trends, PID counts, and cluster logs.",
96
+ icon: IconProp.Cube,
97
+ },
90
98
  {
91
99
  type: DashboardTemplateType.Metrics,
92
100
  name: "Metrics Dashboard",
@@ -523,6 +531,64 @@ function createProxmoxGuestListComponent(data: {
523
531
  };
524
532
  }
525
533
 
534
+ function createDockerSwarmNodeListComponent(data: {
535
+ title: string;
536
+ top: number;
537
+ left: number;
538
+ width: number;
539
+ height: number;
540
+ maxRows?: number;
541
+ roleFilter?: string;
542
+ statusFilter?: string;
543
+ }): DashboardBaseComponent {
544
+ return {
545
+ _type: ObjectType.DashboardComponent,
546
+ componentType: DashboardComponentType.DockerSwarmNodeList,
547
+ componentId: ObjectID.generate(),
548
+ topInDashboardUnits: data.top,
549
+ leftInDashboardUnits: data.left,
550
+ widthInDashboardUnits: data.width,
551
+ heightInDashboardUnits: data.height,
552
+ minHeightInDashboardUnits: 3,
553
+ minWidthInDashboardUnits: 4,
554
+ arguments: {
555
+ title: data.title,
556
+ maxRows: data.maxRows ?? 20,
557
+ roleFilter: data.roleFilter,
558
+ statusFilter: data.statusFilter,
559
+ },
560
+ };
561
+ }
562
+
563
+ function createDockerSwarmServiceListComponent(data: {
564
+ title: string;
565
+ top: number;
566
+ left: number;
567
+ width: number;
568
+ height: number;
569
+ maxRows?: number;
570
+ serviceModeFilter?: string;
571
+ statusFilter?: string;
572
+ }): DashboardBaseComponent {
573
+ return {
574
+ _type: ObjectType.DashboardComponent,
575
+ componentType: DashboardComponentType.DockerSwarmServiceList,
576
+ componentId: ObjectID.generate(),
577
+ topInDashboardUnits: data.top,
578
+ leftInDashboardUnits: data.left,
579
+ widthInDashboardUnits: data.width,
580
+ heightInDashboardUnits: data.height,
581
+ minHeightInDashboardUnits: 3,
582
+ minWidthInDashboardUnits: 4,
583
+ arguments: {
584
+ title: data.title,
585
+ maxRows: data.maxRows ?? 20,
586
+ serviceModeFilter: data.serviceModeFilter,
587
+ statusFilter: data.statusFilter,
588
+ },
589
+ };
590
+ }
591
+
526
592
  function createCephOsdListComponent(data: {
527
593
  title: string;
528
594
  top: number;
@@ -2056,6 +2122,132 @@ function createProxmoxDashboardConfig(): DashboardViewConfig {
2056
2122
  };
2057
2123
  }
2058
2124
 
2125
+ function createDockerSwarmDashboardConfig(): DashboardViewConfig {
2126
+ /*
2127
+ * Layout notes:
2128
+ *
2129
+ * - Node / service counts come from the Postgres inventory list widgets
2130
+ * (DockerSwarmResource), never from Sum-of-gauge Value widgets — the
2131
+ * same multiply-by-scrapes failure the Kubernetes/Proxmox templates
2132
+ * document. The list-widget headers show the true current counts.
2133
+ *
2134
+ * - The only metrics that actually arrive are the docker_stats
2135
+ * receiver's per-container metrics (container.cpu.utilization,
2136
+ * container.memory.usage.total, container.pids.count, …). There are
2137
+ * NO docker_swarm_* / pve_* metrics, so the charts average those
2138
+ * per-container metrics across every task that reports them — a
2139
+ * useful temperature signal for a wall dashboard. container.cpu
2140
+ * .utilization is a ratio (0..1 per core); the chart leaves it raw.
2141
+ *
2142
+ * - The cluster variable scopes telemetry by the only resource
2143
+ * attribute the agent stamps: resource.docker.swarm.cluster.name.
2144
+ */
2145
+ const components: Array<DashboardBaseComponent> = [
2146
+ // Row 0: Title
2147
+ createTextComponent({
2148
+ text: "Docker Swarm Dashboard",
2149
+ top: 0,
2150
+ left: 0,
2151
+ width: 12,
2152
+ height: 1,
2153
+ isBold: true,
2154
+ }),
2155
+
2156
+ // Rows 1-4: Live inventory from the Postgres snapshot
2157
+ createDockerSwarmNodeListComponent({
2158
+ title: "Nodes",
2159
+ top: 1,
2160
+ left: 0,
2161
+ width: 6,
2162
+ height: 4,
2163
+ maxRows: 25,
2164
+ }),
2165
+ createDockerSwarmServiceListComponent({
2166
+ title: "Services",
2167
+ top: 1,
2168
+ left: 6,
2169
+ width: 6,
2170
+ height: 4,
2171
+ maxRows: 25,
2172
+ }),
2173
+
2174
+ // Row 5: Section header
2175
+ createTextComponent({
2176
+ text: "Container Resource Usage",
2177
+ top: 5,
2178
+ left: 0,
2179
+ width: 12,
2180
+ height: 1,
2181
+ isBold: true,
2182
+ }),
2183
+
2184
+ // Rows 6-8: CPU and memory trends (docker_stats per-container metrics)
2185
+ createChartComponent({
2186
+ title: "CPU Utilization (avg across containers)",
2187
+ chartType: DashboardChartType.Line,
2188
+ top: 6,
2189
+ left: 0,
2190
+ width: 6,
2191
+ height: 3,
2192
+ metricConfig: {
2193
+ metricName: "container.cpu.utilization",
2194
+ aggregationType: MetricsAggregationType.Avg,
2195
+ legend: "CPU utilization",
2196
+ },
2197
+ }),
2198
+ createChartComponent({
2199
+ title: "Memory Usage (avg across containers)",
2200
+ chartType: DashboardChartType.Area,
2201
+ top: 6,
2202
+ left: 6,
2203
+ width: 6,
2204
+ height: 3,
2205
+ metricConfig: {
2206
+ metricName: "container.memory.usage.total",
2207
+ aggregationType: MetricsAggregationType.Avg,
2208
+ legend: "Memory used",
2209
+ },
2210
+ }),
2211
+
2212
+ // Rows 9-11: PID counts + logs
2213
+ createChartComponent({
2214
+ title: "Process Count (sum across containers)",
2215
+ chartType: DashboardChartType.Line,
2216
+ top: 9,
2217
+ left: 0,
2218
+ width: 6,
2219
+ height: 3,
2220
+ metricConfig: {
2221
+ metricName: "container.pids.count",
2222
+ aggregationType: MetricsAggregationType.Sum,
2223
+ legend: "PIDs",
2224
+ },
2225
+ }),
2226
+ createLogStreamComponent({
2227
+ title: "Cluster Logs",
2228
+ top: 9,
2229
+ left: 6,
2230
+ width: 6,
2231
+ height: 3,
2232
+ }),
2233
+ ];
2234
+
2235
+ const variables: Array<DashboardVariable> = [
2236
+ createTelemetryAttributeVariable({
2237
+ name: "cluster",
2238
+ label: "Cluster",
2239
+ attributeKey: "resource.docker.swarm.cluster.name",
2240
+ }),
2241
+ ];
2242
+
2243
+ return {
2244
+ _type: ObjectType.DashboardViewConfig,
2245
+ components,
2246
+ variables,
2247
+ heightInDashboardUnits: Math.max(DashboardSize.heightInDashboardUnits, 12),
2248
+ };
2249
+ }
2250
+
2059
2251
  function createCephDashboardConfig(): DashboardViewConfig {
2060
2252
  /*
2061
2253
  * Layout notes:
@@ -2243,6 +2435,8 @@ export function getTemplateConfig(
2243
2435
  return createProxmoxDashboardConfig();
2244
2436
  case DashboardTemplateType.Ceph:
2245
2437
  return createCephDashboardConfig();
2438
+ case DashboardTemplateType.DockerSwarm:
2439
+ return createDockerSwarmDashboardConfig();
2246
2440
  case DashboardTemplateType.Metrics:
2247
2441
  return createMetricsDashboardConfig();
2248
2442
  case DashboardTemplateType.Blank:
@@ -0,0 +1,452 @@
1
+ import { JSONObject } from "../JSON";
2
+ import { ParsedDockerSwarmResource } from "../../Server/Services/DockerSwarmResourceService";
3
+
4
+ /*
5
+ * ------------------------------------------------------------------
6
+ * DockerSwarmInventoryExtractor
7
+ * ------------------------------------------------------------------
8
+ *
9
+ * Parses a single inventory log record emitted by the OneUptime Docker
10
+ * Swarm Agent's snapshot script. The script runs on a manager node and
11
+ * polls the Swarm API every 5 minutes (`docker node ls`,
12
+ * `docker service ls`, `docker service ps`, `docker stack ls`,
13
+ * `docker network ls`, `docker secret ls`, `docker config ls`,
14
+ * `docker volume ls` — all `--format json`) and emits one JSON object
15
+ * per line into a log file the OTel filelog receiver forwards as OTLP.
16
+ *
17
+ * The wire format is a JSON envelope:
18
+ *
19
+ * { "kind": "Node" | "Service" | "Task" | "Stack" | "Network"
20
+ * | "Secret" | "Config" | "Volume",
21
+ * "data": { ...native `docker ... ls --format json` payload... } }
22
+ *
23
+ * The kind discriminator is also set as the `oneuptime.dockerswarm.kind`
24
+ * log record attribute by the agent's filelog operator chain.
25
+ *
26
+ * Each kind has a dedicated parser that pulls the fields promoted to
27
+ * first-class columns on DockerSwarmResource; everything else goes in
28
+ * the `attributes` JSON column. The raw blob is not persisted here — it
29
+ * lives on the original log record in ClickHouse.
30
+ *
31
+ * ------------------------------------------------------------------
32
+ */
33
+
34
+ export const INVENTORY_KIND_ATTRIBUTE: string = "oneuptime.dockerswarm.kind";
35
+
36
+ export const INVENTORIED_DOCKER_SWARM_KINDS: ReadonlyArray<string> = [
37
+ "Node",
38
+ "Service",
39
+ "Task",
40
+ "Stack",
41
+ "Network",
42
+ "Secret",
43
+ "Config",
44
+ "Volume",
45
+ ];
46
+
47
+ const CANONICAL_MAP: Record<string, string> = {
48
+ node: "Node",
49
+ nodes: "Node",
50
+ service: "Service",
51
+ services: "Service",
52
+ task: "Task",
53
+ tasks: "Task",
54
+ stack: "Stack",
55
+ stacks: "Stack",
56
+ network: "Network",
57
+ networks: "Network",
58
+ secret: "Secret",
59
+ secrets: "Secret",
60
+ config: "Config",
61
+ configs: "Config",
62
+ volume: "Volume",
63
+ volumes: "Volume",
64
+ };
65
+
66
+ export function canonicalDockerSwarmKind(raw: string): string | null {
67
+ const trimmed: string = (raw || "").trim().toLowerCase();
68
+ if (!trimmed) {
69
+ return null;
70
+ }
71
+ return CANONICAL_MAP[trimmed] || null;
72
+ }
73
+
74
+ export function isInventoriedDockerSwarmKind(kind: string): boolean {
75
+ return canonicalDockerSwarmKind(kind) !== null;
76
+ }
77
+
78
+ function parseLogBody(logBody: string): JSONObject | null {
79
+ try {
80
+ const parsed: unknown = JSON.parse(logBody);
81
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
82
+ return parsed as JSONObject;
83
+ }
84
+ return null;
85
+ } catch {
86
+ return null;
87
+ }
88
+ }
89
+
90
+ function readString(obj: JSONObject, key: string): string | null {
91
+ const v: unknown = obj[key];
92
+ if (typeof v === "string" && v.trim().length > 0) {
93
+ return v.trim();
94
+ }
95
+ if (typeof v === "number") {
96
+ return String(v);
97
+ }
98
+ return null;
99
+ }
100
+
101
+ function readJSONObject(obj: JSONObject, key: string): JSONObject | null {
102
+ const v: unknown = obj[key];
103
+ if (v && typeof v === "object" && !Array.isArray(v)) {
104
+ return v as JSONObject;
105
+ }
106
+ return null;
107
+ }
108
+
109
+ // Parse a Docker "X/Y" replica string into [running, desired].
110
+ function parseReplicas(raw: string | null): {
111
+ running: number | null;
112
+ desired: number | null;
113
+ } {
114
+ if (!raw) {
115
+ return { running: null, desired: null };
116
+ }
117
+ // Replicated: "3/5". Global: "5/5" too. Strip any trailing text.
118
+ const m: RegExpMatchArray | null = raw.match(/(\d+)\s*\/\s*(\d+)/);
119
+ if (!m) {
120
+ return { running: null, desired: null };
121
+ }
122
+ return {
123
+ running: parseInt(m[1]!, 10),
124
+ desired: parseInt(m[2]!, 10),
125
+ };
126
+ }
127
+
128
+ function emptyResource(
129
+ kind: string,
130
+ externalId: string,
131
+ lastSeenAt: Date,
132
+ ): ParsedDockerSwarmResource {
133
+ return {
134
+ kind,
135
+ externalId,
136
+ name: null,
137
+ state: null,
138
+ role: null,
139
+ serviceMode: null,
140
+ desiredReplicas: null,
141
+ runningReplicas: null,
142
+ image: null,
143
+ stackName: null,
144
+ serviceName: null,
145
+ nodeHostname: null,
146
+ driver: null,
147
+ isReady: null,
148
+ attributes: null,
149
+ lastSeenAt,
150
+ };
151
+ }
152
+
153
+ /*
154
+ * `docker node ls --format json`:
155
+ * { ID, Hostname, Status, Availability, ManagerStatus, EngineVersion,
156
+ * TLSStatus, Self }
157
+ */
158
+ function parseNode(
159
+ data: JSONObject,
160
+ lastSeenAt: Date,
161
+ ): ParsedDockerSwarmResource | null {
162
+ const id: string | null = readString(data, "ID") || readString(data, "Id");
163
+ if (!id) {
164
+ return null;
165
+ }
166
+ const r: ParsedDockerSwarmResource = emptyResource(
167
+ "Node",
168
+ `node/${id}`,
169
+ lastSeenAt,
170
+ );
171
+ r.name = readString(data, "Hostname");
172
+ r.state = readString(data, "Status"); // Ready | Down | Unknown
173
+ r.isReady = r.state ? r.state.toLowerCase() === "ready" : null;
174
+ const managerStatus: string | null = readString(data, "ManagerStatus");
175
+ r.role = managerStatus ? "manager" : "worker";
176
+ r.attributes = {
177
+ availability: readString(data, "Availability"),
178
+ managerStatus: managerStatus,
179
+ engineVersion: readString(data, "EngineVersion"),
180
+ tlsStatus: readString(data, "TLSStatus"),
181
+ isLeader: managerStatus ? managerStatus.toLowerCase() === "leader" : false,
182
+ };
183
+ return r;
184
+ }
185
+
186
+ /*
187
+ * `docker service ls --format json`:
188
+ * { ID, Name, Mode, Replicas, Image, Ports }
189
+ */
190
+ function parseService(
191
+ data: JSONObject,
192
+ lastSeenAt: Date,
193
+ ): ParsedDockerSwarmResource | null {
194
+ const id: string | null = readString(data, "ID") || readString(data, "Id");
195
+ if (!id) {
196
+ return null;
197
+ }
198
+ const r: ParsedDockerSwarmResource = emptyResource(
199
+ "Service",
200
+ `service/${id}`,
201
+ lastSeenAt,
202
+ );
203
+ r.name = readString(data, "Name");
204
+ r.serviceMode = readString(data, "Mode"); // replicated | global
205
+ r.image = readString(data, "Image");
206
+ const replicas: { running: number | null; desired: number | null } =
207
+ parseReplicas(readString(data, "Replicas"));
208
+ r.runningReplicas = replicas.running;
209
+ r.desiredReplicas = replicas.desired;
210
+ r.state =
211
+ replicas.running !== null && replicas.desired !== null
212
+ ? `${replicas.running}/${replicas.desired}`
213
+ : null;
214
+ r.isReady =
215
+ replicas.running !== null && replicas.desired !== null
216
+ ? replicas.running >= replicas.desired && replicas.desired > 0
217
+ : null;
218
+ // Stack namespace: services deployed via a stack are named "<stack>_<svc>".
219
+ if (r.name && r.name.includes("_")) {
220
+ r.stackName = r.name.split("_")[0] || null;
221
+ }
222
+ r.attributes = {
223
+ ports: readString(data, "Ports"),
224
+ };
225
+ return r;
226
+ }
227
+
228
+ /*
229
+ * `docker service ps <svc> --format json` / `docker node ps`:
230
+ * { ID, Name, Image, Node, DesiredState, CurrentState, Error, Ports }
231
+ */
232
+ function parseTask(
233
+ data: JSONObject,
234
+ lastSeenAt: Date,
235
+ ): ParsedDockerSwarmResource | null {
236
+ const id: string | null = readString(data, "ID") || readString(data, "Id");
237
+ if (!id) {
238
+ return null;
239
+ }
240
+ const r: ParsedDockerSwarmResource = emptyResource(
241
+ "Task",
242
+ `task/${id}`,
243
+ lastSeenAt,
244
+ );
245
+ r.name = readString(data, "Name"); // <service>.<slot> or <service>.<nodeId>
246
+ r.image = readString(data, "Image");
247
+ r.nodeHostname = readString(data, "Node");
248
+ // CurrentState is e.g. "Running 2 hours ago" / "Shutdown 3 minutes ago".
249
+ const currentState: string | null = readString(data, "CurrentState");
250
+ r.state = currentState ? currentState.split(/\s+/)[0]!.toLowerCase() : null;
251
+ r.isReady = r.state ? r.state === "running" : null;
252
+ if (r.name && r.name.includes(".")) {
253
+ r.serviceName = r.name.split(".")[0] || null;
254
+ }
255
+ if (r.serviceName && r.serviceName.includes("_")) {
256
+ r.stackName = r.serviceName.split("_")[0] || null;
257
+ }
258
+ r.attributes = {
259
+ desiredState: readString(data, "DesiredState"),
260
+ currentState: currentState,
261
+ error: readString(data, "Error"),
262
+ };
263
+ return r;
264
+ }
265
+
266
+ /*
267
+ * `docker stack ls --format json`:
268
+ * { Name, Services, Orchestrator }
269
+ */
270
+ function parseStack(
271
+ data: JSONObject,
272
+ lastSeenAt: Date,
273
+ ): ParsedDockerSwarmResource | null {
274
+ const name: string | null = readString(data, "Name");
275
+ if (!name) {
276
+ return null;
277
+ }
278
+ const r: ParsedDockerSwarmResource = emptyResource(
279
+ "Stack",
280
+ `stack/${name}`,
281
+ lastSeenAt,
282
+ );
283
+ r.name = name;
284
+ r.stackName = name;
285
+ const servicesRaw: string | null = readString(data, "Services");
286
+ const serviceCount: number | null = servicesRaw
287
+ ? parseInt(servicesRaw, 10)
288
+ : null;
289
+ r.state = serviceCount !== null ? `${serviceCount} services` : null;
290
+ r.attributes = {
291
+ serviceCount:
292
+ serviceCount !== null && !isNaN(serviceCount) ? serviceCount : null,
293
+ orchestrator: readString(data, "Orchestrator"),
294
+ };
295
+ return r;
296
+ }
297
+
298
+ /*
299
+ * `docker network ls --format json`:
300
+ * { ID, Name, Driver, Scope }
301
+ */
302
+ function parseNetwork(
303
+ data: JSONObject,
304
+ lastSeenAt: Date,
305
+ ): ParsedDockerSwarmResource | null {
306
+ const id: string | null = readString(data, "ID") || readString(data, "Id");
307
+ const name: string | null = readString(data, "Name");
308
+ if (!id && !name) {
309
+ return null;
310
+ }
311
+ const r: ParsedDockerSwarmResource = emptyResource(
312
+ "Network",
313
+ `network/${id || name}`,
314
+ lastSeenAt,
315
+ );
316
+ r.name = name;
317
+ r.driver = readString(data, "Driver");
318
+ const scope: string | null = readString(data, "Scope");
319
+ r.state = scope;
320
+ r.attributes = {
321
+ scope: scope,
322
+ internal: readString(data, "Internal"),
323
+ ipv6: readString(data, "IPv6"),
324
+ };
325
+ return r;
326
+ }
327
+
328
+ /*
329
+ * `docker secret ls` / `docker config ls --format json`:
330
+ * { ID, Name, CreatedAt, UpdatedAt }
331
+ */
332
+ function parseSecretOrConfig(
333
+ kind: string,
334
+ data: JSONObject,
335
+ lastSeenAt: Date,
336
+ ): ParsedDockerSwarmResource | null {
337
+ const id: string | null = readString(data, "ID") || readString(data, "Id");
338
+ const name: string | null = readString(data, "Name");
339
+ if (!id && !name) {
340
+ return null;
341
+ }
342
+ const r: ParsedDockerSwarmResource = emptyResource(
343
+ kind,
344
+ `${kind.toLowerCase()}/${id || name}`,
345
+ lastSeenAt,
346
+ );
347
+ r.name = name;
348
+ r.attributes = {
349
+ createdAt: readString(data, "CreatedAt"),
350
+ updatedAt: readString(data, "UpdatedAt"),
351
+ };
352
+ return r;
353
+ }
354
+
355
+ /*
356
+ * `docker volume ls --format json`:
357
+ * { Name, Driver, Scope, Mountpoint } — per node, so the agent stamps
358
+ * the node hostname onto the envelope.
359
+ */
360
+ function parseVolume(
361
+ data: JSONObject,
362
+ lastSeenAt: Date,
363
+ ): ParsedDockerSwarmResource | null {
364
+ const name: string | null = readString(data, "Name");
365
+ if (!name) {
366
+ return null;
367
+ }
368
+ const nodeHostname: string | null =
369
+ readString(data, "Node") || readString(data, "NodeHostname");
370
+ // Volumes are per-node; suffix the node so two nodes' volumes don't collide.
371
+ const externalId: string = nodeHostname
372
+ ? `volume/${name}@${nodeHostname}`
373
+ : `volume/${name}`;
374
+ const r: ParsedDockerSwarmResource = emptyResource(
375
+ "Volume",
376
+ externalId,
377
+ lastSeenAt,
378
+ );
379
+ r.name = name;
380
+ r.driver = readString(data, "Driver");
381
+ r.nodeHostname = nodeHostname;
382
+ r.state = readString(data, "Scope");
383
+ r.attributes = {
384
+ scope: readString(data, "Scope"),
385
+ mountpoint: readString(data, "Mountpoint"),
386
+ };
387
+ return r;
388
+ }
389
+
390
+ export interface ExtractedDockerSwarmInventoryRecord {
391
+ resource: ParsedDockerSwarmResource;
392
+ }
393
+
394
+ /**
395
+ * Parse a single inventory log line. Returns null when the body is
396
+ * malformed or the kind is not modeled — callers swallow nulls silently
397
+ * rather than fail the whole batch.
398
+ */
399
+ export function extractDockerSwarmInventoryResource(data: {
400
+ kind: string;
401
+ logBody: string;
402
+ lastSeenAt: Date;
403
+ }): ExtractedDockerSwarmInventoryRecord | null {
404
+ const canonical: string | null = canonicalDockerSwarmKind(data.kind);
405
+ if (!canonical) {
406
+ return null;
407
+ }
408
+
409
+ const body: JSONObject | null = parseLogBody(data.logBody);
410
+ if (!body) {
411
+ return null;
412
+ }
413
+
414
+ const inner: JSONObject =
415
+ (readJSONObject(body, "data") as JSONObject) || body;
416
+
417
+ let parsed: ParsedDockerSwarmResource | null = null;
418
+ switch (canonical) {
419
+ case "Node":
420
+ parsed = parseNode(inner, data.lastSeenAt);
421
+ break;
422
+ case "Service":
423
+ parsed = parseService(inner, data.lastSeenAt);
424
+ break;
425
+ case "Task":
426
+ parsed = parseTask(inner, data.lastSeenAt);
427
+ break;
428
+ case "Stack":
429
+ parsed = parseStack(inner, data.lastSeenAt);
430
+ break;
431
+ case "Network":
432
+ parsed = parseNetwork(inner, data.lastSeenAt);
433
+ break;
434
+ case "Secret":
435
+ parsed = parseSecretOrConfig("Secret", inner, data.lastSeenAt);
436
+ break;
437
+ case "Config":
438
+ parsed = parseSecretOrConfig("Config", inner, data.lastSeenAt);
439
+ break;
440
+ case "Volume":
441
+ parsed = parseVolume(inner, data.lastSeenAt);
442
+ break;
443
+ default:
444
+ parsed = null;
445
+ }
446
+
447
+ if (!parsed) {
448
+ return null;
449
+ }
450
+
451
+ return { resource: parsed };
452
+ }
@@ -324,6 +324,7 @@ enum IconProp {
324
324
  XCircle = "XCircle",
325
325
  Kubernetes = "Kubernetes",
326
326
  Docker = "Docker",
327
+ Podman = "Podman",
327
328
  Proxmox = "Proxmox",
328
329
  Ceph = "Ceph",
329
330
  Gauge = "Gauge",
@@ -2,6 +2,7 @@ import Email from "./Email";
2
2
  import { JSONObject } from "./JSON";
3
3
  import Name from "./Name";
4
4
  import ObjectID from "./ObjectID";
5
+ import SsoProviderType from "./SSO/SsoProviderType";
5
6
 
6
7
  export default interface JSONWebTokenData extends JSONObject {
7
8
  userId: ObjectID;
@@ -12,4 +13,6 @@ export default interface JSONWebTokenData extends JSONObject {
12
13
  projectId?: ObjectID | undefined; // for SSO logins.
13
14
  isGlobalLogin: boolean; // If this is OneUptime username and password login. This is true, if this is SSO login. Then, this is false.
14
15
  sessionId?: ObjectID | undefined;
16
+ ssoProviderId?: ObjectID | undefined; // which SSO provider (Project or Global SSO/OIDC) issued this per-project SSO token.
17
+ ssoProviderType?: SsoProviderType | undefined;
15
18
  }