@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,381 @@
|
|
|
1
|
+
import DatabaseService from "./DatabaseService";
|
|
2
|
+
import Model from "../../Models/DatabaseModels/DockerSwarmResource";
|
|
3
|
+
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
4
|
+
import ObjectID from "../../Types/ObjectID";
|
|
5
|
+
import OneUptimeDate from "../../Types/Date";
|
|
6
|
+
import { JSONObject } from "../../Types/JSON";
|
|
7
|
+
import logger from "../Utils/Logger";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* ------------------------------------------------------------------
|
|
11
|
+
* DockerSwarmResourceService
|
|
12
|
+
*
|
|
13
|
+
* Writes and reads the Docker Swarm inventory table populated by the
|
|
14
|
+
* telemetry ingest path. Callers are either:
|
|
15
|
+
* - OtelLogsIngestService (bulkUpsert, from the inventory JSON-line
|
|
16
|
+
* snapshot scan — `docker node/service/task/stack/... ls` shipped
|
|
17
|
+
* by the agent's inventory poller)
|
|
18
|
+
* - OtelMetricsIngestService (bulkUpdateLatestMetrics, from the
|
|
19
|
+
* docker_stats receiver per-task CPU/memory mirror)
|
|
20
|
+
* - CleanupStaleResources worker (deleteStaleForCluster)
|
|
21
|
+
* - DockerSwarmResourceAPI / the dashboard pages (reads via the
|
|
22
|
+
* inherited DatabaseService CRUD)
|
|
23
|
+
*
|
|
24
|
+
* Identity/status arrives on the inventory snapshot stream; the
|
|
25
|
+
* latest-metric mirror arrives on the metrics stream, so the two
|
|
26
|
+
* writes happen on different flushes (unlike Proxmox, where both ride
|
|
27
|
+
* the same scrape). Both COALESCE against the existing row so a stream
|
|
28
|
+
* that lacks a field never blanks one another stream already filled.
|
|
29
|
+
*
|
|
30
|
+
* ------------------------------------------------------------------
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
export interface ParsedDockerSwarmResource {
|
|
34
|
+
kind: string; // Node | Service | Task | Stack | Network | Secret | Config | Volume
|
|
35
|
+
externalId: string; // node/<id>, service/<id>, task/<id>, stack/<name>, ...
|
|
36
|
+
name: string | null;
|
|
37
|
+
state: string | null;
|
|
38
|
+
role: string | null; // Node: manager | worker
|
|
39
|
+
serviceMode: string | null; // Service: replicated | global
|
|
40
|
+
desiredReplicas: number | null;
|
|
41
|
+
runningReplicas: number | null;
|
|
42
|
+
image: string | null;
|
|
43
|
+
stackName: string | null;
|
|
44
|
+
serviceName: string | null;
|
|
45
|
+
nodeHostname: string | null;
|
|
46
|
+
driver: string | null;
|
|
47
|
+
isReady: boolean | null;
|
|
48
|
+
attributes: JSONObject | null;
|
|
49
|
+
lastSeenAt: Date;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface DockerSwarmResourceLatestMetric {
|
|
53
|
+
kind: string;
|
|
54
|
+
externalId: string;
|
|
55
|
+
cpuPercent: number | null;
|
|
56
|
+
memoryBytes: number | null;
|
|
57
|
+
maxMemoryBytes: number | null;
|
|
58
|
+
memoryPercent: number | null;
|
|
59
|
+
observedAt: Date;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface DockerSwarmInventorySummary {
|
|
63
|
+
countsByKind: Record<string, number>;
|
|
64
|
+
nodeReadyCount: number;
|
|
65
|
+
taskRunningCount: number;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const UPSERT_BATCH_SIZE: number = 500;
|
|
69
|
+
const STALE_DELETE_WARN_THRESHOLD: number = 100;
|
|
70
|
+
|
|
71
|
+
/*
|
|
72
|
+
* Column order used by bulkUpsert() and its generated parameter tuples.
|
|
73
|
+
* Keep this and the INSERT column list in perfect sync. The `attributes`
|
|
74
|
+
* column is jsonb (ColumnType.JSON) — its placeholder is cast ::jsonb.
|
|
75
|
+
*/
|
|
76
|
+
const UPSERT_COLUMNS: Array<string> = [
|
|
77
|
+
"projectId",
|
|
78
|
+
"dockerSwarmClusterId",
|
|
79
|
+
"kind",
|
|
80
|
+
"externalId",
|
|
81
|
+
"name",
|
|
82
|
+
"state",
|
|
83
|
+
"role",
|
|
84
|
+
"serviceMode",
|
|
85
|
+
"desiredReplicas",
|
|
86
|
+
"runningReplicas",
|
|
87
|
+
"image",
|
|
88
|
+
"stackName",
|
|
89
|
+
"serviceName",
|
|
90
|
+
"nodeHostname",
|
|
91
|
+
"driver",
|
|
92
|
+
"isReady",
|
|
93
|
+
"attributes",
|
|
94
|
+
"lastSeenAt",
|
|
95
|
+
"version",
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
export class Service extends DatabaseService<Model> {
|
|
99
|
+
public constructor() {
|
|
100
|
+
super(Model);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Upsert a batch of parsed resources for a single (project, cluster)
|
|
105
|
+
* pair. Uses ON CONFLICT on the UNIQUE (projectId, dockerSwarmClusterId,
|
|
106
|
+
* kind, externalId) index with a dominance guard on lastSeenAt so
|
|
107
|
+
* out-of-order ingest never regresses a newer snapshot.
|
|
108
|
+
*
|
|
109
|
+
* Identity columns COALESCE against the existing row: a snapshot is
|
|
110
|
+
* usually complete, but a partial batch must not blank a field an
|
|
111
|
+
* earlier batch already filled.
|
|
112
|
+
*/
|
|
113
|
+
@CaptureSpan()
|
|
114
|
+
public async bulkUpsert(data: {
|
|
115
|
+
projectId: ObjectID;
|
|
116
|
+
dockerSwarmClusterId: ObjectID;
|
|
117
|
+
resources: Array<ParsedDockerSwarmResource>;
|
|
118
|
+
}): Promise<void> {
|
|
119
|
+
if (data.resources.length === 0) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for (let i: number = 0; i < data.resources.length; i += UPSERT_BATCH_SIZE) {
|
|
124
|
+
const chunk: Array<ParsedDockerSwarmResource> = data.resources.slice(
|
|
125
|
+
i,
|
|
126
|
+
i + UPSERT_BATCH_SIZE,
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
const valueFragments: Array<string> = [];
|
|
130
|
+
const params: Array<unknown> = [];
|
|
131
|
+
let paramIndex: number = 1;
|
|
132
|
+
|
|
133
|
+
for (const r of chunk) {
|
|
134
|
+
const placeholders: Array<string> = [];
|
|
135
|
+
for (const col of UPSERT_COLUMNS) {
|
|
136
|
+
if (col === "attributes") {
|
|
137
|
+
placeholders.push(`$${paramIndex++}::jsonb`);
|
|
138
|
+
} else {
|
|
139
|
+
placeholders.push(`$${paramIndex++}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
valueFragments.push(`(${placeholders.join(", ")})`);
|
|
143
|
+
|
|
144
|
+
params.push(
|
|
145
|
+
data.projectId.toString(),
|
|
146
|
+
data.dockerSwarmClusterId.toString(),
|
|
147
|
+
r.kind,
|
|
148
|
+
r.externalId,
|
|
149
|
+
r.name,
|
|
150
|
+
r.state,
|
|
151
|
+
r.role,
|
|
152
|
+
r.serviceMode,
|
|
153
|
+
r.desiredReplicas !== null ? Math.trunc(r.desiredReplicas) : null,
|
|
154
|
+
r.runningReplicas !== null ? Math.trunc(r.runningReplicas) : null,
|
|
155
|
+
r.image,
|
|
156
|
+
r.stackName,
|
|
157
|
+
r.serviceName,
|
|
158
|
+
r.nodeHostname,
|
|
159
|
+
r.driver,
|
|
160
|
+
r.isReady,
|
|
161
|
+
r.attributes ? JSON.stringify(r.attributes) : null,
|
|
162
|
+
r.lastSeenAt,
|
|
163
|
+
0, // version (BaseModel @VersionColumn)
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const sql: string = `
|
|
168
|
+
INSERT INTO "DockerSwarmResource" (
|
|
169
|
+
"projectId", "dockerSwarmClusterId", "kind", "externalId",
|
|
170
|
+
"name", "state", "role", "serviceMode",
|
|
171
|
+
"desiredReplicas", "runningReplicas", "image", "stackName",
|
|
172
|
+
"serviceName", "nodeHostname", "driver", "isReady",
|
|
173
|
+
"attributes", "lastSeenAt", "version"
|
|
174
|
+
)
|
|
175
|
+
VALUES ${valueFragments.join(", ")}
|
|
176
|
+
ON CONFLICT ("projectId", "dockerSwarmClusterId", "kind", "externalId")
|
|
177
|
+
DO UPDATE SET
|
|
178
|
+
"name" = COALESCE(EXCLUDED."name", "DockerSwarmResource"."name"),
|
|
179
|
+
"state" = COALESCE(EXCLUDED."state", "DockerSwarmResource"."state"),
|
|
180
|
+
"role" = COALESCE(EXCLUDED."role", "DockerSwarmResource"."role"),
|
|
181
|
+
"serviceMode" = COALESCE(EXCLUDED."serviceMode", "DockerSwarmResource"."serviceMode"),
|
|
182
|
+
"desiredReplicas" = COALESCE(EXCLUDED."desiredReplicas", "DockerSwarmResource"."desiredReplicas"),
|
|
183
|
+
"runningReplicas" = COALESCE(EXCLUDED."runningReplicas", "DockerSwarmResource"."runningReplicas"),
|
|
184
|
+
"image" = COALESCE(EXCLUDED."image", "DockerSwarmResource"."image"),
|
|
185
|
+
"stackName" = COALESCE(EXCLUDED."stackName", "DockerSwarmResource"."stackName"),
|
|
186
|
+
"serviceName" = COALESCE(EXCLUDED."serviceName", "DockerSwarmResource"."serviceName"),
|
|
187
|
+
"nodeHostname" = COALESCE(EXCLUDED."nodeHostname", "DockerSwarmResource"."nodeHostname"),
|
|
188
|
+
"driver" = COALESCE(EXCLUDED."driver", "DockerSwarmResource"."driver"),
|
|
189
|
+
"isReady" = COALESCE(EXCLUDED."isReady", "DockerSwarmResource"."isReady"),
|
|
190
|
+
"attributes" = COALESCE(EXCLUDED."attributes", "DockerSwarmResource"."attributes"),
|
|
191
|
+
"lastSeenAt" = EXCLUDED."lastSeenAt",
|
|
192
|
+
"updatedAt" = now()
|
|
193
|
+
WHERE EXCLUDED."lastSeenAt" >= "DockerSwarmResource"."lastSeenAt"
|
|
194
|
+
`;
|
|
195
|
+
|
|
196
|
+
await this.getRepository().manager.query(sql, params);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Update the latest-metric mirror columns for a batch of resources
|
|
202
|
+
* (Tasks and Services — the kinds that map to running containers).
|
|
203
|
+
* Plain UPDATE guarded by metricsUpdatedAt so out-of-order points
|
|
204
|
+
* don't regress a newer observation. COALESCE keeps the existing
|
|
205
|
+
* value when a batch lacks a series.
|
|
206
|
+
*/
|
|
207
|
+
@CaptureSpan()
|
|
208
|
+
public async bulkUpdateLatestMetrics(data: {
|
|
209
|
+
projectId: ObjectID;
|
|
210
|
+
dockerSwarmClusterId: ObjectID;
|
|
211
|
+
metrics: Array<DockerSwarmResourceLatestMetric>;
|
|
212
|
+
}): Promise<void> {
|
|
213
|
+
if (data.metrics.length === 0) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
for (let i: number = 0; i < data.metrics.length; i += UPSERT_BATCH_SIZE) {
|
|
218
|
+
const chunk: Array<DockerSwarmResourceLatestMetric> = data.metrics.slice(
|
|
219
|
+
i,
|
|
220
|
+
i + UPSERT_BATCH_SIZE,
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
const valueFragments: Array<string> = [];
|
|
224
|
+
const params: Array<unknown> = [
|
|
225
|
+
data.projectId.toString(),
|
|
226
|
+
data.dockerSwarmClusterId.toString(),
|
|
227
|
+
];
|
|
228
|
+
let paramIndex: number = 3;
|
|
229
|
+
|
|
230
|
+
for (const m of chunk) {
|
|
231
|
+
valueFragments.push(
|
|
232
|
+
`($${paramIndex++}, $${paramIndex++}, $${paramIndex++}::numeric, $${paramIndex++}::bigint, $${paramIndex++}::bigint, $${paramIndex++}::numeric, $${paramIndex++}::timestamptz)`,
|
|
233
|
+
);
|
|
234
|
+
params.push(
|
|
235
|
+
m.kind,
|
|
236
|
+
m.externalId,
|
|
237
|
+
m.cpuPercent !== null && m.cpuPercent !== undefined
|
|
238
|
+
? m.cpuPercent
|
|
239
|
+
: null,
|
|
240
|
+
m.memoryBytes !== null && m.memoryBytes !== undefined
|
|
241
|
+
? Math.trunc(m.memoryBytes).toString()
|
|
242
|
+
: null,
|
|
243
|
+
m.maxMemoryBytes !== null && m.maxMemoryBytes !== undefined
|
|
244
|
+
? Math.trunc(m.maxMemoryBytes).toString()
|
|
245
|
+
: null,
|
|
246
|
+
m.memoryPercent !== null && m.memoryPercent !== undefined
|
|
247
|
+
? m.memoryPercent
|
|
248
|
+
: null,
|
|
249
|
+
m.observedAt,
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const sql: string = `
|
|
254
|
+
UPDATE "DockerSwarmResource" AS p
|
|
255
|
+
SET
|
|
256
|
+
"latestCpuPercent" = COALESCE(v."cpu", p."latestCpuPercent"),
|
|
257
|
+
"latestMemoryBytes" = COALESCE(v."mem", p."latestMemoryBytes"),
|
|
258
|
+
"maxMemoryBytes" = COALESCE(v."maxMem", p."maxMemoryBytes"),
|
|
259
|
+
"latestMemoryPercent" = COALESCE(v."memPct", p."latestMemoryPercent"),
|
|
260
|
+
"metricsUpdatedAt" = v."observedAt",
|
|
261
|
+
"updatedAt" = now()
|
|
262
|
+
FROM (VALUES ${valueFragments.join(", ")})
|
|
263
|
+
AS v("kind", "externalId", "cpu", "mem", "maxMem", "memPct", "observedAt")
|
|
264
|
+
WHERE
|
|
265
|
+
p."projectId" = $1
|
|
266
|
+
AND p."dockerSwarmClusterId" = $2
|
|
267
|
+
AND p."kind" = v."kind"
|
|
268
|
+
AND p."externalId" = v."externalId"
|
|
269
|
+
AND (p."metricsUpdatedAt" IS NULL OR v."observedAt" >= p."metricsUpdatedAt")
|
|
270
|
+
`;
|
|
271
|
+
|
|
272
|
+
await this.getRepository().manager.query(sql, params);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Hard-delete all resources in a cluster whose last snapshot is older
|
|
278
|
+
* than olderThan. Returns the number of deleted rows. Only called by
|
|
279
|
+
* the cleanup worker for clusters that are still connected — a
|
|
280
|
+
* disconnected cluster keeps its last-known inventory.
|
|
281
|
+
*/
|
|
282
|
+
@CaptureSpan()
|
|
283
|
+
public async deleteStaleForCluster(data: {
|
|
284
|
+
dockerSwarmClusterId: ObjectID;
|
|
285
|
+
olderThan: Date;
|
|
286
|
+
}): Promise<number> {
|
|
287
|
+
const result: Array<{ affected?: number }> | { affected?: number } =
|
|
288
|
+
await this.getRepository().manager.query(
|
|
289
|
+
`DELETE FROM "DockerSwarmResource" WHERE "dockerSwarmClusterId" = $1 AND "lastSeenAt" < $2`,
|
|
290
|
+
[data.dockerSwarmClusterId.toString(), data.olderThan],
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
// Postgres driver returns [rows, affected] for DELETE — normalize.
|
|
294
|
+
let affected: number = 0;
|
|
295
|
+
if (Array.isArray(result) && result.length >= 2) {
|
|
296
|
+
const second: unknown = (result as Array<unknown>)[1];
|
|
297
|
+
if (typeof second === "number") {
|
|
298
|
+
affected = second;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
if (affected > STALE_DELETE_WARN_THRESHOLD) {
|
|
303
|
+
logger.warn(
|
|
304
|
+
`DockerSwarmResource cleanup deleted ${affected} stale rows for cluster ${data.dockerSwarmClusterId.toString()} — larger than expected; investigate agent health.`,
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return affected;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Compute the sidebar/overview summary in Postgres: counts per kind
|
|
313
|
+
* plus the node-ready and task-running breakdowns, in a single
|
|
314
|
+
* round-trip.
|
|
315
|
+
*/
|
|
316
|
+
@CaptureSpan()
|
|
317
|
+
public async getInventorySummary(data: {
|
|
318
|
+
projectId: ObjectID;
|
|
319
|
+
dockerSwarmClusterId: ObjectID;
|
|
320
|
+
}): Promise<DockerSwarmInventorySummary> {
|
|
321
|
+
const rows: Array<{
|
|
322
|
+
kind: string;
|
|
323
|
+
count: string;
|
|
324
|
+
readyCount: string;
|
|
325
|
+
}> = await this.getRepository().manager.query(
|
|
326
|
+
`SELECT "kind",
|
|
327
|
+
COUNT(*)::text AS count,
|
|
328
|
+
COUNT(*) FILTER (WHERE "isReady" IS TRUE)::text AS "readyCount"
|
|
329
|
+
FROM "DockerSwarmResource"
|
|
330
|
+
WHERE "projectId" = $1 AND "dockerSwarmClusterId" = $2 AND "deletedAt" IS NULL
|
|
331
|
+
GROUP BY "kind"`,
|
|
332
|
+
[data.projectId.toString(), data.dockerSwarmClusterId.toString()],
|
|
333
|
+
);
|
|
334
|
+
|
|
335
|
+
const countsByKind: Record<string, number> = {};
|
|
336
|
+
let nodeReadyCount: number = 0;
|
|
337
|
+
let taskRunningCount: number = 0;
|
|
338
|
+
for (const row of rows) {
|
|
339
|
+
countsByKind[row.kind] = parseInt(row.count, 10) || 0;
|
|
340
|
+
if (row.kind === "Node") {
|
|
341
|
+
nodeReadyCount = parseInt(row.readyCount, 10) || 0;
|
|
342
|
+
}
|
|
343
|
+
if (row.kind === "Task") {
|
|
344
|
+
taskRunningCount = parseInt(row.readyCount, 10) || 0;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
return {
|
|
349
|
+
countsByKind,
|
|
350
|
+
nodeReadyCount,
|
|
351
|
+
taskRunningCount,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Helper for the cleanup worker: snapshot-interval aware cutoff.
|
|
357
|
+
* 3× the 5-minute snapshot interval by default. Tune via
|
|
358
|
+
* DOCKER_SWARM_INVENTORY_STALE_MINUTES (min 5).
|
|
359
|
+
*/
|
|
360
|
+
public getStaleThresholdDate(nowOverride?: Date): Date {
|
|
361
|
+
const minutes: number = this.getStaleThresholdMinutes();
|
|
362
|
+
return OneUptimeDate.addRemoveMinutes(
|
|
363
|
+
nowOverride || OneUptimeDate.getCurrentDate(),
|
|
364
|
+
-minutes,
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
public getStaleThresholdMinutes(): number {
|
|
369
|
+
const raw: string | undefined =
|
|
370
|
+
process.env["DOCKER_SWARM_INVENTORY_STALE_MINUTES"];
|
|
371
|
+
if (raw) {
|
|
372
|
+
const parsed: number = parseInt(raw, 10);
|
|
373
|
+
if (!isNaN(parsed) && parsed >= 5) {
|
|
374
|
+
return parsed;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return 15;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export default new Service();
|
|
@@ -72,7 +72,10 @@ export class ExceptionAggregationService {
|
|
|
72
72
|
new Map([
|
|
73
73
|
["hostId", ServiceType.Host],
|
|
74
74
|
["dockerHostId", ServiceType.DockerHost],
|
|
75
|
+
["podmanHostId", ServiceType.PodmanHost],
|
|
75
76
|
["kubernetesClusterId", ServiceType.KubernetesCluster],
|
|
77
|
+
["proxmoxClusterId", ServiceType.ProxmoxCluster],
|
|
78
|
+
["cephClusterId", ServiceType.CephCluster],
|
|
76
79
|
["serverlessFunctionId", ServiceType.ServerlessFunction],
|
|
77
80
|
["cloudResourceId", ServiceType.CloudResource],
|
|
78
81
|
["rumApplicationId", ServiceType.RealUserMonitor],
|
|
@@ -441,15 +441,23 @@ export class Service extends DatabaseService<Model> {
|
|
|
441
441
|
|
|
442
442
|
@CaptureSpan()
|
|
443
443
|
public async markDisconnectedHosts(): Promise<void> {
|
|
444
|
-
|
|
444
|
+
/*
|
|
445
|
+
* Threshold must stay well above the 5-minute OTel ingest
|
|
446
|
+
* maintenance fence (MAINTENANCE_FENCE_TTL_SECONDS in
|
|
447
|
+
* OtelIngestBaseService) — lastSeenAt is legitimately up to
|
|
448
|
+
* ~5 minutes stale during continuous telemetry, so a threshold
|
|
449
|
+
* equal to the fence TTL flaps healthy resources. 15 minutes
|
|
450
|
+
* gives 3x headroom.
|
|
451
|
+
*/
|
|
452
|
+
const fifteenMinutesAgo: Date = OneUptimeDate.addRemoveMinutes(
|
|
445
453
|
OneUptimeDate.getCurrentDate(),
|
|
446
|
-
-
|
|
454
|
+
-15,
|
|
447
455
|
);
|
|
448
456
|
|
|
449
457
|
const connectedHosts: Array<Model> = await this.findBy({
|
|
450
458
|
query: {
|
|
451
459
|
otelCollectorStatus: "connected",
|
|
452
|
-
lastSeenAt: QueryHelper.lessThan(
|
|
460
|
+
lastSeenAt: QueryHelper.lessThan(fifteenMinutesAgo),
|
|
453
461
|
},
|
|
454
462
|
select: {
|
|
455
463
|
_id: true,
|
|
@@ -6,8 +6,10 @@ import IncidentSeverity from "../../Models/DatabaseModels/IncidentSeverity";
|
|
|
6
6
|
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
7
7
|
import Label from "../../Models/DatabaseModels/Label";
|
|
8
8
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
9
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
9
10
|
import Service from "../../Models/DatabaseModels/Service";
|
|
10
11
|
import DockerHostService from "./DockerHostService";
|
|
12
|
+
import PodmanHostService from "./PodmanHostService";
|
|
11
13
|
import HostService from "./HostService";
|
|
12
14
|
import IncidentFeedService from "./IncidentFeedService";
|
|
13
15
|
import IncidentLabelRuleService from "./IncidentLabelRuleService";
|
|
@@ -33,6 +35,7 @@ class IncidentLabelRuleEngineServiceClass {
|
|
|
33
35
|
* - all labels of the incident's hosts when `inheritLabelsFromHosts`
|
|
34
36
|
* - all labels of the incident's Kubernetes clusters when `inheritLabelsFromKubernetesClusters`
|
|
35
37
|
* - all labels of the incident's Docker hosts when `inheritLabelsFromDockerHosts`
|
|
38
|
+
* - all labels of the incident's Podman hosts when `inheritLabelsFromPodmanHosts`
|
|
36
39
|
* - all labels of the incident's services when `inheritLabelsFromServices`
|
|
37
40
|
* The union is deduped against labels already on the incident before insert
|
|
38
41
|
* to avoid PK conflicts on the IncidentLabel join table.
|
|
@@ -67,6 +70,7 @@ class IncidentLabelRuleEngineServiceClass {
|
|
|
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 IncidentLabelRuleEngineServiceClass {
|
|
|
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<IncidentLabelRule> = [];
|
|
87
92
|
|
|
@@ -111,6 +116,9 @@ class IncidentLabelRuleEngineServiceClass {
|
|
|
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
|
}
|
|
@@ -193,6 +201,25 @@ class IncidentLabelRuleEngineServiceClass {
|
|
|
193
201
|
}
|
|
194
202
|
}
|
|
195
203
|
|
|
204
|
+
if (inheritFromPodmanHosts && incident.podmanHosts?.length) {
|
|
205
|
+
for (const incidentPodmanHost of incident.podmanHosts) {
|
|
206
|
+
if (!incidentPodmanHost.id) {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
const podmanHost: PodmanHost | null =
|
|
210
|
+
await PodmanHostService.findOneById({
|
|
211
|
+
id: incidentPodmanHost.id,
|
|
212
|
+
select: { labels: { _id: true } },
|
|
213
|
+
props: { isRoot: true },
|
|
214
|
+
});
|
|
215
|
+
for (const label of podmanHost?.labels || []) {
|
|
216
|
+
if (label.id) {
|
|
217
|
+
labelIdsToAdd.add(label.id.toString());
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
196
223
|
if (inheritFromServices && incident.services?.length) {
|
|
197
224
|
for (const incidentService of incident.services) {
|
|
198
225
|
if (!incidentService.id) {
|
|
@@ -14,6 +14,9 @@ import Label from "../../Models/DatabaseModels/Label";
|
|
|
14
14
|
import Monitor from "../../Models/DatabaseModels/Monitor";
|
|
15
15
|
import MonitorOwnerTeam from "../../Models/DatabaseModels/MonitorOwnerTeam";
|
|
16
16
|
import MonitorOwnerUser from "../../Models/DatabaseModels/MonitorOwnerUser";
|
|
17
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
18
|
+
import PodmanHostOwnerTeam from "../../Models/DatabaseModels/PodmanHostOwnerTeam";
|
|
19
|
+
import PodmanHostOwnerUser from "../../Models/DatabaseModels/PodmanHostOwnerUser";
|
|
17
20
|
import Service from "../../Models/DatabaseModels/Service";
|
|
18
21
|
import ServiceOwnerTeam from "../../Models/DatabaseModels/ServiceOwnerTeam";
|
|
19
22
|
import ServiceOwnerUser from "../../Models/DatabaseModels/ServiceOwnerUser";
|
|
@@ -31,6 +34,8 @@ import KubernetesClusterOwnerUserService from "./KubernetesClusterOwnerUserServi
|
|
|
31
34
|
import MonitorOwnerTeamService from "./MonitorOwnerTeamService";
|
|
32
35
|
import MonitorOwnerUserService from "./MonitorOwnerUserService";
|
|
33
36
|
import MonitorService from "./MonitorService";
|
|
37
|
+
import PodmanHostOwnerTeamService from "./PodmanHostOwnerTeamService";
|
|
38
|
+
import PodmanHostOwnerUserService from "./PodmanHostOwnerUserService";
|
|
34
39
|
import ServiceOwnerTeamService from "./ServiceOwnerTeamService";
|
|
35
40
|
import ServiceOwnerUserService from "./ServiceOwnerUserService";
|
|
36
41
|
import TeamService from "./TeamService";
|
|
@@ -81,6 +86,7 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
81
86
|
inheritOwnersFromHosts: true,
|
|
82
87
|
inheritOwnersFromKubernetesClusters: true,
|
|
83
88
|
inheritOwnersFromDockerHosts: true,
|
|
89
|
+
inheritOwnersFromPodmanHosts: true,
|
|
84
90
|
inheritOwnersFromServices: true,
|
|
85
91
|
},
|
|
86
92
|
limit: 100,
|
|
@@ -107,6 +113,7 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
107
113
|
let inheritFromHosts: boolean = false;
|
|
108
114
|
let inheritFromKubernetesClusters: boolean = false;
|
|
109
115
|
let inheritFromDockerHosts: boolean = false;
|
|
116
|
+
let inheritFromPodmanHosts: boolean = false;
|
|
110
117
|
let inheritFromServices: boolean = false;
|
|
111
118
|
const inheritNotifyMode: { value: boolean | null } = { value: null };
|
|
112
119
|
|
|
@@ -158,6 +165,12 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
158
165
|
inheritNotifyMode.value =
|
|
159
166
|
inheritNotifyMode.value === true ? true : notify;
|
|
160
167
|
}
|
|
168
|
+
if (rule.inheritOwnersFromPodmanHosts) {
|
|
169
|
+
inheritFromPodmanHosts = true;
|
|
170
|
+
ruleAddedAny = true;
|
|
171
|
+
inheritNotifyMode.value =
|
|
172
|
+
inheritNotifyMode.value === true ? true : notify;
|
|
173
|
+
}
|
|
161
174
|
if (rule.inheritOwnersFromServices) {
|
|
162
175
|
inheritFromServices = true;
|
|
163
176
|
ruleAddedAny = true;
|
|
@@ -177,6 +190,8 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
177
190
|
const inheritedFromKubernetesClusterTeamIds: Set<string> = new Set();
|
|
178
191
|
const inheritedFromDockerHostUserIds: Set<string> = new Set();
|
|
179
192
|
const inheritedFromDockerHostTeamIds: Set<string> = new Set();
|
|
193
|
+
const inheritedFromPodmanHostUserIds: Set<string> = new Set();
|
|
194
|
+
const inheritedFromPodmanHostTeamIds: Set<string> = new Set();
|
|
180
195
|
const inheritedFromServiceUserIds: Set<string> = new Set();
|
|
181
196
|
const inheritedFromServiceTeamIds: Set<string> = new Set();
|
|
182
197
|
|
|
@@ -351,6 +366,47 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
351
366
|
}
|
|
352
367
|
}
|
|
353
368
|
|
|
369
|
+
if (inheritFromPodmanHosts && incident.podmanHosts?.length) {
|
|
370
|
+
const podmanHostIds: Array<ObjectID> = incident.podmanHosts
|
|
371
|
+
.map((p: PodmanHost) => {
|
|
372
|
+
return p.id;
|
|
373
|
+
})
|
|
374
|
+
.filter((id: ObjectID | null | undefined): id is ObjectID => {
|
|
375
|
+
return Boolean(id);
|
|
376
|
+
});
|
|
377
|
+
if (podmanHostIds.length > 0) {
|
|
378
|
+
const [podmanHostOwnerUsers, podmanHostOwnerTeams]: [
|
|
379
|
+
Array<PodmanHostOwnerUser>,
|
|
380
|
+
Array<PodmanHostOwnerTeam>,
|
|
381
|
+
] = await Promise.all([
|
|
382
|
+
PodmanHostOwnerUserService.findBy({
|
|
383
|
+
query: { podmanHostId: QueryHelper.any(podmanHostIds) },
|
|
384
|
+
select: { userId: true },
|
|
385
|
+
props: { isRoot: true },
|
|
386
|
+
limit: LIMIT_MAX,
|
|
387
|
+
skip: 0,
|
|
388
|
+
}),
|
|
389
|
+
PodmanHostOwnerTeamService.findBy({
|
|
390
|
+
query: { podmanHostId: QueryHelper.any(podmanHostIds) },
|
|
391
|
+
select: { teamId: true },
|
|
392
|
+
props: { isRoot: true },
|
|
393
|
+
limit: LIMIT_MAX,
|
|
394
|
+
skip: 0,
|
|
395
|
+
}),
|
|
396
|
+
]);
|
|
397
|
+
for (const ownerUser of podmanHostOwnerUsers) {
|
|
398
|
+
if (ownerUser.userId) {
|
|
399
|
+
inheritedFromPodmanHostUserIds.add(ownerUser.userId.toString());
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
for (const ownerTeam of podmanHostOwnerTeams) {
|
|
403
|
+
if (ownerTeam.teamId) {
|
|
404
|
+
inheritedFromPodmanHostTeamIds.add(ownerTeam.teamId.toString());
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
354
410
|
if (inheritFromServices && incident.services?.length) {
|
|
355
411
|
const serviceIds: Array<ObjectID> = incident.services
|
|
356
412
|
.map((s: Service) => {
|
|
@@ -397,6 +453,7 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
397
453
|
...inheritedFromHostUserIds,
|
|
398
454
|
...inheritedFromKubernetesClusterUserIds,
|
|
399
455
|
...inheritedFromDockerHostUserIds,
|
|
456
|
+
...inheritedFromPodmanHostUserIds,
|
|
400
457
|
...inheritedFromServiceUserIds,
|
|
401
458
|
]);
|
|
402
459
|
const inheritedTeamIds: Set<string> = new Set([
|
|
@@ -404,6 +461,7 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
404
461
|
...inheritedFromHostTeamIds,
|
|
405
462
|
...inheritedFromKubernetesClusterTeamIds,
|
|
406
463
|
...inheritedFromDockerHostTeamIds,
|
|
464
|
+
...inheritedFromPodmanHostTeamIds,
|
|
407
465
|
...inheritedFromServiceTeamIds,
|
|
408
466
|
]);
|
|
409
467
|
|
|
@@ -476,6 +534,10 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
476
534
|
inheritedFromDockerHostUserIds.size +
|
|
477
535
|
inheritedFromDockerHostTeamIds.size >
|
|
478
536
|
0,
|
|
537
|
+
inheritedFromPodmanHosts:
|
|
538
|
+
inheritedFromPodmanHostUserIds.size +
|
|
539
|
+
inheritedFromPodmanHostTeamIds.size >
|
|
540
|
+
0,
|
|
479
541
|
inheritedFromServices:
|
|
480
542
|
inheritedFromServiceUserIds.size + inheritedFromServiceTeamIds.size >
|
|
481
543
|
0,
|
|
@@ -498,6 +560,7 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
498
560
|
inheritedFromHosts: boolean;
|
|
499
561
|
inheritedFromKubernetesClusters: boolean;
|
|
500
562
|
inheritedFromDockerHosts: boolean;
|
|
563
|
+
inheritedFromPodmanHosts: boolean;
|
|
501
564
|
inheritedFromServices: boolean;
|
|
502
565
|
}): Promise<void> {
|
|
503
566
|
const {
|
|
@@ -509,6 +572,7 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
509
572
|
inheritedFromHosts,
|
|
510
573
|
inheritedFromKubernetesClusters,
|
|
511
574
|
inheritedFromDockerHosts,
|
|
575
|
+
inheritedFromPodmanHosts,
|
|
512
576
|
inheritedFromServices,
|
|
513
577
|
} = data;
|
|
514
578
|
if (
|
|
@@ -593,6 +657,9 @@ class IncidentOwnerRuleEngineServiceClass {
|
|
|
593
657
|
if (inheritedFromDockerHosts) {
|
|
594
658
|
inheritedSources.push("Docker hosts");
|
|
595
659
|
}
|
|
660
|
+
if (inheritedFromPodmanHosts) {
|
|
661
|
+
inheritedSources.push("Podman hosts");
|
|
662
|
+
}
|
|
596
663
|
if (inheritedFromServices) {
|
|
597
664
|
inheritedSources.push("services");
|
|
598
665
|
}
|
|
@@ -29,6 +29,7 @@ import { applyIncidentSelfPrivacyFilter } from "../Utils/Incident/IncidentPrivac
|
|
|
29
29
|
import UserNotificationEventType from "../../Types/UserNotification/UserNotificationEventType";
|
|
30
30
|
import StatusPageSubscriberNotificationStatus from "../../Types/StatusPage/StatusPageSubscriberNotificationStatus";
|
|
31
31
|
import DockerHost from "../../Models/DatabaseModels/DockerHost";
|
|
32
|
+
import PodmanHost from "../../Models/DatabaseModels/PodmanHost";
|
|
32
33
|
import Host from "../../Models/DatabaseModels/Host";
|
|
33
34
|
import KubernetesCluster from "../../Models/DatabaseModels/KubernetesCluster";
|
|
34
35
|
import ServiceModel from "../../Models/DatabaseModels/Service";
|
|
@@ -571,6 +572,7 @@ export class Service extends DatabaseService<Model> {
|
|
|
571
572
|
hosts: { _id: true },
|
|
572
573
|
kubernetesClusters: { _id: true },
|
|
573
574
|
dockerHosts: { _id: true },
|
|
575
|
+
podmanHosts: { _id: true },
|
|
574
576
|
services: { _id: true },
|
|
575
577
|
onCallDutyPolicies: { _id: true },
|
|
576
578
|
labels: { _id: true },
|
|
@@ -689,6 +691,15 @@ export class Service extends DatabaseService<Model> {
|
|
|
689
691
|
createBy.data.dockerHosts = stubs;
|
|
690
692
|
}
|
|
691
693
|
}
|
|
694
|
+
if (createBy.data.podmanHosts === undefined) {
|
|
695
|
+
const stubs: Array<PodmanHost> | undefined = stubBy(
|
|
696
|
+
PodmanHost,
|
|
697
|
+
incidentTemplate.podmanHosts,
|
|
698
|
+
);
|
|
699
|
+
if (stubs && stubs.length > 0) {
|
|
700
|
+
createBy.data.podmanHosts = stubs;
|
|
701
|
+
}
|
|
702
|
+
}
|
|
692
703
|
if (createBy.data.services === undefined) {
|
|
693
704
|
const stubs: Array<ServiceModel> | undefined = stubBy(
|
|
694
705
|
ServiceModel,
|