summaryrefslogtreecommitdiff
path: root/src/store/modules/Operations/ControlStore.js
diff options
context:
space:
mode:
authorSandeepa Singh <sandeepa.singh@ibm.com>2021-07-14 13:32:22 +0300
committerDerick Montague <derick.montague@ibm.com>2021-08-10 22:20:42 +0300
commit68cbbe9014cbdcf7229a878f564d38f6d6199f25 (patch)
treecd7138959f405cb44b5d62000da9d364ed238b91 /src/store/modules/Operations/ControlStore.js
parent7affc529b7fba41193c4d48764707e9961cdd22d (diff)
downloadwebui-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.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;