From a02c6f94bd541b07067ac30bab609896b3f6f988 Mon Sep 17 00:00:00 2001 From: Sneha Patel Date: Thu, 9 Sep 2021 12:40:38 -0500 Subject: Add Assemblies schema to Hardware Status - Inventory and LEDs Signed-off-by: Sneha Patel Change-Id: I1a4edae664d008a4f618d03d62e2319d8157ed6d --- src/locales/en-US.json | 1 + src/store/index.js | 2 + src/store/modules/HardwareStatus/AssemblyStore.js | 66 +++++++++ src/views/HardwareStatus/Inventory/Inventory.vue | 15 +++ .../Inventory/InventoryTableAssembly.vue | 149 +++++++++++++++++++++ 5 files changed, 233 insertions(+) create mode 100644 src/store/modules/HardwareStatus/AssemblyStore.js create mode 100644 src/views/HardwareStatus/Inventory/InventoryTableAssembly.vue diff --git a/src/locales/en-US.json b/src/locales/en-US.json index 4948c9da..a94d3995 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -374,6 +374,7 @@ "processors": "Processors", "quicklinkTitle": "Quick links to hardware components", "system": "System", + "assemblies": "Assemblies", "systemIndicator": { "powerStatus": "Power status", "identifyLed": "System identify LED", diff --git a/src/store/index.js b/src/store/index.js index 2408055d..d7c1b22d 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -23,6 +23,7 @@ import FanStore from './modules/HardwareStatus/FanStore'; import ChassisStore from './modules/HardwareStatus/ChassisStore'; import BmcStore from './modules/HardwareStatus/BmcStore'; import ProcessorStore from './modules/HardwareStatus/ProcessorStore'; +import AssemblyStore from './modules/HardwareStatus/AssemblyStore'; import PostCodeLogsStore from './modules/Logs/PostCodeLogsStore'; import PoliciesStore from './modules/SecurityAndAccess/PoliciesStore'; import FactoryResetStore from './modules/Operations/FactoryResetStore'; @@ -61,6 +62,7 @@ export default new Vuex.Store({ chassis: ChassisStore, bmc: BmcStore, processors: ProcessorStore, + assemblies: AssemblyStore, postCodeLogs: PostCodeLogsStore, virtualMedia: VirtualMediaStore, policies: PoliciesStore, diff --git a/src/store/modules/HardwareStatus/AssemblyStore.js b/src/store/modules/HardwareStatus/AssemblyStore.js new file mode 100644 index 00000000..56e5631d --- /dev/null +++ b/src/store/modules/HardwareStatus/AssemblyStore.js @@ -0,0 +1,66 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +const AssemblyStore = { + namespaced: true, + state: { + assemblies: null, + }, + getters: { + assemblies: (state) => state.assemblies, + }, + mutations: { + setAssemblyInfo: (state, data) => { + state.assemblies = data.map((assembly) => { + const { + MemberId, + PartNumber, + SerialNumber, + SparePartNumber, + Model, + Name, + Location, + LocationIndicatorActive, + } = assembly; + return { + id: MemberId, + partNumber: PartNumber, + serialNumber: SerialNumber, + sparePartNumber: SparePartNumber, + model: Model, + name: Name, + locationNumber: Location?.PartLocation?.ServiceLabel, + identifyLed: LocationIndicatorActive, + uri: assembly['@odata.id'], + }; + }); + }, + }, + actions: { + async getAssemblyInfo({ commit }) { + return await api + .get('/redfish/v1/Chassis/chassis/Assembly') + .then(({ data }) => commit('setAssemblyInfo', data?.Assemblies)) + .catch((error) => console.log(error)); + }, + async updateIdentifyLedValue({ dispatch }, led) { + const uri = led.uri; + const updatedIdentifyLedValue = { + LocationIndicatorActive: led.identifyLed, + }; + return await api.patch(uri, updatedIdentifyLedValue).catch((error) => { + dispatch('getAssemblyInfo'); + console.log('error', error); + if (led.identifyLed) { + throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed')); + } else { + throw new Error( + i18n.t('pageInventory.toast.errorDisableIdentifyLed') + ); + } + }); + }, + }, +}; + +export default AssemblyStore; diff --git a/src/views/HardwareStatus/Inventory/Inventory.vue b/src/views/HardwareStatus/Inventory/Inventory.vue index a729aaa2..e3a7ea2f 100644 --- a/src/views/HardwareStatus/Inventory/Inventory.vue +++ b/src/views/HardwareStatus/Inventory/Inventory.vue @@ -42,6 +42,9 @@ + + + @@ -55,6 +58,7 @@ import TableFans from './InventoryTableFans'; import TableBmcManager from './InventoryTableBmcManager'; import TableChassis from './InventoryTableChassis'; import TableProcessors from './InventoryTableProcessors'; +import TableAssembly from './InventoryTableAssembly'; import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin'; import PageSection from '@/components/Global/PageSection'; import JumpLink16 from '@carbon/icons-vue/es/jump-link/16'; @@ -72,6 +76,7 @@ export default { TableBmcManager, TableChassis, TableProcessors, + TableAssembly, PageSection, JumpLink: JumpLink16, }, @@ -133,6 +138,12 @@ export default { href: '#system', linkText: this.$t('pageInventory.system'), }, + { + id: 'assembly', + dataRef: 'assembly', + href: '#assembly', + linkText: this.$t('pageInventory.assemblies'), + }, ], }; }, @@ -170,6 +181,9 @@ export default { const systemTablePromise = new Promise((resolve) => { this.$root.$on('hardware-status-system-complete', () => resolve()); }); + const assemblyTablePromise = new Promise((resolve) => { + this.$root.$on('hardware-status-assembly-complete', () => resolve()); + }); // Combine all child component Promises to indicate // when page data load complete Promise.all([ @@ -181,6 +195,7 @@ export default { processorsTablePromise, serviceIndicatorPromise, systemTablePromise, + assemblyTablePromise, ]).finally(() => this.endLoader()); }, }; diff --git a/src/views/HardwareStatus/Inventory/InventoryTableAssembly.vue b/src/views/HardwareStatus/Inventory/InventoryTableAssembly.vue new file mode 100644 index 00000000..df435c84 --- /dev/null +++ b/src/views/HardwareStatus/Inventory/InventoryTableAssembly.vue @@ -0,0 +1,149 @@ + + + -- cgit v1.2.3