|  | 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; |