xref: /openbmc/webui-vue/src/store/modules/ResourceManagement/PowerControlStore.js (revision d36ac8a8be8636ddd0e64ce005d507b21bcdeb00)
1import api from '@/store/api';
2import i18n from '@/i18n';
3
4const PowerControlStore = {
5  namespaced: true,
6  state: {
7    powerCapValue: null,
8    powerCapUri: '',
9    powerConsumptionValue: null,
10  },
11  getters: {
12    powerCapValue: (state) => state.powerCapValue,
13    powerCapUri: (state) => state.powerCapUri,
14    powerConsumptionValue: (state) => state.powerConsumptionValue,
15  },
16  mutations: {
17    setPowerCapValue: (state, powerCapValue) =>
18      (state.powerCapValue = powerCapValue),
19    setPowerCapUri: (state, powerCapUri) => (state.powerCapUri = powerCapUri),
20    setPowerConsumptionValue: (state, powerConsumptionValue) =>
21      (state.powerConsumptionValue = powerConsumptionValue),
22  },
23  actions: {
24    setPowerCapUpdatedValue({ commit }, value) {
25      commit('setPowerCapValue', value);
26    },
27    async getChassisCollection() {
28      return await api
29        .get('/redfish/v1/')
30        .then((response) => api.get(response.data.Chassis['@odata.id']))
31        .then(({ data: { Members } }) =>
32          Members.map((member) => member['@odata.id']),
33        )
34        .catch((error) => console.log(error));
35    },
36    async getPowerControl({ dispatch, commit }) {
37      const collection = await dispatch('getChassisCollection');
38      if (!collection || collection.length === 0) return;
39      return await api
40        .get(`${collection[0]}`)
41        .then((response) => {
42          const powerUri = response?.data?.Power?.['@odata.id'];
43          if (!powerUri) return;
44          return api.get(powerUri);
45        })
46        .then((response) => {
47          const powerControl = response?.data?.PowerControl;
48          if (!powerControl || powerControl.length === 0) return;
49          const powerCapUri = response.data['@odata.id'];
50          const powerCap = powerControl[0].PowerLimit.LimitInWatts;
51          // If system is powered off, power consumption does not exist in the PowerControl
52          const powerConsumption = powerControl[0].PowerConsumedWatts || null;
53          commit('setPowerCapUri', powerCapUri);
54          commit('setPowerCapValue', powerCap);
55          commit('setPowerConsumptionValue', powerConsumption);
56        })
57        .catch((error) => {
58          console.log('Power control', error);
59        });
60    },
61    async setPowerControl({ state }, powerCapValue) {
62      const data = {
63        PowerControl: [{ PowerLimit: { LimitInWatts: powerCapValue } }],
64      };
65      return await api
66        .patch(state.powerCapUri, data)
67        .then(() =>
68          i18n.global.t('pageServerPowerOperations.toast.successSaveSettings'),
69        )
70        .catch((error) => {
71          console.log(error);
72          throw new Error(
73            i18n.global.t('pageServerPowerOperations.toast.errorSaveSettings'),
74          );
75        });
76    },
77  },
78};
79
80export default PowerControlStore;
81