@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.
- package/Models/DatabaseModels/Alert.ts +166 -0
- package/Models/DatabaseModels/AlertLabelRule.ts +38 -0
- package/Models/DatabaseModels/AlertOwnerRule.ts +38 -0
- package/Models/DatabaseModels/DockerSwarmCluster.ts +989 -0
- package/Models/DatabaseModels/DockerSwarmClusterLabelRule.ts +514 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.ts +487 -0
- package/Models/DatabaseModels/DockerSwarmClusterOwnerUser.ts +486 -0
- package/Models/DatabaseModels/DockerSwarmResource.ts +750 -0
- package/Models/DatabaseModels/Incident.ts +166 -0
- package/Models/DatabaseModels/IncidentLabelRule.ts +38 -0
- package/Models/DatabaseModels/IncidentOwnerRule.ts +38 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +56 -0
- package/Models/DatabaseModels/Index.ts +24 -0
- package/Models/DatabaseModels/PodmanHost.ts +859 -0
- package/Models/DatabaseModels/PodmanHostLabelRule.ts +514 -0
- package/Models/DatabaseModels/PodmanHostOwnerRule.ts +596 -0
- package/Models/DatabaseModels/PodmanHostOwnerTeam.ts +487 -0
- package/Models/DatabaseModels/PodmanHostOwnerUser.ts +486 -0
- package/Models/DatabaseModels/PodmanResource.ts +498 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +110 -0
- package/Models/DatabaseModels/ScheduledMaintenanceLabelRule.ts +38 -0
- package/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.ts +38 -0
- package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +56 -0
- package/Models/DatabaseModels/TelemetryException.ts +2 -0
- package/Server/API/DashboardAPI.ts +89 -0
- package/Server/API/DockerSwarmResourceAPI.ts +137 -0
- package/Server/API/TelemetryAPI.ts +8 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.ts +3199 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Services/AlertLabelRuleEngineService.ts +29 -0
- package/Server/Services/AlertOwnerRuleEngineService.ts +67 -0
- package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +214 -0
- package/Server/Services/DockerSwarmClusterLabelRuleService.ts +14 -0
- package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +232 -0
- package/Server/Services/DockerSwarmClusterOwnerRuleService.ts +14 -0
- package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +10 -0
- package/Server/Services/DockerSwarmClusterOwnerUserService.ts +10 -0
- package/Server/Services/DockerSwarmClusterService.ts +404 -0
- package/Server/Services/DockerSwarmResourceService.ts +381 -0
- package/Server/Services/ExceptionAggregationService.ts +1 -0
- package/Server/Services/IncidentLabelRuleEngineService.ts +27 -0
- package/Server/Services/IncidentOwnerRuleEngineService.ts +67 -0
- package/Server/Services/IncidentService.ts +11 -0
- package/Server/Services/Index.ts +14 -0
- package/Server/Services/LogAggregationService.ts +1 -0
- package/Server/Services/MetricAggregationService.ts +1 -0
- package/Server/Services/OpenTelemetryIngestService.ts +37 -0
- package/Server/Services/PodmanHostLabelRuleEngineService.ts +198 -0
- package/Server/Services/PodmanHostLabelRuleService.ts +14 -0
- package/Server/Services/PodmanHostOwnerRuleEngineService.ts +216 -0
- package/Server/Services/PodmanHostOwnerRuleService.ts +14 -0
- package/Server/Services/PodmanHostOwnerTeamService.ts +10 -0
- package/Server/Services/PodmanHostOwnerUserService.ts +10 -0
- package/Server/Services/PodmanHostService.ts +368 -0
- package/Server/Services/PodmanResourceService.ts +310 -0
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +29 -0
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +67 -0
- package/Server/Services/TelemetryUsageBillingService.ts +18 -0
- package/Server/Services/TraceAggregationService.ts +1 -0
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +13 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +10 -0
- package/Server/Utils/Monitor/MonitorClusterContext.ts +35 -6
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +306 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +45 -0
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +17 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +3 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
- package/Server/Utils/Telemetry/ResourceFacetResolver.ts +49 -0
- package/Server/Utils/Telemetry/Telemetry.ts +10 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +22 -0
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +1 -0
- package/Tests/Types/DockerSwarm/DockerSwarmInventoryExtractor.test.ts +667 -0
- package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +528 -0
- package/Types/Dashboard/DashboardComponentType.ts +7 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +2 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.ts +17 -0
- package/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.ts +17 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.ts +16 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.ts +16 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.ts +15 -0
- package/Types/Dashboard/DashboardTemplates.ts +194 -0
- package/Types/DockerSwarm/DockerSwarmInventoryExtractor.ts +452 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Monitor/DockerSwarmAlertTemplates.ts +461 -0
- package/Types/Monitor/DockerSwarmMetricCatalog.ts +139 -0
- package/Types/Monitor/HostAlertTemplates.ts +455 -0
- package/Types/Monitor/HostMetricCatalog.ts +177 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +21 -0
- package/Types/Monitor/MonitorStep.ts +99 -0
- package/Types/Monitor/MonitorStepDockerSwarmMonitor.ts +74 -0
- package/Types/Monitor/MonitorStepHostMonitor.ts +30 -0
- package/Types/Monitor/MonitorStepPodmanMonitor.ts +38 -0
- package/Types/Monitor/MonitorType.ts +42 -0
- package/Types/Monitor/PodmanAlertTemplates.ts +507 -0
- package/Types/Monitor/PodmanMetricCatalog.ts +226 -0
- package/Types/Permission.ts +465 -4
- package/Types/Podman/PodmanInventoryExtractor.ts +343 -0
- package/Types/Telemetry/EntityType.ts +12 -0
- package/Types/Telemetry/ServiceType.ts +2 -0
- package/UI/Components/Icon/Icon.tsx +57 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +6 -0
- package/UI/Utils/TelemetryService.ts +1 -0
- package/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.ts +70 -0
- package/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.ts +61 -0
- package/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.ts +71 -0
- package/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.ts +100 -0
- package/Utils/Dashboard/Components/DashboardPodmanHostListComponent.ts +88 -0
- package/Utils/Dashboard/Components/DashboardPodmanImageListComponent.ts +97 -0
- package/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.ts +87 -0
- package/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.ts +87 -0
- package/Utils/Dashboard/Components/Index.ts +51 -0
- package/Utils/Telemetry/EntityKey.ts +18 -0
- package/build/dist/Models/DatabaseModels/Alert.js +162 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js +39 -0
- package/build/dist/Models/DatabaseModels/AlertLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js +39 -0
- package/build/dist/Models/DatabaseModels/AlertOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +1018 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmClusterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmResource.js +787 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +162 -0
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js +39 -0
- package/build/dist/Models/DatabaseModels/IncidentLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js +39 -0
- package/build/dist/Models/DatabaseModels/IncidentOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +54 -0
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +24 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/PodmanHost.js +885 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/PodmanHostLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/PodmanHostOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanResource.js +526 -0
- package/build/dist/Models/DatabaseModels/PodmanResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +108 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js +39 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceLabelRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js +39 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceOwnerRule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +54 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TelemetryException.js +2 -0
- package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +89 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/DockerSwarmResourceAPI.js +100 -0
- package/build/dist/Server/API/DockerSwarmResourceAPI.js.map +1 -0
- package/build/dist/Server/API/TelemetryAPI.js +8 -1
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js +1100 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js +30 -4
- package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +62 -5
- package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +168 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/DockerSwarmClusterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +188 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +9 -0
- package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmClusterService.js +353 -0
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -0
- package/build/dist/Server/Services/DockerSwarmResourceService.js +258 -0
- package/build/dist/Server/Services/DockerSwarmResourceService.js.map +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +28 -4
- package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +62 -5
- package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +8 -0
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +14 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +1 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +1 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +43 -13
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +166 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleService.js +13 -0
- package/build/dist/Server/Services/PodmanHostLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +186 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/PodmanHostOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostOwnerUserService.js +9 -0
- package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/PodmanHostService.js +319 -0
- package/build/dist/Server/Services/PodmanHostService.js.map +1 -0
- package/build/dist/Server/Services/PodmanResourceService.js +196 -0
- package/build/dist/Server/Services/PodmanResourceService.js.map +1 -0
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +30 -4
- package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +62 -5
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +13 -0
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +1 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +13 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +8 -0
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +35 -7
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +194 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +35 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +3 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +16 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +30 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +6 -0
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +18 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponentType.js +7 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmNodeListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardDockerSwarmServiceListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanContainerListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanHostListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanImageListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanNetworkListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardPodmanVolumeListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +168 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js +359 -0
- package/build/dist/Types/DockerSwarm/DockerSwarmInventoryExtractor.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js +358 -0
- package/build/dist/Types/Monitor/DockerSwarmAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js +103 -0
- package/build/dist/Types/Monitor/DockerSwarmMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/HostAlertTemplates.js +365 -0
- package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/HostMetricCatalog.js +138 -0
- package/build/dist/Types/Monitor/HostMetricCatalog.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStep.js +69 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js +21 -0
- package/build/dist/Types/Monitor/MonitorStepDockerSwarmMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepHostMonitor.js +20 -0
- package/build/dist/Types/Monitor/MonitorStepHostMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js +21 -0
- package/build/dist/Types/Monitor/MonitorStepPodmanMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +39 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js +410 -0
- package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/PodmanMetricCatalog.js +192 -0
- package/build/dist/Types/Monitor/PodmanMetricCatalog.js.map +1 -0
- package/build/dist/Types/Permission.js +420 -4
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Podman/PodmanInventoryExtractor.js +293 -0
- package/build/dist/Types/Podman/PodmanInventoryExtractor.js.map +1 -0
- package/build/dist/Types/Telemetry/EntityType.js +12 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ServiceType.js +2 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +16 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +30 -2
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +22 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +6 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +1 -0
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js +55 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmNodeListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js +46 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js +55 -0
- package/build/dist/Utils/Dashboard/Components/DashboardDockerSwarmServiceListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js +77 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanContainerListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js +71 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanHostListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js +77 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanImageListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js +68 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanNetworkListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js +68 -0
- package/build/dist/Utils/Dashboard/Components/DashboardPodmanVolumeListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +28 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityKey.js +14 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- 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 [
|
|
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",
|