@oneuptime/common 11.0.2 → 11.0.3

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 (344) 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/Incident.ts +166 -0
  11. package/Models/DatabaseModels/IncidentLabelRule.ts +38 -0
  12. package/Models/DatabaseModels/IncidentOwnerRule.ts +38 -0
  13. package/Models/DatabaseModels/IncidentTemplate.ts +56 -0
  14. package/Models/DatabaseModels/Index.ts +24 -0
  15. package/Models/DatabaseModels/PodmanHost.ts +859 -0
  16. package/Models/DatabaseModels/PodmanHostLabelRule.ts +514 -0
  17. package/Models/DatabaseModels/PodmanHostOwnerRule.ts +596 -0
  18. package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +487 -0
  19. package/Models/DatabaseModels/PodmanHostOwnerUser.ts +486 -0
  20. package/Models/DatabaseModels/PodmanResource.ts +498 -0
  21. package/Models/DatabaseModels/ScheduledMaintenance.ts +110 -0
  22. package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +38 -0
  23. package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +38 -0
  24. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +56 -0
  25. package/Models/DatabaseModels/TelemetryException.ts +2 -0
  26. package/Server/API/DashboardAPI.ts +89 -0
  27. package/Server/API/DockerSwarmResourceAPI.ts +137 -0
  28. package/Server/API/TelemetryAPI.ts +8 -1
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.ts +3199 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  31. package/Server/Services/AlertLabelRuleEngineService.ts +29 -0
  32. package/Server/Services/AlertOwnerRuleEngineService.ts +67 -0
  33. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +214 -0
  34. package/Server/Services/DockerSwarmClusterLabelRuleService.ts +14 -0
  35. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +232 -0
  36. package/Server/Services/DockerSwarmClusterOwnerRuleService.ts +14 -0
  37. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +10 -0
  38. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +10 -0
  39. package/Server/Services/DockerSwarmClusterService.ts +404 -0
  40. package/Server/Services/DockerSwarmResourceService.ts +381 -0
  41. package/Server/Services/ExceptionAggregationService.ts +1 -0
  42. package/Server/Services/IncidentLabelRuleEngineService.ts +27 -0
  43. package/Server/Services/IncidentOwnerRuleEngineService.ts +67 -0
  44. package/Server/Services/IncidentService.ts +11 -0
  45. package/Server/Services/Index.ts +14 -0
  46. package/Server/Services/LogAggregationService.ts +1 -0
  47. package/Server/Services/MetricAggregationService.ts +1 -0
  48. package/Server/Services/OpenTelemetryIngestService.ts +37 -0
  49. package/Server/Services/PodmanHostLabelRuleEngineService.ts +198 -0
  50. package/Server/Services/PodmanHostLabelRuleService.ts +14 -0
  51. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +216 -0
  52. package/Server/Services/PodmanHostOwnerRuleService.ts +14 -0
  53. package/Server/Services/PodmanHostOwnerTeamService.ts +10 -0
  54. package/Server/Services/PodmanHostOwnerUserService.ts +10 -0
  55. package/Server/Services/PodmanHostService.ts +368 -0
  56. package/Server/Services/PodmanResourceService.ts +310 -0
  57. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +29 -0
  58. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +67 -0
  59. package/Server/Services/TelemetryUsageBillingService.ts +18 -0
  60. package/Server/Services/TraceAggregationService.ts +1 -0
  61. package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +13 -0
  62. package/Server/Utils/Monitor/MonitorAlert.ts +10 -0
  63. package/Server/Utils/Monitor/MonitorClusterContext.ts +35 -6
  64. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +306 -0
  65. package/Server/Utils/Monitor/MonitorIncident.ts +45 -0
  66. package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +17 -0
  67. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +3 -0
  68. package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
  69. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +49 -0
  70. package/Server/Utils/Telemetry/Telemetry.ts +10 -0
  71. package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -0
  72. package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +1 -0
  73. package/Tests/Types/DockerSwarm/DockerSwarmInventoryExtractor.test.ts +667 -0
  74. package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +528 -0
  75. package/Types/Dashboard/DashboardComponentType.ts +7 -0
  76. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
  77. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.ts +17 -0
  78. package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.ts +17 -0
  79. package/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.ts +16 -0
  80. package/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.ts +15 -0
  81. package/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.ts +16 -0
  82. package/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.ts +15 -0
  83. package/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.ts +15 -0
  84. package/Types/Dashboard/DashboardTemplates.ts +194 -0
  85. package/Types/DockerSwarm/DockerSwarmInventoryExtractor.ts +452 -0
  86. package/Types/Icon/IconProp.ts +1 -0
  87. package/Types/Monitor/DockerSwarmAlertTemplates.ts +461 -0
  88. package/Types/Monitor/DockerSwarmMetricCatalog.ts +139 -0
  89. package/Types/Monitor/HostAlertTemplates.ts +455 -0
  90. package/Types/Monitor/HostMetricCatalog.ts +177 -0
  91. package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +21 -0
  92. package/Types/Monitor/MonitorStep.ts +99 -0
  93. package/Types/Monitor/MonitorStepDockerSwarmMonitor.ts +74 -0
  94. package/Types/Monitor/MonitorStepHostMonitor.ts +30 -0
  95. package/Types/Monitor/MonitorStepPodmanMonitor.ts +38 -0
  96. package/Types/Monitor/MonitorType.ts +42 -0
  97. package/Types/Monitor/PodmanAlertTemplates.ts +507 -0
  98. package/Types/Monitor/PodmanMetricCatalog.ts +226 -0
  99. package/Types/Permission.ts +465 -4
  100. package/Types/Podman/PodmanInventoryExtractor.ts +343 -0
  101. package/Types/Telemetry/EntityType.ts +12 -0
  102. package/Types/Telemetry/ServiceType.ts +2 -0
  103. package/UI/Components/Icon/Icon.tsx +57 -0
  104. package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
  105. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
  106. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +6 -0
  107. package/UI/Utils/TelemetryService.ts +1 -0
  108. package/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.ts +70 -0
  109. package/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.ts +61 -0
  110. package/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.ts +71 -0
  111. package/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.ts +100 -0
  112. package/Utils/Dashboard/Components/DashboardPodmanHostListComponent.ts +88 -0
  113. package/Utils/Dashboard/Components/DashboardPodmanImageListComponent.ts +97 -0
  114. package/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.ts +87 -0
  115. package/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.ts +87 -0
  116. package/Utils/Dashboard/Components/Index.ts +51 -0
  117. package/Utils/Telemetry/EntityKey.ts +18 -0
  118. package/build/dist/Models/DatabaseModels/Alert.js +162 -0
  119. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  120. package/build/dist/Models/DatabaseModels/AlertLabelRule.js +39 -0
  121. package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
  122. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +39 -0
  123. package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
  124. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +1018 -0
  125. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -0
  126. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +522 -0
  127. package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -0
  128. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +603 -0
  129. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -0
  130. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +503 -0
  131. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -0
  132. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +502 -0
  133. package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -0
  134. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js +787 -0
  135. package/build/dist/Models/DatabaseModels/DockerSwarmResource.js.map +1 -0
  136. package/build/dist/Models/DatabaseModels/Incident.js +162 -0
  137. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  138. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +39 -0
  139. package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
  140. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +39 -0
  141. package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
  142. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +54 -0
  143. package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
  144. package/build/dist/Models/DatabaseModels/Index.js +24 -0
  145. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  146. package/build/dist/Models/DatabaseModels/PodmanHost.js +885 -0
  147. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -0
  148. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +522 -0
  149. package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -0
  150. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +603 -0
  151. package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -0
  152. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +503 -0
  153. package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -0
  154. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +502 -0
  155. package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -0
  156. package/build/dist/Models/DatabaseModels/PodmanResource.js +526 -0
  157. package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -0
  158. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +108 -0
  159. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  160. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +39 -0
  161. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
  162. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +39 -0
  163. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
  164. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +54 -0
  165. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  166. package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
  167. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  168. package/build/dist/Server/API/DashboardAPI.js +89 -0
  169. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  170. package/build/dist/Server/API/DockerSwarmResourceAPI.js +100 -0
  171. package/build/dist/Server/API/DockerSwarmResourceAPI.js.map +1 -0
  172. package/build/dist/Server/API/TelemetryAPI.js +8 -1
  173. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  174. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js +1100 -0
  175. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js.map +1 -0
  176. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  177. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  178. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +30 -4
  179. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  180. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +62 -5
  181. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  182. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +168 -0
  183. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -0
  184. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js +13 -0
  185. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js.map +1 -0
  186. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +188 -0
  187. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -0
  188. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js +13 -0
  189. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js.map +1 -0
  190. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +9 -0
  191. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -0
  192. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +9 -0
  193. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -0
  194. package/build/dist/Server/Services/DockerSwarmClusterService.js +353 -0
  195. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -0
  196. package/build/dist/Server/Services/DockerSwarmResourceService.js +258 -0
  197. package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -0
  198. package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
  199. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  200. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +28 -4
  201. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  202. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +62 -5
  203. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  204. package/build/dist/Server/Services/IncidentService.js +8 -0
  205. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  206. package/build/dist/Server/Services/Index.js +14 -0
  207. package/build/dist/Server/Services/Index.js.map +1 -1
  208. package/build/dist/Server/Services/LogAggregationService.js +1 -0
  209. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  210. package/build/dist/Server/Services/MetricAggregationService.js +1 -0
  211. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  212. package/build/dist/Server/Services/OpenTelemetryIngestService.js +43 -13
  213. package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
  214. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +166 -0
  215. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -0
  216. package/build/dist/Server/Services/PodmanHostLabelRuleService.js +13 -0
  217. package/build/dist/Server/Services/PodmanHostLabelRuleService.js.map +1 -0
  218. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +186 -0
  219. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -0
  220. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js +13 -0
  221. package/build/dist/Server/Services/PodmanHostOwnerRuleService.js.map +1 -0
  222. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +9 -0
  223. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -0
  224. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +9 -0
  225. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -0
  226. package/build/dist/Server/Services/PodmanHostService.js +319 -0
  227. package/build/dist/Server/Services/PodmanHostService.js.map +1 -0
  228. package/build/dist/Server/Services/PodmanResourceService.js +196 -0
  229. package/build/dist/Server/Services/PodmanResourceService.js.map +1 -0
  230. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +30 -4
  231. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  232. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +62 -5
  233. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  234. package/build/dist/Server/Services/TelemetryUsageBillingService.js +13 -0
  235. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  236. package/build/dist/Server/Services/TraceAggregationService.js +1 -0
  237. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  238. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +13 -0
  239. package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
  240. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +8 -0
  241. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  242. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +35 -7
  243. package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -1
  244. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +194 -0
  245. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  246. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +35 -1
  247. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  248. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +9 -0
  249. package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
  250. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +3 -0
  251. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  252. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +16 -0
  253. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  254. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +30 -0
  255. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  256. package/build/dist/Server/Utils/Telemetry/Telemetry.js +6 -0
  257. package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
  258. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +18 -0
  259. package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
  260. package/build/dist/Types/Dashboard/DashboardComponentType.js +7 -0
  261. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  262. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
  263. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  264. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js +2 -0
  265. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  266. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js +2 -0
  267. package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  268. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js +2 -0
  269. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js.map +1 -0
  270. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js +2 -0
  271. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js.map +1 -0
  272. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js +2 -0
  273. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js.map +1 -0
  274. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js +2 -0
  275. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js.map +1 -0
  276. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js +2 -0
  277. package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js.map +1 -0
  278. package/build/dist/Types/Dashboard/DashboardTemplates.js +168 -0
  279. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  280. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js +359 -0
  281. package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js.map +1 -0
  282. package/build/dist/Types/Icon/IconProp.js +1 -0
  283. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  284. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +358 -0
  285. package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -0
  286. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js +103 -0
  287. package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js.map +1 -0
  288. package/build/dist/Types/Monitor/HostAlertTemplates.js +365 -0
  289. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -0
  290. package/build/dist/Types/Monitor/HostMetricCatalog.js +138 -0
  291. package/build/dist/Types/Monitor/HostMetricCatalog.js.map +1 -0
  292. package/build/dist/Types/Monitor/MonitorStep.js +69 -0
  293. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  294. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js +21 -0
  295. package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js.map +1 -0
  296. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js +20 -0
  297. package/build/dist/Types/Monitor/MonitorStepHostMonitor.js.map +1 -0
  298. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js +21 -0
  299. package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js.map +1 -0
  300. package/build/dist/Types/Monitor/MonitorType.js +39 -0
  301. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  302. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +410 -0
  303. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -0
  304. package/build/dist/Types/Monitor/PodmanMetricCatalog.js +192 -0
  305. package/build/dist/Types/Monitor/PodmanMetricCatalog.js.map +1 -0
  306. package/build/dist/Types/Permission.js +420 -4
  307. package/build/dist/Types/Permission.js.map +1 -1
  308. package/build/dist/Types/Podman/PodmanInventoryExtractor.js +293 -0
  309. package/build/dist/Types/Podman/PodmanInventoryExtractor.js.map +1 -0
  310. package/build/dist/Types/Telemetry/EntityType.js +12 -0
  311. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  312. package/build/dist/Types/Telemetry/ServiceType.js +2 -0
  313. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  314. package/build/dist/UI/Components/Icon/Icon.js +16 -0
  315. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  316. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +30 -2
  317. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  318. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +22 -0
  319. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  320. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +6 -0
  321. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  322. package/build/dist/UI/Utils/TelemetryService.js +1 -0
  323. package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
  324. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js +55 -0
  325. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js.map +1 -0
  326. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js +46 -0
  327. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js.map +1 -0
  328. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js +55 -0
  329. package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js.map +1 -0
  330. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js +77 -0
  331. package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js.map +1 -0
  332. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js +71 -0
  333. package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js.map +1 -0
  334. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js +77 -0
  335. package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js.map +1 -0
  336. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js +68 -0
  337. package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js.map +1 -0
  338. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js +68 -0
  339. package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js.map +1 -0
  340. package/build/dist/Utils/Dashboard/Components/Index.js +28 -0
  341. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  342. package/build/dist/Utils/Telemetry/EntityKey.js +14 -0
  343. package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
  344. package/package.json +1 -1
