diff --git a/frontend-modern/src/features/docker/__tests__/dockerPageModel.test.ts b/frontend-modern/src/features/docker/__tests__/dockerPageModel.test.ts index 9c3137049..6891add03 100644 --- a/frontend-modern/src/features/docker/__tests__/dockerPageModel.test.ts +++ b/frontend-modern/src/features/docker/__tests__/dockerPageModel.test.ts @@ -103,7 +103,7 @@ describe('dockerPageModel', () => { buildDockerContainerDefaultHiddenColumnIds([ makeResource({ id: 'ctr-1', type: 'app-container' }), ]), - ).toEqual(['disk', 'tags', 'netIo', 'diskIo']); + ).toEqual(['disk', 'tags', 'backup', 'netIo', 'diskIo']); }); it('keeps Docker container I/O columns default-visible once telemetry exists', () => { @@ -116,7 +116,7 @@ describe('dockerPageModel', () => { diskIO: { readRate: 0, writeRate: 0 }, }), ]), - ).toEqual(['disk', 'tags']); + ).toEqual(['disk', 'tags', 'backup']); }); it('decides Docker container network and disk I/O defaults independently', () => { @@ -128,7 +128,7 @@ describe('dockerPageModel', () => { network: { rxBytes: 128, txBytes: 64 }, }), ]), - ).toEqual(['disk', 'tags', 'diskIo']); + ).toEqual(['disk', 'tags', 'backup', 'diskIo']); expect( buildDockerContainerDefaultHiddenColumnIds([ @@ -138,7 +138,7 @@ describe('dockerPageModel', () => { diskIO: { readRate: 128, writeRate: 64 }, }), ]), - ).toEqual(['disk', 'tags', 'netIo']); + ).toEqual(['disk', 'tags', 'backup', 'netIo']); }); it('builds host-identity badges for Docker workload group rows', () => { diff --git a/frontend-modern/src/features/kubernetes/KubernetesPageSurface.tsx b/frontend-modern/src/features/kubernetes/KubernetesPageSurface.tsx index 06c530473..e4f8c8948 100644 --- a/frontend-modern/src/features/kubernetes/KubernetesPageSurface.tsx +++ b/frontend-modern/src/features/kubernetes/KubernetesPageSurface.tsx @@ -109,6 +109,11 @@ function KubernetesOverview(props: KubernetesOverviewProps) { suppressPlatformFilter: true, allowEmbeddedScopeFilters: true, columnVisibilityStorageScope: KUBERNETES_WORKLOAD_COLUMN_SCOPE, + // Backup column is driven exclusively by Proxmox vzdump / PBS data + // (`resource.proxmox.lastBackup` in useWorkloads); Kubernetes + // workloads have no equivalent source at this integration layer, so + // the column would always render blank. Hide by default. + additionalDefaultHiddenColumnIds: ['backup'], compactGroupHeaders: true, }); const showSharedFilterToolbar = createMemo( diff --git a/frontend-modern/src/features/platformPage/appContainerColumns.ts b/frontend-modern/src/features/platformPage/appContainerColumns.ts index 6df63fb74..1880cec12 100644 --- a/frontend-modern/src/features/platformPage/appContainerColumns.ts +++ b/frontend-modern/src/features/platformPage/appContainerColumns.ts @@ -1,6 +1,12 @@ import type { Resource } from '@/types/resource'; -export const APP_CONTAINER_BASE_DEFAULT_HIDDEN_COLUMNS = ['disk', 'tags'] as const; +// Default-hidden columns for app-container workloads. `disk` and `tags` are +// existing hides; `backup` is added because the workload-table Backup column +// is driven exclusively by `resource.proxmox.lastBackup`, which Proxmox VE +// populates from its vzdump scheduler / PBS integration. App containers +// (Docker, Podman, TrueNAS apps) have no equivalent source — the cell is +// not just empty, the concept doesn't exist at this integration layer. +export const APP_CONTAINER_BASE_DEFAULT_HIDDEN_COLUMNS = ['disk', 'tags', 'backup'] as const; export const APP_CONTAINER_COLUMN_LABEL_OVERRIDES = { disk: 'Writable layer', diff --git a/frontend-modern/src/features/vmware/VmwarePageSurface.tsx b/frontend-modern/src/features/vmware/VmwarePageSurface.tsx index ea574a34f..b0f15e1c4 100644 --- a/frontend-modern/src/features/vmware/VmwarePageSurface.tsx +++ b/frontend-modern/src/features/vmware/VmwarePageSurface.tsx @@ -46,6 +46,14 @@ const VALID_TABS = new Set(VMWARE_TAB_SPECS.map((tab) => tab.id const VMWARE_PLATFORM_FILTER = 'vmware-vsphere'; const VMWARE_WORKLOAD_STATUS_STORAGE_SCOPE = 'vmware'; const VMWARE_WORKLOAD_COLUMN_VISIBILITY_SCOPE = 'vmware-vms'; +// Backup column on the workload table is driven exclusively by Proxmox +// vzdump / PBS data (`resource.proxmox.lastBackup` in useWorkloads). +// vCenter has no native backup concept — vSphere backups happen in +// third-party products (Veeam, Commvault, Rubrik, Cohesity, Dell +// PowerProtect) or VMware's separately-licensed Live Recovery / SRM, +// none of which surface through vCenter's inventory API. Hide the +// column by default rather than render a permanently blank cell. +const VMWARE_WORKLOAD_DEFAULT_HIDDEN_COLUMN_IDS: readonly string[] = ['backup']; const VMWARE_WORKLOAD_STATUS_OPTIONS: readonly WorkloadsStatusOption[] = [ { value: 'all', label: 'All' }, { value: 'running', label: 'Powered on' }, @@ -233,6 +241,7 @@ function VmwareOverview(props: VmwareOverviewProps) { allowEmbeddedScopeFilters: true, statusModeStorageScope: VMWARE_WORKLOAD_STATUS_STORAGE_SCOPE, columnVisibilityStorageScope: VMWARE_WORKLOAD_COLUMN_VISIBILITY_SCOPE, + additionalDefaultHiddenColumnIds: [...VMWARE_WORKLOAD_DEFAULT_HIDDEN_COLUMN_IDS], compactGroupHeaders: true, groupNodeDrawerMode: 'disabled', metricDisplayMode: props.metricDisplayMode,