168cbbe90SSandeepa Singhimport api from '@/store/api'; 268cbbe90SSandeepa Singhimport i18n from '@/i18n'; 368cbbe90SSandeepa Singh 468cbbe90SSandeepa Singh/** 568cbbe90SSandeepa Singh * Watch for serverStatus changes in GlobalStore module 668cbbe90SSandeepa Singh * to set isOperationInProgress state 768cbbe90SSandeepa Singh * Stop watching status changes and resolve Promise when 868cbbe90SSandeepa Singh * serverStatus value matches passed argument or after 5 minutes 968cbbe90SSandeepa Singh * @param {string} serverStatus 1068cbbe90SSandeepa Singh * @returns {Promise} 1168cbbe90SSandeepa Singh */ 1268cbbe90SSandeepa Singhconst checkForServerStatus = function (serverStatus) { 1368cbbe90SSandeepa Singh return new Promise((resolve) => { 1468cbbe90SSandeepa Singh const timer = setTimeout(() => { 1568cbbe90SSandeepa Singh resolve(); 1668cbbe90SSandeepa Singh unwatch(); 1768cbbe90SSandeepa Singh }, 300000 /*5mins*/); 1868cbbe90SSandeepa Singh const unwatch = this.watch( 1968cbbe90SSandeepa Singh (state) => state.global.serverStatus, 2068cbbe90SSandeepa Singh (value) => { 2168cbbe90SSandeepa Singh if (value === serverStatus) { 2268cbbe90SSandeepa Singh resolve(); 2368cbbe90SSandeepa Singh unwatch(); 2468cbbe90SSandeepa Singh clearTimeout(timer); 2568cbbe90SSandeepa Singh } 268132399cSEd Tanous }, 2768cbbe90SSandeepa Singh ); 2868cbbe90SSandeepa Singh }); 2968cbbe90SSandeepa Singh}; 3068cbbe90SSandeepa Singh 3168cbbe90SSandeepa Singhconst ControlStore = { 3268cbbe90SSandeepa Singh namespaced: true, 3368cbbe90SSandeepa Singh state: { 3468cbbe90SSandeepa Singh isOperationInProgress: false, 3568cbbe90SSandeepa Singh lastPowerOperationTime: null, 3668cbbe90SSandeepa Singh lastBmcRebootTime: null, 3768cbbe90SSandeepa Singh }, 3868cbbe90SSandeepa Singh getters: { 3968cbbe90SSandeepa Singh isOperationInProgress: (state) => state.isOperationInProgress, 4068cbbe90SSandeepa Singh lastPowerOperationTime: (state) => state.lastPowerOperationTime, 4168cbbe90SSandeepa Singh lastBmcRebootTime: (state) => state.lastBmcRebootTime, 4268cbbe90SSandeepa Singh }, 4368cbbe90SSandeepa Singh mutations: { 4468cbbe90SSandeepa Singh setOperationInProgress: (state, inProgress) => 4568cbbe90SSandeepa Singh (state.isOperationInProgress = inProgress), 4668cbbe90SSandeepa Singh setLastPowerOperationTime: (state, lastPowerOperationTime) => 4768cbbe90SSandeepa Singh (state.lastPowerOperationTime = lastPowerOperationTime), 4868cbbe90SSandeepa Singh setLastBmcRebootTime: (state, lastBmcRebootTime) => 4968cbbe90SSandeepa Singh (state.lastBmcRebootTime = lastBmcRebootTime), 5068cbbe90SSandeepa Singh }, 5168cbbe90SSandeepa Singh actions: { 5268cbbe90SSandeepa Singh async getLastPowerOperationTime({ commit }) { 5368cbbe90SSandeepa Singh return await api 548841b7d4SSean Zhang .get(`${await this.dispatch('global/getSystemPath')}`) 5568cbbe90SSandeepa Singh .then((response) => { 5668cbbe90SSandeepa Singh const lastReset = response.data.LastResetTime; 5768cbbe90SSandeepa Singh if (lastReset) { 5868cbbe90SSandeepa Singh const lastPowerOperationTime = new Date(lastReset); 5968cbbe90SSandeepa Singh commit('setLastPowerOperationTime', lastPowerOperationTime); 6068cbbe90SSandeepa Singh } 6168cbbe90SSandeepa Singh }) 6268cbbe90SSandeepa Singh .catch((error) => console.log(error)); 6368cbbe90SSandeepa Singh }, 648841b7d4SSean Zhang async getLastBmcRebootTime({ commit }) { 6568cbbe90SSandeepa Singh return api 668841b7d4SSean Zhang .get(`${await this.dispatch('global/getBmcPath')}`) 6768cbbe90SSandeepa Singh .then((response) => { 6868cbbe90SSandeepa Singh const lastBmcReset = response.data.LastResetTime; 6968cbbe90SSandeepa Singh const lastBmcRebootTime = new Date(lastBmcReset); 7068cbbe90SSandeepa Singh commit('setLastBmcRebootTime', lastBmcRebootTime); 7168cbbe90SSandeepa Singh }) 7268cbbe90SSandeepa Singh .catch((error) => console.log(error)); 7368cbbe90SSandeepa Singh }, 7408039ab7SSean Zhang async rebootBmc() { 7568cbbe90SSandeepa Singh const data = { ResetType: 'GracefulRestart' }; 7668cbbe90SSandeepa Singh return await api 778841b7d4SSean Zhang .post( 788841b7d4SSean Zhang `${await this.dispatch('global/getBmcPath')}/Actions/Manager.Reset`, 798841b7d4SSean Zhang data, 808841b7d4SSean Zhang ) 81*de23ea23SSurya V .then(() => i18n.global.t('pageRebootBmc.toast.successRebootStart')) 8268cbbe90SSandeepa Singh .catch((error) => { 8368cbbe90SSandeepa Singh console.log(error); 84*de23ea23SSurya V throw new Error( 85*de23ea23SSurya V i18n.global.t('pageRebootBmc.toast.errorRebootStart'), 86*de23ea23SSurya V ); 8768cbbe90SSandeepa Singh }); 8868cbbe90SSandeepa Singh }, 8968cbbe90SSandeepa Singh async serverPowerOn({ dispatch, commit }) { 9068cbbe90SSandeepa Singh const data = { ResetType: 'On' }; 9168cbbe90SSandeepa Singh dispatch('serverPowerChange', data); 9268cbbe90SSandeepa Singh await checkForServerStatus.bind(this, 'on')(); 9368cbbe90SSandeepa Singh commit('setOperationInProgress', false); 9468cbbe90SSandeepa Singh dispatch('getLastPowerOperationTime'); 9568cbbe90SSandeepa Singh }, 9668cbbe90SSandeepa Singh async serverSoftReboot({ dispatch, commit }) { 9768cbbe90SSandeepa Singh const data = { ResetType: 'GracefulRestart' }; 9868cbbe90SSandeepa Singh dispatch('serverPowerChange', data); 9968cbbe90SSandeepa Singh await checkForServerStatus.bind(this, 'on')(); 10068cbbe90SSandeepa Singh commit('setOperationInProgress', false); 10168cbbe90SSandeepa Singh dispatch('getLastPowerOperationTime'); 10268cbbe90SSandeepa Singh }, 10368cbbe90SSandeepa Singh async serverHardReboot({ dispatch, commit }) { 10468cbbe90SSandeepa Singh const data = { ResetType: 'ForceRestart' }; 10568cbbe90SSandeepa Singh dispatch('serverPowerChange', data); 10668cbbe90SSandeepa Singh await checkForServerStatus.bind(this, 'on')(); 10768cbbe90SSandeepa Singh commit('setOperationInProgress', false); 10868cbbe90SSandeepa Singh dispatch('getLastPowerOperationTime'); 10968cbbe90SSandeepa Singh }, 11068cbbe90SSandeepa Singh async serverSoftPowerOff({ dispatch, commit }) { 11168cbbe90SSandeepa Singh const data = { ResetType: 'GracefulShutdown' }; 11268cbbe90SSandeepa Singh dispatch('serverPowerChange', data); 11368cbbe90SSandeepa Singh await checkForServerStatus.bind(this, 'off')(); 11468cbbe90SSandeepa Singh commit('setOperationInProgress', false); 11568cbbe90SSandeepa Singh dispatch('getLastPowerOperationTime'); 11668cbbe90SSandeepa Singh }, 11768cbbe90SSandeepa Singh async serverHardPowerOff({ dispatch, commit }) { 11868cbbe90SSandeepa Singh const data = { ResetType: 'ForceOff' }; 11968cbbe90SSandeepa Singh dispatch('serverPowerChange', data); 12068cbbe90SSandeepa Singh await checkForServerStatus.bind(this, 'off')(); 12168cbbe90SSandeepa Singh commit('setOperationInProgress', false); 12268cbbe90SSandeepa Singh dispatch('getLastPowerOperationTime'); 12368cbbe90SSandeepa Singh }, 1248841b7d4SSean Zhang async serverPowerChange({ commit }, data) { 12568cbbe90SSandeepa Singh commit('setOperationInProgress', true); 12668cbbe90SSandeepa Singh api 1278841b7d4SSean Zhang .post( 1288841b7d4SSean Zhang `${await this.dispatch('global/getSystemPath')}/Actions/ComputerSystem.Reset`, 1298841b7d4SSean Zhang data, 1308841b7d4SSean Zhang ) 13168cbbe90SSandeepa Singh .catch((error) => { 13268cbbe90SSandeepa Singh console.log(error); 13368cbbe90SSandeepa Singh commit('setOperationInProgress', false); 13468cbbe90SSandeepa Singh }); 13568cbbe90SSandeepa Singh }, 13668cbbe90SSandeepa Singh }, 13768cbbe90SSandeepa Singh}; 13868cbbe90SSandeepa Singh 13968cbbe90SSandeepa Singhexport default ControlStore; 140