From 919d118f21a4c7e2d9ea8a122e34075500f50312 Mon Sep 17 00:00:00 2001 From: Mathieu <70369997+MathieuRA@users.noreply.github.com> Date: Fri, 24 Sep 2021 17:25:42 +0200 Subject: [PATCH] feat(xo-web/health): filter duplicated MAC addresses by running VMs (#5917) See xoa-support#4054 --- CHANGELOG.unreleased.md | 1 + packages/xo-web/src/common/intl/messages.js | 1 + .../src/xo-app/dashboard/health/index.js | 24 +++++++++++++------ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 803656c6c64..4440b5c25bc 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -9,6 +9,7 @@ - [Backup] Go back to previous page instead of going to the overview after editing a job: keeps current filters and page (PR [#5913](https://github.com/vatesfr/xen-orchestra/pull/5913)) - [Health] Do not take into consideration duplicated MAC addresses from CR VMs (PR [#5916](https://github.com/vatesfr/xen-orchestra/pull/5916)) +- [Health] Ability to filter duplicated MAC addresses by running VMs (PR [#5917](https://github.com/vatesfr/xen-orchestra/pull/5917)) ### Bug fixes diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index ec2ba290813..d97dbe5d51b 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -117,6 +117,7 @@ const messages = { filterOnlyManaged: 'Managed disks', filterOnlyOrphaned: 'Orphaned disks', filterOnlyRegular: 'Normal disks', + filterOnlyRunningVms: 'Running VMs', filterOnlySnapshots: 'Snapshot disks', filterOnlyUnmanaged: 'Unmanaged disks', filterSaveAs: 'Save…', diff --git a/packages/xo-web/src/xo-app/dashboard/health/index.js b/packages/xo-web/src/xo-app/dashboard/health/index.js index d4a34572302..169549117b5 100644 --- a/packages/xo-web/src/xo-app/dashboard/health/index.js +++ b/packages/xo-web/src/xo-app/dashboard/health/index.js @@ -80,14 +80,14 @@ const AlarmColPool = connectStore(() => ({ const DUPLICATED_MAC_ADDRESSES_COLUMNS = [ { name: _('vifMacLabel'), - itemRenderer: macAddress =>
{macAddress}
, - sortCriteria: macAddress => macAddress, + itemRenderer: ({ mac }) =>
{mac}
, + sortCriteria: ({ mac }) => mac, }, { name: _('vifs'), - itemRenderer: (macAddress, { vifsByMac }) => ( + itemRenderer: ({ vifs }) => (
- {vifsByMac[macAddress].map(vif => ( + {vifs.map(vif => ( {_('vifOnVmWithNetwork', { @@ -103,6 +103,10 @@ const DUPLICATED_MAC_ADDRESSES_COLUMNS = [ }, ] +const DUPLICATED_MAC_ADDRESSES_FILTERS = { + filterOnlyRunningVms: 'nRunningVms:>1', +} + const SR_COLUMNS = [ { name: _('srName'), @@ -532,6 +536,7 @@ const HANDLED_VDI_TYPES = new Set(['system', 'user', 'ephemeral']) guestToolsVms: getGuestToolsVms, userSrs: getUserSrs, vifsByMac: getVifsByMac, + vms: getVms, } }) export default class Health extends Component { @@ -584,11 +589,16 @@ export default class Health extends Component { _getDuplicatedMacAddresses = createCollectionWrapper( createSelector( () => this._getVifsByMac(), - vifsByMac => { + () => this.props.vms, + (vifsByMac, vms) => { const duplicatedMacAddresses = [] for (const [macAddress, vifs] of Object.entries(vifsByMac)) { if (vifs.length > 1) { - duplicatedMacAddresses.push(macAddress) + duplicatedMacAddresses.push({ + mac: macAddress, + nRunningVms: vifs.filter(vif => vms[vif.$VM].power_state === 'Running').length, + vifs, + }) } } return duplicatedMacAddresses.sort() @@ -754,8 +764,8 @@ export default class Health extends Component { collection={props.areObjectsFetched ? duplicatedMacAddresses : null} columns={DUPLICATED_MAC_ADDRESSES_COLUMNS} component={SortedTable} - data-vifsByMac={this.props.vifsByMac} emptyMessage={_('noDuplicatedMacAddresses')} + filters={DUPLICATED_MAC_ADDRESSES_FILTERS} stateUrlParam='s_duplicated_mac_addresses' />