diff options
author | Sandeepa Singh <sandeepa.singh@ibm.com> | 2021-07-14 13:32:22 +0300 |
---|---|---|
committer | Derick Montague <derick.montague@ibm.com> | 2021-08-10 22:20:42 +0300 |
commit | 68cbbe9014cbdcf7229a878f564d38f6d6199f25 (patch) | |
tree | cd7138959f405cb44b5d62000da9d364ed238b91 /src/store/modules/Operations/ControlStore.js | |
parent | 7affc529b7fba41193c4d48764707e9961cdd22d (diff) | |
download | webui-vue-68cbbe9014cbdcf7229a878f564d38f6d6199f25.tar.xz |
IA update: Update control section to operations
This is the third update to the information architecture changes and
has the following changes:
- The control section has been updated to operations
- The server led page has been removed
- The firmware page is moved to operations section
Signed-off-by: Sandeepa Singh <sandeepa.singh@ibm.com>
Change-Id: I2e23da447890d7bee51892e1f782d5f2db6dded4
Diffstat (limited to 'src/store/modules/Operations/ControlStore.js')
-rw-r--r-- | src/store/modules/Operations/ControlStore.js | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/store/modules/Operations/ControlStore.js b/src/store/modules/Operations/ControlStore.js new file mode 100644 index 00000000..9b8bf73d --- /dev/null +++ b/src/store/modules/Operations/ControlStore.js @@ -0,0 +1,132 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +/** + * Watch for serverStatus changes in GlobalStore module + * to set isOperationInProgress state + * Stop watching status changes and resolve Promise when + * serverStatus value matches passed argument or after 5 minutes + * @param {string} serverStatus + * @returns {Promise} + */ +const checkForServerStatus = function (serverStatus) { + return new Promise((resolve) => { + const timer = setTimeout(() => { + resolve(); + unwatch(); + }, 300000 /*5mins*/); + const unwatch = this.watch( + (state) => state.global.serverStatus, + (value) => { + if (value === serverStatus) { + resolve(); + unwatch(); + clearTimeout(timer); + } + } + ); + }); +}; + +const ControlStore = { + namespaced: true, + state: { + isOperationInProgress: false, + lastPowerOperationTime: null, + lastBmcRebootTime: null, + }, + getters: { + isOperationInProgress: (state) => state.isOperationInProgress, + lastPowerOperationTime: (state) => state.lastPowerOperationTime, + lastBmcRebootTime: (state) => state.lastBmcRebootTime, + }, + mutations: { + setOperationInProgress: (state, inProgress) => + (state.isOperationInProgress = inProgress), + setLastPowerOperationTime: (state, lastPowerOperationTime) => + (state.lastPowerOperationTime = lastPowerOperationTime), + setLastBmcRebootTime: (state, lastBmcRebootTime) => + (state.lastBmcRebootTime = lastBmcRebootTime), + }, + actions: { + async getLastPowerOperationTime({ commit }) { + return await api + .get('/redfish/v1/Systems/system') + .then((response) => { + const lastReset = response.data.LastResetTime; + if (lastReset) { + const lastPowerOperationTime = new Date(lastReset); + commit('setLastPowerOperationTime', lastPowerOperationTime); + } + }) + .catch((error) => console.log(error)); + }, + getLastBmcRebootTime({ commit }) { + return api + .get('/redfish/v1/Managers/bmc') + .then((response) => { + const lastBmcReset = response.data.LastResetTime; + const lastBmcRebootTime = new Date(lastBmcReset); + commit('setLastBmcRebootTime', lastBmcRebootTime); + }) + .catch((error) => console.log(error)); + }, + async rebootBmc({ dispatch }) { + const data = { ResetType: 'GracefulRestart' }; + return await api + .post('/redfish/v1/Managers/bmc/Actions/Manager.Reset', data) + .then(() => dispatch('getLastBmcRebootTime')) + .then(() => i18n.t('pageRebootBmc.toast.successRebootStart')) + .catch((error) => { + console.log(error); + throw new Error(i18n.t('pageRebootBmc.toast.errorRebootStart')); + }); + }, + async serverPowerOn({ dispatch, commit }) { + const data = { ResetType: 'On' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'on')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + async serverSoftReboot({ dispatch, commit }) { + const data = { ResetType: 'GracefulRestart' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'on')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + async serverHardReboot({ dispatch, commit }) { + const data = { ResetType: 'ForceRestart' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'on')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + async serverSoftPowerOff({ dispatch, commit }) { + const data = { ResetType: 'GracefulShutdown' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'off')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + async serverHardPowerOff({ dispatch, commit }) { + const data = { ResetType: 'ForceOff' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'off')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + serverPowerChange({ commit }, data) { + commit('setOperationInProgress', true); + api + .post('/redfish/v1/Systems/system/Actions/ComputerSystem.Reset', data) + .catch((error) => { + console.log(error); + commit('setOperationInProgress', false); + }); + }, + }, +}; + +export default ControlStore; |