summaryrefslogtreecommitdiff
path: root/src/store/modules/Operations/ControlStore.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/store/modules/Operations/ControlStore.js')
-rw-r--r--src/store/modules/Operations/ControlStore.js132
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;