diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md
index 34dd37723..16921618e 100644
--- a/CHANGELOG.unreleased.md
+++ b/CHANGELOG.unreleased.md
@@ -10,6 +10,7 @@
- [SR] show an icon on SR during VDI coalescing (with XCP-ng 8.3+) (PR [#7241](https://github.com/vatesfr/xen-orchestra/pull/7241))
- [VDI/Export] Expose NBD settings in the XO and REST APIs api (PR [#7251](https://github.com/vatesfr/xen-orchestra/pull/7251))
+- [Menu/Proxies] Added a warning icon if unable to check proxies upgrade (PR [#7237](https://github.com/vatesfr/xen-orchestra/pull/7237))
### Bug fixes
diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js
index d585c42f9..204a98bf6 100644
--- a/packages/xo-web/src/common/intl/messages.js
+++ b/packages/xo-web/src/common/intl/messages.js
@@ -2703,6 +2703,8 @@ const messages = {
proxiesNeedUpgrade: 'Some proxies need to be upgraded.',
upgradeNeededForProxies: 'Some proxies need to be upgraded. Click here to get more information.',
xoProxyConcreteGuide: 'XO Proxy: a concrete guide',
+ someProxiesHaveErrors:
+ '{n, number} prox{n, plural, one {y} other {ies}} ha{n, plural, one {s} other {ve}} error{n, plural, one {} other {s}}',
// ----- Utils -----
secondsFormat: '{seconds, plural, one {# second} other {# seconds}}',
diff --git a/packages/xo-web/src/common/xo/index.js b/packages/xo-web/src/common/xo/index.js
index d7af89a7b..544347e0d 100644
--- a/packages/xo-web/src/common/xo/index.js
+++ b/packages/xo-web/src/common/xo/index.js
@@ -512,7 +512,14 @@ subscribeHostMissingPatches.forceRefresh = host => {
const proxiesApplianceUpdaterState = {}
export const subscribeProxiesApplianceUpdaterState = (proxyId, cb) => {
if (proxiesApplianceUpdaterState[proxyId] === undefined) {
- proxiesApplianceUpdaterState[proxyId] = createSubscription(() => getProxyApplianceUpdaterState(proxyId))
+ proxiesApplianceUpdaterState[proxyId] = createSubscription(async () => {
+ try {
+ return await getProxyApplianceUpdaterState(proxyId)
+ } catch (error) {
+ console.error(error)
+ return { state: 'error' }
+ }
+ })
}
return proxiesApplianceUpdaterState[proxyId](cb)
}
diff --git a/packages/xo-web/src/xo-app/menu/index.js b/packages/xo-web/src/xo-app/menu/index.js
index 4aa02c6d5..8caed8b93 100644
--- a/packages/xo-web/src/xo-app/menu/index.js
+++ b/packages/xo-web/src/xo-app/menu/index.js
@@ -32,7 +32,7 @@ import {
getXoaState,
isAdmin,
} from 'selectors'
-import { every, forEach, identity, isEmpty, isEqual, map, pick, size, some } from 'lodash'
+import { countBy, every, forEach, identity, isEmpty, isEqual, map, pick, size, some } from 'lodash'
import styles from './index.css'
@@ -111,7 +111,10 @@ export default class Menu extends Component {
() => this.state.proxyStates,
proxyStates => some(proxyStates, state => state.endsWith('-upgrade-needed'))
)
-
+ _getNProxiesErrors = createSelector(
+ () => this.state.proxyStates,
+ proxyStates => countBy(proxyStates).error
+ )
_checkPermissions = createSelector(
() => this.props.isAdmin,
() => this.props.permissions,
@@ -213,6 +216,7 @@ export default class Menu extends Component {
const noOperatablePools = this._getNoOperatablePools()
const noResourceSets = this._getNoResourceSets()
const noNotifications = this._getNoNotifications()
+ const nProxiesErrors = this._getNProxiesErrors()
const missingPatchesWarning = this._hasMissingPatches() ? (
@@ -468,6 +472,10 @@ export default class Menu extends Component {
]}
/>
+ ) : nProxiesErrors > 0 ? (
+
+ {nProxiesErrors}
+
) : null,
],
},