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