@oneuptime/common 11.0.1 → 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 +276 -0
- package/Models/DatabaseModels/AlertLabelRule.ts +38 -0
- package/Models/DatabaseModels/AlertOwnerRule.ts +38 -0
- package/Models/DatabaseModels/CephCluster.ts +964 -0
- package/Models/DatabaseModels/CephClusterLabelRule.ts +514 -0
- package/Models/DatabaseModels/CephClusterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/CephClusterOwnerTeam.ts +487 -0
- package/Models/DatabaseModels/CephClusterOwnerUser.ts +486 -0
- package/Models/DatabaseModels/CephResource.ts +809 -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/Host.ts +64 -0
- package/Models/DatabaseModels/Incident.ts +276 -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 +48 -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/ProxmoxCluster.ts +943 -0
- package/Models/DatabaseModels/ProxmoxClusterLabelRule.ts +514 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerTeam.ts +487 -0
- package/Models/DatabaseModels/ProxmoxClusterOwnerUser.ts +486 -0
- package/Models/DatabaseModels/ProxmoxResource.ts +726 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +220 -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/BillingInvoiceAPI.ts +47 -7
- package/Server/API/CephResourceAPI.ts +134 -0
- package/Server/API/DashboardAPI.ts +135 -0
- package/Server/API/DockerSwarmResourceAPI.ts +137 -0
- package/Server/API/ProjectAPI.ts +15 -0
- package/Server/API/ProxmoxResourceAPI.ts +132 -0
- package/Server/API/ResellerPlanAPI.ts +17 -0
- package/Server/API/TelemetryAPI.ts +8 -1
- package/Server/Infrastructure/GlobalCache.ts +8 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.ts +163 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781587937032-MigrationName.ts +3199 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781600000000-AddProxmoxCephV2Columns.ts +211 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.ts +590 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.ts +64 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Infrastructure/Redis.ts +40 -12
- package/Server/Services/AlertLabelRuleEngineService.ts +29 -0
- package/Server/Services/AlertOwnerRuleEngineService.ts +67 -0
- package/Server/Services/AnalyticsDatabaseService.ts +1 -1
- package/Server/Services/BillingService.ts +109 -21
- package/Server/Services/CephClusterLabelRuleEngineService.ts +200 -0
- package/Server/Services/CephClusterLabelRuleService.ts +14 -0
- package/Server/Services/CephClusterOwnerRuleEngineService.ts +218 -0
- package/Server/Services/CephClusterOwnerRuleService.ts +14 -0
- package/Server/Services/CephClusterOwnerTeamService.ts +10 -0
- package/Server/Services/CephClusterOwnerUserService.ts +10 -0
- package/Server/Services/CephClusterService.ts +401 -0
- package/Server/Services/CephResourceService.ts +383 -0
- package/Server/Services/CloudResourceService.ts +11 -3
- package/Server/Services/DockerHostService.ts +11 -3
- 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 +3 -0
- package/Server/Services/HostService.ts +11 -3
- 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 +38 -0
- package/Server/Services/KubernetesClusterService.ts +11 -3
- package/Server/Services/LogAggregationService.ts +3 -0
- package/Server/Services/MetricAggregationService.ts +3 -0
- package/Server/Services/OpenTelemetryIngestService.ts +73 -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/ProxmoxClusterLabelRuleEngineService.ts +204 -0
- package/Server/Services/ProxmoxClusterLabelRuleService.ts +14 -0
- package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +222 -0
- package/Server/Services/ProxmoxClusterOwnerRuleService.ts +14 -0
- package/Server/Services/ProxmoxClusterOwnerTeamService.ts +10 -0
- package/Server/Services/ProxmoxClusterOwnerUserService.ts +10 -0
- package/Server/Services/ProxmoxClusterService.ts +382 -0
- package/Server/Services/ProxmoxResourceService.ts +404 -0
- package/Server/Services/RumApplicationService.ts +11 -3
- package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +29 -0
- package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +67 -0
- package/Server/Services/ServerlessFunctionService.ts +11 -3
- package/Server/Services/TelemetryUsageBillingService.ts +59 -3
- package/Server/Services/TraceAggregationService.ts +3 -0
- package/Server/Types/AnalyticsDatabase/AggregateBy.ts +8 -23
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +13 -0
- package/Server/Utils/Monitor/MonitorAlert.ts +55 -0
- package/Server/Utils/Monitor/MonitorClusterContext.ts +158 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +650 -4
- package/Server/Utils/Monitor/MonitorIncident.ts +175 -7
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +56 -6
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +6 -1
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +59 -0
- package/Server/Utils/Profiling.ts +37 -2
- package/Server/Utils/Telemetry/EntityRegistry.ts +4 -0
- package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +1096 -0
- package/Server/Utils/Telemetry/ResourceFacetResolver.ts +49 -0
- package/Server/Utils/Telemetry/Telemetry.ts +10 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +107 -0
- package/Server/Utils/Telemetry.ts +8 -19
- package/Tests/Server/API/BillingInvoiceAPI.test.ts +194 -0
- package/Tests/Server/API/ProjectAPI.test.ts +91 -0
- package/Tests/Server/API/ResellerPlanAPI.test.ts +207 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +100 -0
- package/Tests/Server/Services/BillingService.test.ts +323 -0
- package/Tests/Server/Services/CephResourceService.test.ts +264 -0
- package/Tests/Server/Services/ProxmoxResourceService.test.ts +326 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +322 -0
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +14 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.test.ts +879 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +196 -0
- package/Tests/Types/DockerSwarm/DockerSwarmInventoryExtractor.test.ts +667 -0
- package/Tests/Types/Monitor/CephAlertTemplates.test.ts +1231 -0
- package/Tests/Types/Monitor/DockerSwarmAlertTemplates.test.ts +528 -0
- package/Tests/Types/Monitor/ProxmoxAlertTemplates.test.ts +732 -0
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +49 -0
- package/Tests/Utils/Telemetry/HeartbeatAvailability.test.ts +423 -0
- package/Types/BaseDatabase/AggregationIntervalUtil.ts +74 -0
- package/Types/Dashboard/DashboardComponentType.ts +11 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +4 -0
- package/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.ts +15 -0
- package/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.ts +14 -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/DashboardComponents/DashboardProxmoxGuestListComponent.ts +17 -0
- package/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.ts +16 -0
- package/Types/Dashboard/DashboardTemplates.ts +640 -0
- package/Types/DockerSwarm/DockerSwarmInventoryExtractor.ts +452 -0
- package/Types/Icon/IconProp.ts +3 -0
- package/Types/Monitor/CephAlertTemplates.ts +1647 -0
- package/Types/Monitor/CephMetricCatalog.ts +409 -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 +65 -0
- package/Types/Monitor/MonitorStep.ts +163 -0
- package/Types/Monitor/MonitorStepCephMonitor.ts +57 -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/MonitorStepProxmoxMonitor.ts +81 -0
- package/Types/Monitor/MonitorType.ts +71 -1
- package/Types/Monitor/PodmanAlertTemplates.ts +507 -0
- package/Types/Monitor/PodmanMetricCatalog.ts +226 -0
- package/Types/Monitor/ProxmoxAlertTemplates.ts +899 -0
- package/Types/Monitor/ProxmoxMetricCatalog.ts +382 -0
- package/Types/Permission.ts +1029 -104
- package/Types/Podman/PodmanInventoryExtractor.ts +343 -0
- package/Types/Telemetry/EntityType.ts +23 -0
- package/Types/Telemetry/ServiceType.ts +4 -0
- package/UI/Components/Icon/Icon.tsx +141 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +44 -1
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +28 -0
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +15 -5
- package/UI/Utils/Telemetry/Telemetry.ts +16 -21
- package/UI/Utils/TelemetryService.ts +8 -3
- package/Utils/Dashboard/Components/DashboardCephOsdListComponent.ts +63 -0
- package/Utils/Dashboard/Components/DashboardCephPoolListComponent.ts +32 -0
- package/Utils/Dashboard/Components/DashboardCephResourceListShared.ts +61 -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/DashboardProxmoxGuestListComponent.ts +69 -0
- package/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.ts +55 -0
- package/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.ts +61 -0
- package/Utils/Dashboard/Components/Index.ts +79 -0
- package/Utils/Telemetry/EntityKey.ts +53 -0
- package/Utils/Telemetry/EntityRelationship.ts +6 -0
- package/Utils/Telemetry/HeartbeatAvailability.ts +262 -0
- package/build/dist/Models/DatabaseModels/Alert.js +270 -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/CephCluster.js +992 -0
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -0
- package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/CephClusterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/CephClusterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/CephClusterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/CephClusterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/CephResource.js +846 -0
- package/build/dist/Models/DatabaseModels/CephResource.js.map +1 -0
- 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/Host.js +63 -0
- package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js +270 -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 +48 -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/ProxmoxCluster.js +967 -0
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/ProxmoxClusterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js +761 -0
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +216 -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/BillingInvoiceAPI.js +35 -5
- package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
- package/build/dist/Server/API/CephResourceAPI.js +98 -0
- package/build/dist/Server/API/CephResourceAPI.js.map +1 -0
- package/build/dist/Server/API/DashboardAPI.js +135 -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/ProjectAPI.js +11 -0
- package/build/dist/Server/API/ProjectAPI.js.map +1 -1
- package/build/dist/Server/API/ProxmoxResourceAPI.js +95 -0
- package/build/dist/Server/API/ProxmoxResourceAPI.js.map +1 -0
- package/build/dist/Server/API/ResellerPlanAPI.js +17 -3
- package/build/dist/Server/API/ResellerPlanAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +8 -1
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +7 -2
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.js +76 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781500000000-AddProxmoxAndCephClusterTables.js.map +1 -0
- 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/1781600000000-AddProxmoxCephV2Columns.js +108 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000000-AddProxmoxCephV2Columns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.js +253 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781600000001-AddProxmoxCephActivityAndRules.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.js +43 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1781700000000-AddProxmoxCephV3Columns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Redis.js +31 -8
- package/build/dist/Server/Infrastructure/Redis.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/AnalyticsDatabaseService.js +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +85 -23
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +166 -0
- package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/CephClusterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/CephClusterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +186 -0
- package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/CephClusterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/CephClusterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/CephClusterOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/CephClusterOwnerUserService.js +9 -0
- package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/CephClusterService.js +353 -0
- package/build/dist/Server/Services/CephClusterService.js.map +1 -0
- package/build/dist/Server/Services/CephResourceService.js +257 -0
- package/build/dist/Server/Services/CephResourceService.js.map +1 -0
- package/build/dist/Server/Services/CloudResourceService.js +10 -2
- package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +10 -2
- package/build/dist/Server/Services/DockerHostService.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 +3 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +10 -2
- package/build/dist/Server/Services/HostService.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 +38 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +10 -2
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +3 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +3 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +69 -9
- 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/ProxmoxClusterLabelRuleEngineService.js +166 -0
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/ProxmoxClusterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +186 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +9 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +9 -0
- package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxClusterService.js +337 -0
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -0
- package/build/dist/Server/Services/ProxmoxResourceService.js +285 -0
- package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -0
- package/build/dist/Server/Services/RumApplicationService.js +10 -2
- package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
- 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/ServerlessFunctionService.js +10 -2
- package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +43 -3
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +3 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.js +8 -25
- package/build/dist/Server/Types/AnalyticsDatabase/AggregateBy.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 +44 -0
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +118 -0
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +422 -4
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +137 -8
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +32 -6
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +6 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +39 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Profiling.js +24 -3
- package/build/dist/Server/Utils/Profiling.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +854 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -0
- 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 +80 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry.js +8 -10
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js +69 -0
- package/build/dist/Types/BaseDatabase/AggregationIntervalUtil.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +11 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +4 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephOsdListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardCephPoolListComponent.js.map +1 -0
- 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/DashboardComponents/DashboardProxmoxGuestListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxGuestListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardProxmoxNodeListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js +562 -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 +3 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/CephAlertTemplates.js +1379 -0
- package/build/dist/Types/Monitor/CephAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/CephMetricCatalog.js +353 -0
- package/build/dist/Types/Monitor/CephMetricCatalog.js.map +1 -0
- 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 +115 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepCephMonitor.js +34 -0
- package/build/dist/Types/Monitor/MonitorStepCephMonitor.js.map +1 -0
- 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/MonitorStepProxmoxMonitor.js +36 -0
- package/build/dist/Types/Monitor/MonitorStepProxmoxMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +66 -1
- 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/Monitor/ProxmoxAlertTemplates.js +743 -0
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/ProxmoxMetricCatalog.js +320 -0
- package/build/dist/Types/Monitor/ProxmoxMetricCatalog.js.map +1 -0
- package/build/dist/Types/Permission.js +824 -0
- 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 +23 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ServiceType.js +4 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +49 -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 +11 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Utils/Telemetry/Telemetry.js +11 -10
- package/build/dist/UI/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +6 -2
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardCephOsdListComponent.js +50 -0
- package/build/dist/Utils/Dashboard/Components/DashboardCephOsdListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardCephPoolListComponent.js +27 -0
- package/build/dist/Utils/Dashboard/Components/DashboardCephPoolListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardCephResourceListShared.js +46 -0
- package/build/dist/Utils/Dashboard/Components/DashboardCephResourceListShared.js.map +1 -0
- 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/DashboardProxmoxGuestListComponent.js +55 -0
- package/build/dist/Utils/Dashboard/Components/DashboardProxmoxGuestListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.js +42 -0
- package/build/dist/Utils/Dashboard/Components/DashboardProxmoxNodeListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.js +46 -0
- package/build/dist/Utils/Dashboard/Components/DashboardProxmoxResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +44 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityKey.js +41 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +3 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
- package/build/dist/Utils/Telemetry/HeartbeatAvailability.js +174 -0
- package/build/dist/Utils/Telemetry/HeartbeatAvailability.js.map +1 -0
- package/package.json +29 -21
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/ProxmoxResource";
|
|
3
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
4
|
+
import ObjectID from "../../Types/ObjectID";
|
|
5
|
+
import OneUptimeDate from "../../Types/Date";
|
|
6
|
+
import QueryHelper from "../Types/Database/QueryHelper";
|
|
7
|
+
import logger from "../Utils/Logger";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* ------------------------------------------------------------------
|
|
11
|
+
* ProxmoxResourceService
|
|
12
|
+
*
|
|
13
|
+
* Writes and reads the Proxmox inventory table populated by the
|
|
14
|
+
* telemetry ingest path. Callers are either:
|
|
15
|
+
* - OtelMetricsIngestService (bulkUpsert + bulkUpdateLatestMetrics,
|
|
16
|
+
* from the pve_* snapshot scan in processMetricsAsync)
|
|
17
|
+
* - CleanupStaleResources worker (deleteStaleForCluster)
|
|
18
|
+
* - ProxmoxResourceAPI / the dashboard pages (reads via the
|
|
19
|
+
* inherited DatabaseService CRUD)
|
|
20
|
+
*
|
|
21
|
+
* Identity + status and the latest-metric mirror both arrive on the
|
|
22
|
+
* same metric scrape (unlike K8s, which needs a separate k8sobjects
|
|
23
|
+
* log stream for identity), so both writes happen in the same flush.
|
|
24
|
+
*
|
|
25
|
+
* ------------------------------------------------------------------
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
export interface ParsedProxmoxResource {
|
|
29
|
+
kind: string; // Node | Guest | Storage
|
|
30
|
+
externalId: string; // raw pve `id` label, e.g. node/pve1, qemu/100
|
|
31
|
+
name: string | null;
|
|
32
|
+
vmid: number | null;
|
|
33
|
+
guestType: string | null; // qemu | lxc
|
|
34
|
+
parentNodeName: string | null;
|
|
35
|
+
isUp: boolean | null;
|
|
36
|
+
haState: string | null;
|
|
37
|
+
onboot: boolean | null;
|
|
38
|
+
/*
|
|
39
|
+
* WI-24 backup coverage: true = covered by at least one backup job,
|
|
40
|
+
* false = a pve_not_backed_up_info series carried this guest's id,
|
|
41
|
+
* null = batch lacked the backup-info collector output (keeps the
|
|
42
|
+
* last-known value via COALESCE) or non-Guest kind.
|
|
43
|
+
*/
|
|
44
|
+
isBackedUp: boolean | null;
|
|
45
|
+
uptimeSeconds: number | null;
|
|
46
|
+
lastSeenAt: Date;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface ProxmoxResourceLatestMetric {
|
|
50
|
+
kind: string;
|
|
51
|
+
externalId: string;
|
|
52
|
+
cpuPercent: number | null;
|
|
53
|
+
memoryBytes: number | null;
|
|
54
|
+
maxMemoryBytes: number | null;
|
|
55
|
+
memoryPercent: number | null;
|
|
56
|
+
diskBytes: number | null;
|
|
57
|
+
maxDiskBytes: number | null;
|
|
58
|
+
observedAt: Date;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface ProxmoxInventorySummary {
|
|
62
|
+
countsByKind: Record<string, number>;
|
|
63
|
+
nodeOnlineCount: number;
|
|
64
|
+
guestRunningCount: number;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const UPSERT_BATCH_SIZE: number = 500;
|
|
68
|
+
const STALE_DELETE_WARN_THRESHOLD: number = 100;
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
* Column order used by bulkUpsert() and its generated parameter tuples.
|
|
72
|
+
* Keep this and the INSERT column list in perfect sync.
|
|
73
|
+
*/
|
|
74
|
+
const UPSERT_COLUMNS: Array<string> = [
|
|
75
|
+
"projectId",
|
|
76
|
+
"proxmoxClusterId",
|
|
77
|
+
"kind",
|
|
78
|
+
"externalId",
|
|
79
|
+
"name",
|
|
80
|
+
"vmid",
|
|
81
|
+
"guestType",
|
|
82
|
+
"parentNodeName",
|
|
83
|
+
"isUp",
|
|
84
|
+
"haState",
|
|
85
|
+
"onboot",
|
|
86
|
+
"isBackedUp",
|
|
87
|
+
"uptimeSeconds",
|
|
88
|
+
"lastSeenAt",
|
|
89
|
+
"version",
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
export class Service extends DatabaseService<Model> {
|
|
93
|
+
public constructor() {
|
|
94
|
+
super(Model);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Upsert a batch of parsed resources for a single (project, cluster)
|
|
99
|
+
* pair. Uses ON CONFLICT on the UNIQUE (projectId, proxmoxClusterId,
|
|
100
|
+
* kind, externalId) index with a dominance guard on lastSeenAt so
|
|
101
|
+
* out-of-order ingest never regresses a newer snapshot.
|
|
102
|
+
*
|
|
103
|
+
* Identity/status columns COALESCE against the existing row (unlike
|
|
104
|
+
* the K8s upsert, which overwrites): a pve-exporter batch is usually
|
|
105
|
+
* a complete scrape, but a batch that happens to lack an info series
|
|
106
|
+
* (e.g. only pve_up made it through a pipeline filter) must not blank
|
|
107
|
+
* name/vmid/haState that an earlier batch already filled.
|
|
108
|
+
*/
|
|
109
|
+
@CaptureSpan()
|
|
110
|
+
public async bulkUpsert(data: {
|
|
111
|
+
projectId: ObjectID;
|
|
112
|
+
proxmoxClusterId: ObjectID;
|
|
113
|
+
resources: Array<ParsedProxmoxResource>;
|
|
114
|
+
}): Promise<void> {
|
|
115
|
+
if (data.resources.length === 0) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Chunk to keep individual statement parameter counts reasonable.
|
|
120
|
+
for (let i: number = 0; i < data.resources.length; i += UPSERT_BATCH_SIZE) {
|
|
121
|
+
const chunk: Array<ParsedProxmoxResource> = data.resources.slice(
|
|
122
|
+
i,
|
|
123
|
+
i + UPSERT_BATCH_SIZE,
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
const valueFragments: Array<string> = [];
|
|
127
|
+
const params: Array<unknown> = [];
|
|
128
|
+
let paramIndex: number = 1;
|
|
129
|
+
|
|
130
|
+
for (const r of chunk) {
|
|
131
|
+
const placeholders: Array<string> = [];
|
|
132
|
+
for (let c: number = 0; c < UPSERT_COLUMNS.length; c++) {
|
|
133
|
+
placeholders.push(`$${paramIndex++}`);
|
|
134
|
+
}
|
|
135
|
+
valueFragments.push(`(${placeholders.join(", ")})`);
|
|
136
|
+
|
|
137
|
+
params.push(
|
|
138
|
+
data.projectId.toString(),
|
|
139
|
+
data.proxmoxClusterId.toString(),
|
|
140
|
+
r.kind,
|
|
141
|
+
r.externalId,
|
|
142
|
+
r.name,
|
|
143
|
+
r.vmid,
|
|
144
|
+
r.guestType,
|
|
145
|
+
r.parentNodeName,
|
|
146
|
+
r.isUp,
|
|
147
|
+
r.haState,
|
|
148
|
+
r.onboot,
|
|
149
|
+
r.isBackedUp,
|
|
150
|
+
r.uptimeSeconds !== null ? Math.trunc(r.uptimeSeconds) : null,
|
|
151
|
+
r.lastSeenAt,
|
|
152
|
+
0, // version (BaseModel @VersionColumn)
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const sql: string = `
|
|
157
|
+
INSERT INTO "ProxmoxResource" (
|
|
158
|
+
"projectId", "proxmoxClusterId", "kind", "externalId",
|
|
159
|
+
"name", "vmid", "guestType", "parentNodeName",
|
|
160
|
+
"isUp", "haState", "onboot", "isBackedUp", "uptimeSeconds",
|
|
161
|
+
"lastSeenAt", "version"
|
|
162
|
+
)
|
|
163
|
+
VALUES ${valueFragments.join(", ")}
|
|
164
|
+
ON CONFLICT ("projectId", "proxmoxClusterId", "kind", "externalId")
|
|
165
|
+
DO UPDATE SET
|
|
166
|
+
"name" = COALESCE(EXCLUDED."name", "ProxmoxResource"."name"),
|
|
167
|
+
"vmid" = COALESCE(EXCLUDED."vmid", "ProxmoxResource"."vmid"),
|
|
168
|
+
"guestType" = COALESCE(EXCLUDED."guestType", "ProxmoxResource"."guestType"),
|
|
169
|
+
"parentNodeName" = COALESCE(EXCLUDED."parentNodeName", "ProxmoxResource"."parentNodeName"),
|
|
170
|
+
"isUp" = COALESCE(EXCLUDED."isUp", "ProxmoxResource"."isUp"),
|
|
171
|
+
"haState" = COALESCE(EXCLUDED."haState", "ProxmoxResource"."haState"),
|
|
172
|
+
"onboot" = COALESCE(EXCLUDED."onboot", "ProxmoxResource"."onboot"),
|
|
173
|
+
"isBackedUp" = COALESCE(EXCLUDED."isBackedUp", "ProxmoxResource"."isBackedUp"),
|
|
174
|
+
"uptimeSeconds" = COALESCE(EXCLUDED."uptimeSeconds", "ProxmoxResource"."uptimeSeconds"),
|
|
175
|
+
"lastSeenAt" = EXCLUDED."lastSeenAt",
|
|
176
|
+
"updatedAt" = now()
|
|
177
|
+
WHERE EXCLUDED."lastSeenAt" >= "ProxmoxResource"."lastSeenAt"
|
|
178
|
+
`;
|
|
179
|
+
|
|
180
|
+
await this.getRepository().manager.query(sql, params);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Update the latest-metric mirror columns for a batch of resources.
|
|
186
|
+
* Plain UPDATE: in practice the row always exists because bulkUpsert
|
|
187
|
+
* runs in the same flush; if it somehow doesn't, the write is
|
|
188
|
+
* silently skipped and the next flush catches up.
|
|
189
|
+
*
|
|
190
|
+
* Guarded by metricsUpdatedAt so out-of-order points don't regress a
|
|
191
|
+
* newer observation. COALESCE keeps the existing value when a batch
|
|
192
|
+
* lacks a series — notably latestDiskBytes stays NULL (never 0) for
|
|
193
|
+
* qemu guests without the QEMU guest agent.
|
|
194
|
+
*/
|
|
195
|
+
@CaptureSpan()
|
|
196
|
+
public async bulkUpdateLatestMetrics(data: {
|
|
197
|
+
projectId: ObjectID;
|
|
198
|
+
proxmoxClusterId: ObjectID;
|
|
199
|
+
metrics: Array<ProxmoxResourceLatestMetric>;
|
|
200
|
+
}): Promise<void> {
|
|
201
|
+
if (data.metrics.length === 0) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
for (let i: number = 0; i < data.metrics.length; i += UPSERT_BATCH_SIZE) {
|
|
206
|
+
const chunk: Array<ProxmoxResourceLatestMetric> = data.metrics.slice(
|
|
207
|
+
i,
|
|
208
|
+
i + UPSERT_BATCH_SIZE,
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
const valueFragments: Array<string> = [];
|
|
212
|
+
const params: Array<unknown> = [
|
|
213
|
+
data.projectId.toString(),
|
|
214
|
+
data.proxmoxClusterId.toString(),
|
|
215
|
+
];
|
|
216
|
+
let paramIndex: number = 3;
|
|
217
|
+
|
|
218
|
+
for (const m of chunk) {
|
|
219
|
+
valueFragments.push(
|
|
220
|
+
`($${paramIndex++}, $${paramIndex++}, $${paramIndex++}::numeric, $${paramIndex++}::bigint, $${paramIndex++}::bigint, $${paramIndex++}::numeric, $${paramIndex++}::bigint, $${paramIndex++}::bigint, $${paramIndex++}::timestamptz)`,
|
|
221
|
+
);
|
|
222
|
+
params.push(
|
|
223
|
+
m.kind,
|
|
224
|
+
m.externalId,
|
|
225
|
+
m.cpuPercent !== null && m.cpuPercent !== undefined
|
|
226
|
+
? m.cpuPercent
|
|
227
|
+
: null,
|
|
228
|
+
m.memoryBytes !== null && m.memoryBytes !== undefined
|
|
229
|
+
? Math.trunc(m.memoryBytes).toString()
|
|
230
|
+
: null,
|
|
231
|
+
m.maxMemoryBytes !== null && m.maxMemoryBytes !== undefined
|
|
232
|
+
? Math.trunc(m.maxMemoryBytes).toString()
|
|
233
|
+
: null,
|
|
234
|
+
m.memoryPercent !== null && m.memoryPercent !== undefined
|
|
235
|
+
? m.memoryPercent
|
|
236
|
+
: null,
|
|
237
|
+
m.diskBytes !== null && m.diskBytes !== undefined
|
|
238
|
+
? Math.trunc(m.diskBytes).toString()
|
|
239
|
+
: null,
|
|
240
|
+
m.maxDiskBytes !== null && m.maxDiskBytes !== undefined
|
|
241
|
+
? Math.trunc(m.maxDiskBytes).toString()
|
|
242
|
+
: null,
|
|
243
|
+
m.observedAt,
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const sql: string = `
|
|
248
|
+
UPDATE "ProxmoxResource" AS p
|
|
249
|
+
SET
|
|
250
|
+
"latestCpuPercent" = COALESCE(v."cpu", p."latestCpuPercent"),
|
|
251
|
+
"latestMemoryBytes" = COALESCE(v."mem", p."latestMemoryBytes"),
|
|
252
|
+
"maxMemoryBytes" = COALESCE(v."maxMem", p."maxMemoryBytes"),
|
|
253
|
+
"latestMemoryPercent" = COALESCE(v."memPct", p."latestMemoryPercent"),
|
|
254
|
+
"latestDiskBytes" = COALESCE(v."disk", p."latestDiskBytes"),
|
|
255
|
+
"maxDiskBytes" = COALESCE(v."maxDisk", p."maxDiskBytes"),
|
|
256
|
+
"metricsUpdatedAt" = v."observedAt",
|
|
257
|
+
"updatedAt" = now()
|
|
258
|
+
FROM (VALUES ${valueFragments.join(", ")})
|
|
259
|
+
AS v("kind", "externalId", "cpu", "mem", "maxMem", "memPct", "disk", "maxDisk", "observedAt")
|
|
260
|
+
WHERE
|
|
261
|
+
p."projectId" = $1
|
|
262
|
+
AND p."proxmoxClusterId" = $2
|
|
263
|
+
AND p."kind" = v."kind"
|
|
264
|
+
AND p."externalId" = v."externalId"
|
|
265
|
+
AND (p."metricsUpdatedAt" IS NULL OR v."observedAt" >= p."metricsUpdatedAt")
|
|
266
|
+
`;
|
|
267
|
+
|
|
268
|
+
await this.getRepository().manager.query(sql, params);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Hard-delete all resources in a cluster whose last scrape is older
|
|
274
|
+
* than olderThan. Returns the number of deleted rows. Only called by
|
|
275
|
+
* the cleanup worker for clusters that are still connected — a
|
|
276
|
+
* disconnected cluster keeps its last-known inventory.
|
|
277
|
+
*/
|
|
278
|
+
@CaptureSpan()
|
|
279
|
+
public async deleteStaleForCluster(data: {
|
|
280
|
+
proxmoxClusterId: ObjectID;
|
|
281
|
+
olderThan: Date;
|
|
282
|
+
}): Promise<number> {
|
|
283
|
+
const result: Array<{ affected?: number }> | { affected?: number } =
|
|
284
|
+
await this.getRepository().manager.query(
|
|
285
|
+
`DELETE FROM "ProxmoxResource" WHERE "proxmoxClusterId" = $1 AND "lastSeenAt" < $2`,
|
|
286
|
+
[data.proxmoxClusterId.toString(), data.olderThan],
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
// Postgres driver returns [rows, affected] for DELETE — normalize.
|
|
290
|
+
let affected: number = 0;
|
|
291
|
+
if (Array.isArray(result) && result.length >= 2) {
|
|
292
|
+
const second: unknown = (result as Array<unknown>)[1];
|
|
293
|
+
if (typeof second === "number") {
|
|
294
|
+
affected = second;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (affected > STALE_DELETE_WARN_THRESHOLD) {
|
|
299
|
+
logger.warn(
|
|
300
|
+
`ProxmoxResource cleanup deleted ${affected} stale rows for cluster ${data.proxmoxClusterId.toString()} — larger than expected; investigate agent health.`,
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return affected;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Compute the sidebar/overview summary in Postgres: counts per kind
|
|
309
|
+
* plus the online/running breakdowns, in a single round-trip.
|
|
310
|
+
*/
|
|
311
|
+
@CaptureSpan()
|
|
312
|
+
public async getInventorySummary(data: {
|
|
313
|
+
projectId: ObjectID;
|
|
314
|
+
proxmoxClusterId: ObjectID;
|
|
315
|
+
}): Promise<ProxmoxInventorySummary> {
|
|
316
|
+
const rows: Array<{
|
|
317
|
+
kind: string;
|
|
318
|
+
count: string;
|
|
319
|
+
upCount: string;
|
|
320
|
+
}> = await this.getRepository().manager.query(
|
|
321
|
+
`SELECT "kind",
|
|
322
|
+
COUNT(*)::text AS count,
|
|
323
|
+
COUNT(*) FILTER (WHERE "isUp" IS TRUE)::text AS "upCount"
|
|
324
|
+
FROM "ProxmoxResource"
|
|
325
|
+
WHERE "projectId" = $1 AND "proxmoxClusterId" = $2 AND "deletedAt" IS NULL
|
|
326
|
+
GROUP BY "kind"`,
|
|
327
|
+
[data.projectId.toString(), data.proxmoxClusterId.toString()],
|
|
328
|
+
);
|
|
329
|
+
|
|
330
|
+
const countsByKind: Record<string, number> = {};
|
|
331
|
+
let nodeOnlineCount: number = 0;
|
|
332
|
+
let guestRunningCount: number = 0;
|
|
333
|
+
for (const row of rows) {
|
|
334
|
+
countsByKind[row.kind] = parseInt(row.count, 10) || 0;
|
|
335
|
+
if (row.kind === "Node") {
|
|
336
|
+
nodeOnlineCount = parseInt(row.upCount, 10) || 0;
|
|
337
|
+
}
|
|
338
|
+
if (row.kind === "Guest") {
|
|
339
|
+
guestRunningCount = parseInt(row.upCount, 10) || 0;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
return {
|
|
344
|
+
countsByKind,
|
|
345
|
+
nodeOnlineCount,
|
|
346
|
+
guestRunningCount,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Host cross-link heuristic (WI-17): resolve the cluster a guest
|
|
352
|
+
* with this name belongs to. Case-insensitive — host.name casing
|
|
353
|
+
* (canonicalized at ingest) rarely matches the PVE guest name's
|
|
354
|
+
* casing exactly. Returns null when no guest matches.
|
|
355
|
+
*/
|
|
356
|
+
@CaptureSpan()
|
|
357
|
+
public async findGuestClusterIdByName(data: {
|
|
358
|
+
projectId: ObjectID;
|
|
359
|
+
name: string;
|
|
360
|
+
}): Promise<ObjectID | null> {
|
|
361
|
+
const guest: Model | null = await this.findOneBy({
|
|
362
|
+
query: {
|
|
363
|
+
projectId: data.projectId,
|
|
364
|
+
kind: "Guest",
|
|
365
|
+
name: QueryHelper.findWithSameText(data.name),
|
|
366
|
+
},
|
|
367
|
+
select: {
|
|
368
|
+
_id: true,
|
|
369
|
+
proxmoxClusterId: true,
|
|
370
|
+
},
|
|
371
|
+
props: {
|
|
372
|
+
isRoot: true,
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
return guest?.proxmoxClusterId || null;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Helper for the cleanup worker: snapshot-interval aware cutoff.
|
|
381
|
+
* 3× the 5-minute scrape interval by default. Tune via
|
|
382
|
+
* PVE_INVENTORY_STALE_MINUTES (min 5).
|
|
383
|
+
*/
|
|
384
|
+
public getStaleThresholdDate(nowOverride?: Date): Date {
|
|
385
|
+
const minutes: number = this.getStaleThresholdMinutes();
|
|
386
|
+
return OneUptimeDate.addRemoveMinutes(
|
|
387
|
+
nowOverride || OneUptimeDate.getCurrentDate(),
|
|
388
|
+
-minutes,
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
public getStaleThresholdMinutes(): number {
|
|
393
|
+
const raw: string | undefined = process.env["PVE_INVENTORY_STALE_MINUTES"];
|
|
394
|
+
if (raw) {
|
|
395
|
+
const parsed: number = parseInt(raw, 10);
|
|
396
|
+
if (!isNaN(parsed) && parsed >= 5) {
|
|
397
|
+
return parsed;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return 15;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export default new Service();
|
|
@@ -253,15 +253,23 @@ export class Service extends DatabaseService<Model> {
|
|
|
253
253
|
|
|
254
254
|
@CaptureSpan()
|
|
255
255
|
public async markDisconnectedApplications(): Promise<void> {
|
|
256
|
-
|
|
256
|
+
/*
|
|
257
|
+
* Threshold must stay well above the 5-minute OTel ingest
|
|
258
|
+
* maintenance fence (MAINTENANCE_FENCE_TTL_SECONDS in
|
|
259
|
+
* OtelIngestBaseService) — lastSeenAt is legitimately up to
|
|
260
|
+
* ~5 minutes stale during continuous telemetry, so a threshold
|
|
261
|
+
* equal to the fence TTL flaps healthy resources. 15 minutes
|
|
262
|
+
* gives 3x headroom.
|
|
263
|
+
*/
|
|
264
|
+
const fifteenMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
|
|
257
265
|
OneUptimeDate.getCurrentDate(),
|
|
258
|
-
-
|
|
266
|
+
-15,
|
|
259
267
|
);
|
|
260
268
|
|
|
261
269
|
const connectedApps: Array<Model> = await this.findBy({
|
|
262
270
|
query: {
|
|
263
271
|
otelCollectorStatus: "connected",
|
|
264
|
-
lastSeenAt: QueryHelper.lessThan(
|
|
272
|
+
lastSeenAt: QueryHelper.lessThan(fifteenMinutesAgo),
|
|
265
273
|
},
|
|
266
274
|
select: {
|
|
267
275
|
_id: true,
|
|
@@ -3,10 +3,12 @@ import Host from "../../Models/DatabaseModels/Host";
|
|
|
3
3
|
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
4
4
|
import Label from "../../Models/DatabaseModels/Label";
|
|
5
5
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
6
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
6
7
|
import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
|
|
7
8
|
import ScheduledMaintenanceLabelRule from "../../Models/DatabaseModels/ScheduledMaintenanceLabelRule";
|
|
8
9
|
import Service from "../../Models/DatabaseModels/Service";
|
|
9
10
|
import DockerHostService from "./DockerHostService";
|
|
11
|
+
import PodmanHostService from "./PodmanHostService";
|
|
10
12
|
import HostService from "./HostService";
|
|
11
13
|
import KubernetesClusterService from "./KubernetesClusterService";
|
|
12
14
|
import LabelService from "./LabelService";
|
|
@@ -32,6 +34,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
32
34
|
* - all labels of the event's hosts when `inheritLabelsFromHosts`
|
|
33
35
|
* - all labels of the event's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
|
|
34
36
|
* - all labels of the event's Docker hosts when `inheritLabelsFromDockerHosts`
|
|
37
|
+
* - all labels of the event's Podman hosts when `inheritLabelsFromPodmanHosts`
|
|
35
38
|
* - all labels of the event's services when `inheritLabelsFromServices`
|
|
36
39
|
* The union is deduped against labels already on the event before insert
|
|
37
40
|
* to avoid PK conflicts on the ScheduledMaintenanceLabel join table.
|
|
@@ -67,6 +70,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
67
70
|
inheritLabelsFromHosts: true,
|
|
68
71
|
inheritLabelsFromKubernetesClusters: true,
|
|
69
72
|
inheritLabelsFromDockerHosts: true,
|
|
73
|
+
inheritLabelsFromPodmanHosts: true,
|
|
70
74
|
inheritLabelsFromServices: true,
|
|
71
75
|
},
|
|
72
76
|
limit: 100,
|
|
@@ -82,6 +86,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
82
86
|
let inheritFromHosts: boolean = false;
|
|
83
87
|
let inheritFromKubernetesClusters: boolean = false;
|
|
84
88
|
let inheritFromDockerHosts: boolean = false;
|
|
89
|
+
let inheritFromPodmanHosts: boolean = false;
|
|
85
90
|
let inheritFromServices: boolean = false;
|
|
86
91
|
const matchedRules: Array<ScheduledMaintenanceLabelRule> = [];
|
|
87
92
|
|
|
@@ -111,6 +116,9 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
111
116
|
if (rule.inheritLabelsFromDockerHosts) {
|
|
112
117
|
inheritFromDockerHosts = true;
|
|
113
118
|
}
|
|
119
|
+
if (rule.inheritLabelsFromPodmanHosts) {
|
|
120
|
+
inheritFromPodmanHosts = true;
|
|
121
|
+
}
|
|
114
122
|
if (rule.inheritLabelsFromServices) {
|
|
115
123
|
inheritFromServices = true;
|
|
116
124
|
}
|
|
@@ -120,6 +128,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
120
128
|
inheritFromHosts ||
|
|
121
129
|
inheritFromKubernetesClusters ||
|
|
122
130
|
inheritFromDockerHosts ||
|
|
131
|
+
inheritFromPodmanHosts ||
|
|
123
132
|
inheritFromServices;
|
|
124
133
|
|
|
125
134
|
let eventWithResources: ScheduledMaintenance | null = null;
|
|
@@ -130,6 +139,7 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
130
139
|
hosts: { _id: true },
|
|
131
140
|
kubernetesClusters: { _id: true },
|
|
132
141
|
dockerHosts: { _id: true },
|
|
142
|
+
podmanHosts: { _id: true },
|
|
133
143
|
services: { _id: true },
|
|
134
144
|
},
|
|
135
145
|
props: { isRoot: true },
|
|
@@ -213,6 +223,25 @@ class ScheduledMaintenanceLabelRuleEngineServiceClass {
|
|
|
213
223
|
}
|
|
214
224
|
}
|
|
215
225
|
|
|
226
|
+
if (inheritFromPodmanHosts && eventWithResources?.podmanHosts?.length) {
|
|
227
|
+
for (const eventPodmanHost of eventWithResources.podmanHosts) {
|
|
228
|
+
if (!eventPodmanHost.id) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const podmanHost: PodmanHost | null =
|
|
232
|
+
await PodmanHostService.findOneById({
|
|
233
|
+
id: eventPodmanHost.id,
|
|
234
|
+
select: { labels: { _id: true } },
|
|
235
|
+
props: { isRoot: true },
|
|
236
|
+
});
|
|
237
|
+
for (const label of podmanHost?.labels || []) {
|
|
238
|
+
if (label.id) {
|
|
239
|
+
labelIdsToAdd.add(label.id.toString());
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
216
245
|
if (inheritFromServices && eventWithResources?.services?.length) {
|
|
217
246
|
for (const eventService of eventWithResources.services) {
|
|
218
247
|
if (!eventService.id) {
|
|
@@ -11,6 +11,9 @@ import Label from "../../Models/DatabaseModels/Label";
|
|
|
11
11
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
12
12
|
import MonitorOwnerTeam from "../../Models/DatabaseModels/MonitorOwnerTeam";
|
|
13
13
|
import MonitorOwnerUser from "../../Models/DatabaseModels/MonitorOwnerUser";
|
|
14
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
15
|
+
import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
|
|
16
|
+
import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
|
|
14
17
|
import ScheduledMaintenance from "../../Models/DatabaseModels/ScheduledMaintenance";
|
|
15
18
|
import ScheduledMaintenanceOwnerRule from "../../Models/DatabaseModels/ScheduledMaintenanceOwnerRule";
|
|
16
19
|
import Service from "../../Models/DatabaseModels/Service";
|
|
@@ -27,6 +30,8 @@ import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserServi
|
|
|
27
30
|
import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
|
|
28
31
|
import MonitorOwnerUserService from "./MonitorOwnerUserService";
|
|
29
32
|
import MonitorService from "./MonitorService";
|
|
33
|
+
import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
|
|
34
|
+
import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
|
|
30
35
|
import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
|
|
31
36
|
import ScheduledMaintenanceOwnerRuleService from "./ScheduledMaintenanceOwnerRuleService";
|
|
32
37
|
import ScheduledMaintenanceService from "./ScheduledMaintenanceService";
|
|
@@ -82,6 +87,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
82
87
|
inheritOwnersFromHosts: true,
|
|
83
88
|
inheritOwnersFromKubernetesClusters: true,
|
|
84
89
|
inheritOwnersFromDockerHosts: true,
|
|
90
|
+
inheritOwnersFromPodmanHosts: true,
|
|
85
91
|
inheritOwnersFromServices: true,
|
|
86
92
|
},
|
|
87
93
|
limit: 100,
|
|
@@ -108,6 +114,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
108
114
|
let inheritFromHosts: boolean = false;
|
|
109
115
|
let inheritFromKubernetesClusters: boolean = false;
|
|
110
116
|
let inheritFromDockerHosts: boolean = false;
|
|
117
|
+
let inheritFromPodmanHosts: boolean = false;
|
|
111
118
|
let inheritFromServices: boolean = false;
|
|
112
119
|
const inheritNotifyMode: { value: boolean | null } = { value: null };
|
|
113
120
|
|
|
@@ -159,6 +166,12 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
159
166
|
inheritNotifyMode.value =
|
|
160
167
|
inheritNotifyMode.value === true ? true : notify;
|
|
161
168
|
}
|
|
169
|
+
if (rule.inheritOwnersFromPodmanHosts) {
|
|
170
|
+
inheritFromPodmanHosts = true;
|
|
171
|
+
ruleAddedAny = true;
|
|
172
|
+
inheritNotifyMode.value =
|
|
173
|
+
inheritNotifyMode.value === true ? true : notify;
|
|
174
|
+
}
|
|
162
175
|
if (rule.inheritOwnersFromServices) {
|
|
163
176
|
inheritFromServices = true;
|
|
164
177
|
ruleAddedAny = true;
|
|
@@ -178,6 +191,8 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
178
191
|
const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
|
|
179
192
|
const inheritedFromDockerHostUserIds: Set<string> = new Set();
|
|
180
193
|
const inheritedFromDockerHostTeamIds: Set<string> = new Set();
|
|
194
|
+
const inheritedFromPodmanHostUserIds: Set<string> = new Set();
|
|
195
|
+
const inheritedFromPodmanHostTeamIds: Set<string> = new Set();
|
|
181
196
|
const inheritedFromServiceUserIds: Set<string> = new Set();
|
|
182
197
|
const inheritedFromServiceTeamIds: Set<string> = new Set();
|
|
183
198
|
|
|
@@ -353,6 +368,47 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
353
368
|
}
|
|
354
369
|
}
|
|
355
370
|
|
|
371
|
+
if (inheritFromPodmanHosts && scheduledMaintenance.podmanHosts?.length) {
|
|
372
|
+
const podmanHostIds: Array<ObjectID> = scheduledMaintenance.podmanHosts
|
|
373
|
+
.map((p: PodmanHost) => {
|
|
374
|
+
return p.id;
|
|
375
|
+
})
|
|
376
|
+
.filter((id: ObjectID | null | undefined): id is ObjectID => {
|
|
377
|
+
return Boolean(id);
|
|
378
|
+
});
|
|
379
|
+
if (podmanHostIds.length > 0) {
|
|
380
|
+
const [podmanHostOwnerUsers, podmanHostOwnerTeams]: [
|
|
381
|
+
Array<PodmanHostOwnerUser>,
|
|
382
|
+
Array<PodmanHostOwnerTeam>,
|
|
383
|
+
] = await Promise.all([
|
|
384
|
+
PodmanHostOwnerUserService.findBy({
|
|
385
|
+
query: { podmanHostId: QueryHelper.any(podmanHostIds) },
|
|
386
|
+
select: { userId: true },
|
|
387
|
+
props: { isRoot: true },
|
|
388
|
+
limit: LIMIT_MAX,
|
|
389
|
+
skip: 0,
|
|
390
|
+
}),
|
|
391
|
+
PodmanHostOwnerTeamService.findBy({
|
|
392
|
+
query: { podmanHostId: QueryHelper.any(podmanHostIds) },
|
|
393
|
+
select: { teamId: true },
|
|
394
|
+
props: { isRoot: true },
|
|
395
|
+
limit: LIMIT_MAX,
|
|
396
|
+
skip: 0,
|
|
397
|
+
}),
|
|
398
|
+
]);
|
|
399
|
+
for (const ownerUser of podmanHostOwnerUsers) {
|
|
400
|
+
if (ownerUser.userId) {
|
|
401
|
+
inheritedFromPodmanHostUserIds.add(ownerUser.userId.toString());
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
for (const ownerTeam of podmanHostOwnerTeams) {
|
|
405
|
+
if (ownerTeam.teamId) {
|
|
406
|
+
inheritedFromPodmanHostTeamIds.add(ownerTeam.teamId.toString());
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
356
412
|
if (inheritFromServices && scheduledMaintenance.services?.length) {
|
|
357
413
|
const serviceIds: Array<ObjectID> = scheduledMaintenance.services
|
|
358
414
|
.map((s: Service) => {
|
|
@@ -399,6 +455,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
399
455
|
...inheritedFromHostUserIds,
|
|
400
456
|
...inheritedFromKubernetesClusterUserIds,
|
|
401
457
|
...inheritedFromDockerHostUserIds,
|
|
458
|
+
...inheritedFromPodmanHostUserIds,
|
|
402
459
|
...inheritedFromServiceUserIds,
|
|
403
460
|
]);
|
|
404
461
|
const inheritedTeamIds: Set<string> = new Set([
|
|
@@ -406,6 +463,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
406
463
|
...inheritedFromHostTeamIds,
|
|
407
464
|
...inheritedFromKubernetesClusterTeamIds,
|
|
408
465
|
...inheritedFromDockerHostTeamIds,
|
|
466
|
+
...inheritedFromPodmanHostTeamIds,
|
|
409
467
|
...inheritedFromServiceTeamIds,
|
|
410
468
|
]);
|
|
411
469
|
|
|
@@ -480,6 +538,10 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
480
538
|
inheritedFromDockerHostUserIds.size +
|
|
481
539
|
inheritedFromDockerHostTeamIds.size >
|
|
482
540
|
0,
|
|
541
|
+
inheritedFromPodmanHosts:
|
|
542
|
+
inheritedFromPodmanHostUserIds.size +
|
|
543
|
+
inheritedFromPodmanHostTeamIds.size >
|
|
544
|
+
0,
|
|
483
545
|
inheritedFromServices:
|
|
484
546
|
inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
|
|
485
547
|
0,
|
|
@@ -505,6 +567,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
505
567
|
inheritedFromHosts: boolean;
|
|
506
568
|
inheritedFromKubernetesClusters: boolean;
|
|
507
569
|
inheritedFromDockerHosts: boolean;
|
|
570
|
+
inheritedFromPodmanHosts: boolean;
|
|
508
571
|
inheritedFromServices: boolean;
|
|
509
572
|
}): Promise<void> {
|
|
510
573
|
const {
|
|
@@ -516,6 +579,7 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
516
579
|
inheritedFromHosts,
|
|
517
580
|
inheritedFromKubernetesClusters,
|
|
518
581
|
inheritedFromDockerHosts,
|
|
582
|
+
inheritedFromPodmanHosts,
|
|
519
583
|
inheritedFromServices,
|
|
520
584
|
} = data;
|
|
521
585
|
if (
|
|
@@ -600,6 +664,9 @@ class ScheduledMaintenanceOwnerRuleEngineServiceClass {
|
|
|
600
664
|
if (inheritedFromDockerHosts) {
|
|
601
665
|
inheritedSources.push("Docker hosts");
|
|
602
666
|
}
|
|
667
|
+
if (inheritedFromPodmanHosts) {
|
|
668
|
+
inheritedSources.push("Podman hosts");
|
|
669
|
+
}
|
|
603
670
|
if (inheritedFromServices) {
|
|
604
671
|
inheritedSources.push("services");
|
|
605
672
|
}
|