@@ -0,0 +1,343 @@
1
+ import OneUptimeDate from "../Date";
2
+ import { JSONObject } from "../JSON";
3
+ import { ParsedPodmanResource } from "../../Server/Services/PodmanResourceService";
4
+
5
+ /*
6
+ * ------------------------------------------------------------------
7
+ * PodmanInventoryExtractor
8
+ * ------------------------------------------------------------------
9
+ *
10
+ * Parses a single inventory log record emitted by the OneUptime
11
+ * Podman Agent's snapshot script. The script polls the local Podman
12
+ * daemon every 5 minutes for containers / images / networks /
13
+ * volumes and emits one JSON object per line into a log file that
14
+ * the OTel filelog receiver forwards as an OTLP log.
15
+ *
16
+ * The agreed wire format is a JSON envelope:
17
+ *
18
+ * {
19
+ * "kind": "Container" | "Image" | "Network" | "Volume",
20
+ * "data": { ...native podman payload... }
21
+ * }
22
+ *
23
+ * The kind discriminator is set as a log record attribute by the
24
+ * agent's filelog operator chain, but we also keep it inside the
25
+ * envelope so the parser can sanity-check.
26
+ *
27
+ * Each kind has a small dedicated parser that pulls out the fields
28
+ * we promote to first-class columns on `PodmanResource` (name,
29
+ * containerId, imageName, state, labels, creation timestamp). The
30
+ * full payload is *not* persisted — it lives on the original log
31
+ * record in ClickHouse if a user ever needs the raw blob.
32
+ *
33
+ * ------------------------------------------------------------------
34
+ */
35
+
36
+ export const INVENTORY_KIND_ATTRIBUTE: string = "oneuptime.podman.kind";
37
+
38
+ export const INVENTORIED_PODMAN_KINDS: ReadonlyArray<string> = [
39
+ "Container",
40
+ "Image",
41
+ "Network",
42
+ "Volume",
43
+ ];
44
+
45
+ const INVENTORIED_KIND_SET: Set<string> = new Set(
46
+ INVENTORIED_PODMAN_KINDS.map((k: string) => {
47
+ return k.toLowerCase();
48
+ }),
49
+ );
50
+
51
+ export function isInventoriedPodmanKind(kind: string): boolean {
52
+ return INVENTORIED_KIND_SET.has(kind.toLowerCase());
53
+ }
54
+
55
+ /*
56
+ * Map a kind in any common form (lowercase plural, lowercase
57
+ * singular, or PascalCase) to the canonical PascalCase kind we store
58
+ * in the database. Returns null for anything we don't model.
59
+ */
60
+ export function canonicalPodmanKind(raw: string): string | null {
61
+ const trimmed: string = (raw || "").trim().toLowerCase();
62
+ if (!trimmed) {
63
+ return null;
64
+ }
65
+ const map: Record<string, string> = {
66
+ container: "Container",
67
+ containers: "Container",
68
+ image: "Image",
69
+ images: "Image",
70
+ network: "Network",
71
+ networks: "Network",
72
+ volume: "Volume",
73
+ volumes: "Volume",
74
+ };
75
+ return map[trimmed] || 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
+ return null;
96
+ }
97
+
98
+ function readJSONObject(obj: JSONObject, key: string): JSONObject | null {
99
+ const v: unknown = obj[key];
100
+ if (v && typeof v === "object" && !Array.isArray(v)) {
101
+ return v as JSONObject;
102
+ }
103
+ return null;
104
+ }
105
+
106
+ function parseTimestamp(raw: string | null): Date | null {
107
+ if (!raw) {
108
+ return null;
109
+ }
110
+ try {
111
+ const d: Date = OneUptimeDate.fromString(raw);
112
+ if (isNaN(d.getTime())) {
113
+ return null;
114
+ }
115
+ return d;
116
+ } catch {
117
+ return null;
118
+ }
119
+ }
120
+
121
+ /*
122
+ * Container shape emitted by `podman container ls --format json` plus
123
+ * a few enrichments the agent script adds:
124
+ * { Id, Names, Image, State, Status, CreatedAt, Labels }
125
+ *
126
+ * Names from the Podman CLI is a slash-prefixed comma-joined string
127
+ * ("/web,/web-1"). We strip the leading slash and take the first
128
+ * entry — that's what `docker_stats` reports as `container.name` in
129
+ * metric attributes, so the row keys stay consistent across paths.
130
+ */
131
+ function parseContainer(
132
+ data: JSONObject,
133
+ lastSeenAt: Date,
134
+ ): ParsedPodmanResource | null {
135
+ const rawNames: string | null = readString(data, "Names");
136
+ const rawName: string | null = readString(data, "Name");
137
+ const namesField: string = rawNames || rawName || "";
138
+ const firstName: string = namesField
139
+ .split(",")
140
+ .map((n: string) => {
141
+ return n.trim().replace(/^\//, "");
142
+ })
143
+ .filter((n: string) => {
144
+ return n.length > 0;
145
+ })[0]!;
146
+
147
+ if (!firstName) {
148
+ return null;
149
+ }
150
+
151
+ const idRaw: string | null = readString(data, "Id");
152
+ const containerId: string | null = idRaw ? idRaw.substring(0, 12) : null;
153
+ const imageName: string | null = readString(data, "Image");
154
+ const state: string | null = readString(data, "State");
155
+ const labels: JSONObject | null = readJSONObject(data, "Labels");
156
+ const created: Date | null = parseTimestamp(readString(data, "CreatedAt"));
157
+
158
+ return {
159
+ kind: "Container",
160
+ name: firstName,
161
+ containerId,
162
+ imageName,
163
+ state: state ? state.toLowerCase() : null,
164
+ labels,
165
+ resourceCreationTimestamp: created,
166
+ lastSeenAt,
167
+ };
168
+ }
169
+
170
+ /*
171
+ * Image shape from `podman image ls --format json`:
172
+ * { ID, Repository, Tag, CreatedAt, Labels }
173
+ *
174
+ * Name = Repository:Tag (matches what container.image.name emits).
175
+ * Skip dangling images (Repository=<none> with no tag) — they would
176
+ * collide on the unique key and are noise in a list view.
177
+ */
178
+ function parseImage(
179
+ data: JSONObject,
180
+ lastSeenAt: Date,
181
+ ): ParsedPodmanResource | null {
182
+ const repository: string | null = readString(data, "Repository");
183
+ const tag: string | null = readString(data, "Tag");
184
+ const explicitName: string | null = readString(data, "Name");
185
+
186
+ let name: string | null = explicitName;
187
+ if (!name && repository && repository !== "<none>") {
188
+ name = tag && tag !== "<none>" ? `${repository}:${tag}` : repository;
189
+ }
190
+
191
+ if (!name) {
192
+ return null;
193
+ }
194
+
195
+ const idRaw: string | null = readString(data, "ID") || readString(data, "Id");
196
+ const containerId: string | null = idRaw
197
+ ? idRaw.replace(/^sha256:/, "").substring(0, 12)
198
+ : null;
199
+ const labels: JSONObject | null = readJSONObject(data, "Labels");
200
+ const created: Date | null = parseTimestamp(readString(data, "CreatedAt"));
201
+
202
+ return {
203
+ kind: "Image",
204
+ name,
205
+ containerId,
206
+ imageName: null,
207
+ state: null,
208
+ labels,
209
+ resourceCreationTimestamp: created,
210
+ lastSeenAt,
211
+ };
212
+ }
213
+
214
+ /*
215
+ * Network shape from `podman network ls --format json`:
216
+ * { ID, Name, Driver, Scope, CreatedAt, Labels }
217
+ */
218
+ function parseNetwork(
219
+ data: JSONObject,
220
+ lastSeenAt: Date,
221
+ ): ParsedPodmanResource | null {
222
+ const name: string | null = readString(data, "Name");
223
+ if (!name) {
224
+ return null;
225
+ }
226
+ const idRaw: string | null = readString(data, "ID") || readString(data, "Id");
227
+ const driver: string | null = readString(data, "Driver");
228
+ const scope: string | null = readString(data, "Scope");
229
+ const labels: JSONObject | null = readJSONObject(data, "Labels");
230
+ const created: Date | null = parseTimestamp(readString(data, "CreatedAt"));
231
+
232
+ /*
233
+ * Driver and scope are surfaced in the State column in the widget
234
+ * (e.g. "bridge / local"). Encoded as "driver/scope" so we don't
235
+ * need a new column on the table.
236
+ */
237
+ const stateParts: Array<string> = [];
238
+ if (driver) {
239
+ stateParts.push(driver);
240
+ }
241
+ if (scope) {
242
+ stateParts.push(scope);
243
+ }
244
+
245
+ return {
246
+ kind: "Network",
247
+ name,
248
+ containerId: idRaw ? idRaw.substring(0, 12) : null,
249
+ imageName: null,
250
+ state: stateParts.length > 0 ? stateParts.join("/") : null,
251
+ labels,
252
+ resourceCreationTimestamp: created,
253
+ lastSeenAt,
254
+ };
255
+ }
256
+
257
+ /*
258
+ * Volume shape from `podman volume ls --format json`:
259
+ * { Name, Driver, Mountpoint, Scope, Labels, CreatedAt }
260
+ */
261
+ function parseVolume(
262
+ data: JSONObject,
263
+ lastSeenAt: Date,
264
+ ): ParsedPodmanResource | null {
265
+ const name: string | null = readString(data, "Name");
266
+ if (!name) {
267
+ return null;
268
+ }
269
+ const driver: string | null = readString(data, "Driver");
270
+ const scope: string | null = readString(data, "Scope");
271
+ const labels: JSONObject | null = readJSONObject(data, "Labels");
272
+ const created: Date | null = parseTimestamp(readString(data, "CreatedAt"));
273
+
274
+ const stateParts: Array<string> = [];
275
+ if (driver) {
276
+ stateParts.push(driver);
277
+ }
278
+ if (scope) {
279
+ stateParts.push(scope);
280
+ }
281
+
282
+ return {
283
+ kind: "Volume",
284
+ name,
285
+ containerId: null,
286
+ imageName: null,
287
+ state: stateParts.length > 0 ? stateParts.join("/") : null,
288
+ labels,
289
+ resourceCreationTimestamp: created,
290
+ lastSeenAt,
291
+ };
292
+ }
293
+
294
+ export interface ExtractedPodmanInventoryRecord {
295
+ resource: ParsedPodmanResource;
296
+ }
297
+
298
+ /**
299
+ * Parse a single inventory log line. Returns null when the body is
300
+ * malformed or the kind is not modeled — callers should swallow nulls
301
+ * silently rather than fail the whole batch.
302
+ */
303
+ export function extractPodmanInventoryResource(data: {
304
+ kind: string;
305
+ logBody: string;
306
+ lastSeenAt: Date;
307
+ }): ExtractedPodmanInventoryRecord | null {
308
+ const canonical: string | null = canonicalPodmanKind(data.kind);
309
+ if (!canonical) {
310
+ return null;
311
+ }
312
+
313
+ const body: JSONObject | null = parseLogBody(data.logBody);
314
+ if (!body) {
315
+ return null;
316
+ }
317
+
318
+ /*
319
+ * The agent wraps the native podman payload in `{ kind, data }`.
320
+ * Older snapshot lines or test inputs may be the raw payload — we
321
+ * accept either by pulling `data` if present, else using the body
322
+ * directly.
323
+ */
324
+ const inner: JSONObject =
325
+ (readJSONObject(body, "data") as JSONObject) || body;
326
+
327
+ let parsed: ParsedPodmanResource | null = null;
328
+ if (canonical === "Container") {
329
+ parsed = parseContainer(inner, data.lastSeenAt);
330
+ } else if (canonical === "Image") {
331
+ parsed = parseImage(inner, data.lastSeenAt);
332
+ } else if (canonical === "Network") {
333
+ parsed = parseNetwork(inner, data.lastSeenAt);
334
+ } else if (canonical === "Volume") {
335
+ parsed = parseVolume(inner, data.lastSeenAt);
336
+ }
337
+
338
+ if (!parsed) {
339
+ return null;
340
+ }
341
+
342
+ return { resource: parsed };
343
+ }
@@ -38,6 +38,18 @@ enum EntityType {
38
38
  ProxmoxNode = "proxmox.node",
39
39
  ProxmoxGuest = "proxmox.guest",
40
40
  CephCluster = "ceph.cluster",
41
+ /*
42
+ * Docker Swarm types are OneUptime-defined (no upstream semconv
43
+ * exists) but follow the same dotted naming convention. The
44
+ * identifying attributes (`docker.swarm.cluster.name`,
45
+ * `docker.swarm.node.id`, `docker.swarm.service.id`) are stamped by
46
+ * the OneUptime Docker Swarm agent's collector config / inventory
47
+ * poller.
48
+ */
49
+ DockerSwarmCluster = "docker.swarm.cluster",
50
+ DockerSwarmNode = "docker.swarm.node",
51
+ DockerSwarmService = "docker.swarm.service",
52
+ DockerSwarmTask = "docker.swarm.task",
41
53
  TelemetrySdk = "telemetry.sdk",
42
54
  }
43
55
 
@@ -13,9 +13,11 @@ enum ServiceType {
13
13
  Incident = "Incident",
14
14
  Host = "Host",
15
15
  DockerHost = "DockerHost",
16
+ PodmanHost = "PodmanHost",
16
17
  KubernetesCluster = "KubernetesCluster",
17
18
  ProxmoxCluster = "ProxmoxCluster",
18
19
  CephCluster = "CephCluster",
20
+ DockerSwarmCluster = "DockerSwarmCluster",
19
21
  ServerlessFunction = "ServerlessFunction",
20
22
  CloudResource = "CloudResource",
21
23
  RealUserMonitor = "RealUserMonitor",
@@ -2894,6 +2894,63 @@ const Icon: FunctionComponent<ComponentProps> = ({
2894
2894
  />
2895
2895
  </>,
2896
2896
  );
2897
+ } else if (icon === IconProp.Podman) {
2898
+ /*
2899
+ * Podman glyph — a pod (rounded enclosure) grouping containers, with a
2900
+ * small seal-head nod to Podman's mascot. Intentionally a hand-drawn
2901
+ * generic mark (not the official Podman seal logo / trademark), matching
2902
+ * the generic-glyph convention used for Kubernetes/Docker above and
2903
+ * deliberately distinct from the Docker whale.
2904
+ */
2905
+ return getSvgWrapper(
2906
+ <>
2907
+ {/* Pod enclosure */}
2908
+ <rect
2909
+ x="3"
2910
+ y="8"
2911
+ width="18"
2912
+ height="11"
2913
+ rx="2"
2914
+ strokeLinecap="round"
2915
+ strokeLinejoin="round"
2916
+ />
2917
+ {/* Grouped containers inside the pod */}
2918
+ <rect
2919
+ x="6"
2920
+ y="12"
2921
+ width="3.5"
2922
+ height="4"
2923
+ rx="0.4"
2924
+ strokeLinecap="round"
2925
+ strokeLinejoin="round"
2926
+ />
2927
+ <rect
2928
+ x="10.25"
2929
+ y="12"
2930
+ width="3.5"
2931
+ height="4"
2932
+ rx="0.4"
2933
+ strokeLinecap="round"
2934
+ strokeLinejoin="round"
2935
+ />
2936
+ <rect
2937
+ x="14.5"
2938
+ y="12"
2939
+ width="3.5"
2940
+ height="4"
2941
+ rx="0.4"
2942
+ strokeLinecap="round"
2943
+ strokeLinejoin="round"
2944
+ />
2945
+ {/* Seal head peeking over the pod */}
2946
+ <circle cx="17" cy="5.5" r="2" />
2947
+ <path
2948
+ strokeLinecap="round"
2949
+ strokeLinejoin="round"
2950
+ d="M19 6.2c1 0.1 1.8-0.2 2.4-0.9"
2951
+ />
2952
+ </>,
2953
+ );
2897
2954
  } else if (icon === IconProp.Proxmox) {
2898
2955
  /*
2899
2956
  * Generic hypervisor glyph — VM tiles running on a server base.
@@ -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") {
@@ -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 {
@@ -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",