diff --git a/packages/manager/apps/dedicated-servers/src/components/vRackCell.tsx b/packages/manager/apps/dedicated-servers/src/components/vRackCell.tsx index ec83f5f276d9..8869ddc1065b 100644 --- a/packages/manager/apps/dedicated-servers/src/components/vRackCell.tsx +++ b/packages/manager/apps/dedicated-servers/src/components/vRackCell.tsx @@ -1,18 +1,17 @@ import React from 'react'; -import { DataGridTextCell } from '@ovh-ux/manager-react-components'; -import { useGetVrack } from '@/hooks/useGetVrack'; +import { OdsLink } from '@ovhcloud/ods-components/react'; import { SkeletonCell } from './skeletonCell'; -import { DedicatedServer } from '@/data/types/server.type'; - -export const DSVrack = (server: DedicatedServer) => { - const { vrack, isLoading, error } = useGetVrack({ server: server.name }); +import { useGetVrack } from '@/hooks/useGetVrack'; +import { useVrackUrl } from '@/hooks/useVrackUrl'; +import type { DedicatedServer } from '@/data/types/server.type'; +export const DSVrack = ({name}: DedicatedServer) => { + const { vrack = [], isLoading, error } = useGetVrack({ server: name }); + const vrackUrl = useVrackUrl(vrack[0]); return ( - {vrack?.[0] ? ( - - {vrack[0]} - + {vrack[0] ? ( + ) : ( <>- )} diff --git a/packages/manager/apps/dedicated-servers/src/hooks/useVrackUrl.ts b/packages/manager/apps/dedicated-servers/src/hooks/useVrackUrl.ts new file mode 100644 index 000000000000..0676c2ce0060 --- /dev/null +++ b/packages/manager/apps/dedicated-servers/src/hooks/useVrackUrl.ts @@ -0,0 +1,20 @@ +import { useContext, useEffect, useState } from 'react'; +import { ShellContext } from '@ovh-ux/manager-react-shell-client'; + +export const useVrackUrl = (vRack: string) => { + const { navigation } = useContext(ShellContext).shell; + + const [url, setUrl] = useState(''); + + useEffect(() => { + if (vRack) { + navigation + .getURL('dedicated', `#/vrack/${vRack}`, {}) + .then((data: string) => { + setUrl(data); + }); + } + }, [navigation, vRack]); + + return url; +}; \ No newline at end of file diff --git a/packages/manager/modules/netapp/src/dashboard/index/template.html b/packages/manager/modules/netapp/src/dashboard/index/template.html index a991ebf949b7..bd06681a0171 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/template.html +++ b/packages/manager/modules/netapp/src/dashboard/index/template.html @@ -60,7 +60,7 @@ data-ng-if="!$ctrl.networkInformations.vrackServices || $ctrl.networkInformations.vrackServices.currentState.productStatus !== $ctrl.VRACK_SERVICES_STATUS.DISABLED" data-ng-class="{ 'oui-badge_success': $ctrl.networkInformations.status === $ctrl.NETWORK_STATUS.ASSOCIATED, - 'oui-badge_info': $ctrl.networkInformations.status === $ctrl.NETWORK_STATUS.TO_CONFIGURE, + 'oui-badge_error': $ctrl.networkInformations.status === $ctrl.NETWORK_STATUS.TO_CONFIGURE, 'oui-badge_warning': [$ctrl.NETWORK_STATUS.DISSOCIATING, $ctrl.NETWORK_STATUS.ASSOCIATING].includes($ctrl.networkInformations.status) }" data-translate="{{ 'netapp_dashboard_network_configuration_status_' + $ctrl.networkInformations.status }}" diff --git a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_de_DE.json b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_de_DE.json index ea99815af022..ee3e7d45b871 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_de_DE.json +++ b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_de_DE.json @@ -8,7 +8,7 @@ "netapp_dashboard_information_quota_formatted": "{{ quota }} GB", "netapp_dashboard_network_configuration": "Netzwerkkonfiguration", "netapp_dashboard_network_configuration_status": "Status", - "netapp_dashboard_network_configuration_status_to_configure": "Bereit zum Konfigurieren", + "netapp_dashboard_network_configuration_status_to_configure": "Nutzerkonfiguration erforderlich", "netapp_dashboard_network_configuration_status_associating": "Wird bereitgestellt", "netapp_dashboard_network_configuration_status_dissociating": "Wird getrennt", "netapp_dashboard_network_configuration_status_associated": "Eingesetzt", diff --git a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_en_GB.json b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_en_GB.json index 59b3b8e58c5c..e58eb5c197be 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_en_GB.json +++ b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_en_GB.json @@ -8,7 +8,7 @@ "netapp_dashboard_information_quota_formatted": "{{quota}}GB", "netapp_dashboard_network_configuration": "Network configuration", "netapp_dashboard_network_configuration_status": "Status", - "netapp_dashboard_network_configuration_status_to_configure": "Ready to configure", + "netapp_dashboard_network_configuration_status_to_configure": "Require user configuration", "netapp_dashboard_network_configuration_status_associating": "Deploying...", "netapp_dashboard_network_configuration_status_dissociating": "Detaching...", "netapp_dashboard_network_configuration_status_associated": "Running", diff --git a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_es_ES.json b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_es_ES.json index 8eaeeecbe5f1..606f8f879562 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_es_ES.json +++ b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_es_ES.json @@ -8,7 +8,7 @@ "netapp_dashboard_information_quota_formatted": "{{ quota }} GB", "netapp_dashboard_network_configuration": "Configuración de la red", "netapp_dashboard_network_configuration_status": "Estado", - "netapp_dashboard_network_configuration_status_to_configure": "Listo para configurar", + "netapp_dashboard_network_configuration_status_to_configure": "Configuración del usuario requerida", "netapp_dashboard_network_configuration_status_associating": "Despliegue en proceso", "netapp_dashboard_network_configuration_status_dissociating": "Desvinculación en proceso", "netapp_dashboard_network_configuration_status_associated": "Desplegado", diff --git a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_fr_CA.json b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_fr_CA.json index 022d7d65d8db..463e0f3228e4 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_fr_CA.json +++ b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_fr_CA.json @@ -8,7 +8,7 @@ "netapp_dashboard_information_quota_formatted": "{{ quota }} Go", "netapp_dashboard_network_configuration": "Configuration du réseau", "netapp_dashboard_network_configuration_status": "Statut", - "netapp_dashboard_network_configuration_status_to_configure": "Prêt à configurer", + "netapp_dashboard_network_configuration_status_to_configure": "Configuration utilisateur requise", "netapp_dashboard_network_configuration_status_associating": "En cours de déploiement", "netapp_dashboard_network_configuration_status_dissociating": "Dissociation en cours", "netapp_dashboard_network_configuration_status_associated": "Déployé", diff --git a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_fr_FR.json b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_fr_FR.json index 022d7d65d8db..463e0f3228e4 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_fr_FR.json +++ b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_fr_FR.json @@ -8,7 +8,7 @@ "netapp_dashboard_information_quota_formatted": "{{ quota }} Go", "netapp_dashboard_network_configuration": "Configuration du réseau", "netapp_dashboard_network_configuration_status": "Statut", - "netapp_dashboard_network_configuration_status_to_configure": "Prêt à configurer", + "netapp_dashboard_network_configuration_status_to_configure": "Configuration utilisateur requise", "netapp_dashboard_network_configuration_status_associating": "En cours de déploiement", "netapp_dashboard_network_configuration_status_dissociating": "Dissociation en cours", "netapp_dashboard_network_configuration_status_associated": "Déployé", diff --git a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_it_IT.json b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_it_IT.json index 44f7697d087f..63944a7ef2b1 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_it_IT.json +++ b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_it_IT.json @@ -8,7 +8,7 @@ "netapp_dashboard_information_quota_formatted": "{{ quota }} GB", "netapp_dashboard_network_configuration": "Configurazione di rete", "netapp_dashboard_network_configuration_status": "Stato", - "netapp_dashboard_network_configuration_status_to_configure": "Pronto per la configurazione", + "netapp_dashboard_network_configuration_status_to_configure": "Configurazione utente necessaria", "netapp_dashboard_network_configuration_status_associating": "Deploy in corso...", "netapp_dashboard_network_configuration_status_dissociating": "Dissociazione in corso...", "netapp_dashboard_network_configuration_status_associated": "Implementato", diff --git a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_pl_PL.json b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_pl_PL.json index cd3a81b4aba6..9438adb1d81f 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_pl_PL.json +++ b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_pl_PL.json @@ -8,7 +8,7 @@ "netapp_dashboard_information_quota_formatted": "{{quota}}", "netapp_dashboard_network_configuration": "Konfiguracja sieci", "netapp_dashboard_network_configuration_status": "Status", - "netapp_dashboard_network_configuration_status_to_configure": "Gotowe do konfiguracji", + "netapp_dashboard_network_configuration_status_to_configure": "Wymagana konfiguracja użytkownika", "netapp_dashboard_network_configuration_status_associating": "W trakcie wdrażania", "netapp_dashboard_network_configuration_status_dissociating": "Odłączanie w toku", "netapp_dashboard_network_configuration_status_associated": "Wdrożone", diff --git a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_pt_PT.json b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_pt_PT.json index 1d6276208e65..5d4f98a898c7 100644 --- a/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_pt_PT.json +++ b/packages/manager/modules/netapp/src/dashboard/index/translations/Messages_pt_PT.json @@ -8,7 +8,7 @@ "netapp_dashboard_information_quota_formatted": "{{ quota }} GB", "netapp_dashboard_network_configuration": "Configuração da rede", "netapp_dashboard_network_configuration_status": "Estado", - "netapp_dashboard_network_configuration_status_to_configure": "Pronto a configurar", + "netapp_dashboard_network_configuration_status_to_configure": "Requer configuração do utilizador", "netapp_dashboard_network_configuration_status_associating": "Implementação em curso", "netapp_dashboard_network_configuration_status_dissociating": "Separação em curso", "netapp_dashboard_network_configuration_status_associated": "Implementado", diff --git a/packages/manager/modules/netapp/src/dashboard/snapshot-policies/create/style.scss b/packages/manager/modules/netapp/src/dashboard/snapshot-policies/create/style.scss index a6b78ff7ca7b..d4f33f1fc061 100644 --- a/packages/manager/modules/netapp/src/dashboard/snapshot-policies/create/style.scss +++ b/packages/manager/modules/netapp/src/dashboard/snapshot-policies/create/style.scss @@ -1,5 +1,5 @@ -.oui-table { - th.oui-table__header { +.oui-datagrid { + .min-w-13 { min-width: 13rem; } } diff --git a/packages/manager/modules/netapp/src/dashboard/snapshot-policies/create/template.html b/packages/manager/modules/netapp/src/dashboard/snapshot-policies/create/template.html index 1f4be8102382..bf3f676e0f3e 100644 --- a/packages/manager/modules/netapp/src/dashboard/snapshot-policies/create/template.html +++ b/packages/manager/modules/netapp/src/dashboard/snapshot-policies/create/template.html @@ -137,274 +137,276 @@ > - - - - - - - - - - - - - - - + + +
- - - - - - - - - - - - - - - - - - -  
+
+ + + + + + + + + + + + - + - - + + + + + - - -
- - - + + - - , - - - - - + data-translate="netapp_snapshot_policies_create_minutes" + > + + + - - , - - - - - + data-translate="netapp_snapshot_policies_create_hours" + > + + + - - , - - - - - + data-translate="netapp_snapshot_policies_create_days" + > + + + + + + + + + + data-translate="netapp_snapshot_policies_create_snapshots_to_keep" + > +  
+ + , + data-ng-repeat="minute in rule.schedule.minutes track by $index" + data-ng-if="!rule.isInEdition" + > + + , + - - - - - - - + + , + data-ng-if="!rule.isInEdition" + data-ng-repeat="hour in rule.schedule.hours track by $index" + > + + , + - - - - - - - - - - + + + data-ng-if="!rule.isInEdition" + data-ng-repeat="day in rule.schedule.days track by $index" + > + + , + + + + - - + data-ng-if="!rule.isInEdition" + data-ng-repeat="month in rule.schedule.months track by $index" + > + + , + + + + + + + data-ng-if="!rule.isInEdition" + data-ng-repeat="weekday in rule.schedule.weekdays track by $index" + > + + , + + + + + + - + + + + + + + + + + + - - - - + + + + - - - - -
+ + + + +
+ { $stateProvider.state('netapp.dashboard.volumes.dashboard', { url: '/:volumeId', @@ -96,8 +98,8 @@ export default /* @ngInject */ ($stateProvider) => { .get( `/storage/netapp/${serviceName}/share/${volumeId}/snapshotReserve`, ) - .then(({ data }) => data?.percent || 5) - .catch(() => null), + .then(({ data: { percent = DEFAULT_SNAPSHOT_SIZE } }) => percent) + .catch(() => DEFAULT_SNAPSHOT_SIZE), goToEditVolumeReserveSpace: /* @ngInject */ ( $state, serviceName, diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/Snapshot.class.js b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/Snapshot.class.js index 21b8a902e473..bbb16ee7be61 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/Snapshot.class.js +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/Snapshot.class.js @@ -1,7 +1,7 @@ import { STATUS } from './constants'; export default class Snapshot { - constructor({ id, name, description, createdAt, type, status }) { + constructor({ id, name, description, createdAt, type, status, size }) { Object.assign(this, { id, name, @@ -9,6 +9,7 @@ export default class Snapshot { createdAt, type, status, + size, }); } diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/routing.js b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/routing.js index 6b8a75e847ef..141856a13b1a 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/routing.js +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/routing.js @@ -4,6 +4,7 @@ import { SNAPSHOT_TRACKING_PREFIX, SNAPSHOT_LISTING_TRACKING_CONTEXT, } from './constants'; +import { formatValueToBestUnit } from '../utils'; export default /* @ngInject */ ($stateProvider) => { $stateProvider.state('netapp.dashboard.volumes.dashboard.snapshots', { @@ -117,15 +118,59 @@ export default /* @ngInject */ ($stateProvider) => { return promise; }, - snapshots: /* @ngInject */ ($http, serviceName, volumeId) => - $http - .get( - `/storage/netapp/${serviceName}/share/${volumeId}/snapshot?detail=true`, - ) - .then(({ data }) => data) - .then((snapshots) => - snapshots.map((snapshot) => new Snapshot(snapshot)), + snapshots: /* @ngInject */ ($http, $q, serviceName, volumeId) => + $q + .all([ + $http.get( + `/storage/netapp/${serviceName}/share/${volumeId}/snapshot?detail=true`, + ), + $http.get(`/storage/netapp/${serviceName}/metricsToken`), + ]) + .then( + ([ + { data: snapshots }, + { + data: { endpoint, token }, + }, + ]) => { + // eslint-disable-next-line no-useless-escape + const QUERY = `\{__name__=~"snapshot_size",service_id="${serviceName}",share_id="${volumeId}"\}`; + return $http + .get(`${endpoint}/prometheus/api/v1/query?query=${QUERY}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + .then( + ({ + data: { + data: { result }, + }, + }) => { + const snapshotSizes = result.reduce( + (prev, { metric: { snapshot }, value }) => ({ + ...prev, + [snapshot]: + value?.[1] && formatValueToBestUnit(value[1]), + }), + {}, + ); + + return snapshots.map( + (snapshot) => + new Snapshot({ + ...snapshot, + size: snapshotSizes[snapshot.path.split('/').at(-1)], + }), + ); + }, + ) + .catch(() => + snapshots.map((snapshot) => new Snapshot(snapshot)), + ); + }, ), + hasOnlySystemSnapshot: /* @ngInject */ (snapshots) => !snapshots.find( (snapshot) => diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/template.html b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/template.html index 9afa4ae5b73f..f99d94e22f50 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/template.html +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/snapshots/template.html @@ -58,6 +58,14 @@

data-ng-bind=":: $row.createdAt | date:'medium':'UTC'" > + + + `sudo mount -t nfs -o rw,hard,rsize=65536,wsize=65536,vers=3,tcp ${accessPath} /media/nfs01`; @@ -8,3 +10,21 @@ export default { getFileSystemMountPath, saveMountPath, }; + +const units = ['Ko', 'Mo', 'Go', 'To']; +/** + * Format a value to the best unit. + * If you have octets to format, omit the index. + * If you have Ko to format, set index = 1. + * + * @param {number} value value to format in Ko, Mo, Go or To + * @param {number} index the right unit. Default 0 + * @returns + */ +export const formatValueToBestUnit = (value, index = 0) => { + const val = value / BASE_1024; + + if (val >= BASE_1024) return formatValueToBestUnit(val, index + 1); + + return `${Math.round(val)} ${units[index]}`; +};