xref: /openbmc/webui-vue/src/store/modules/GlobalStore.js (revision 99fe228eef84d018125712187e04b24a328d292b)
1import api from '@/store/api';
2
3const HOST_STATE = {
4  on: 'xyz.openbmc_project.State.Host.HostState.Running',
5  off: 'xyz.openbmc_project.State.Host.HostState.Off',
6  error: 'xyz.openbmc_project.State.Host.HostState.Quiesced',
7  diagnosticMode: 'xyz.openbmc_project.State.Host.HostState.DiagnosticMode',
8};
9
10const privilegesId = {
11  admin: 'Administrator',
12  operator: 'Operator',
13  readOnly: 'ReadOnly',
14};
15
16const serverStateMapper = (hostState) => {
17  switch (hostState) {
18    case HOST_STATE.on:
19    case 'On': // Redfish PowerState
20      return 'on';
21    case HOST_STATE.off:
22    case 'Off': // Redfish PowerState
23      return 'off';
24    case HOST_STATE.error:
25    case 'Quiesced': // Redfish Status
26      return 'error';
27    case HOST_STATE.diagnosticMode:
28    case 'InTest': // Redfish Status
29      return 'diagnosticMode';
30    default:
31      return 'unreachable';
32  }
33};
34
35const GlobalStore = {
36  namespaced: true,
37  state: {
38    assetTag: null,
39    bmcTime: null,
40    modelType: null,
41    serialNumber: null,
42    serverStatus: 'unreachable',
43    languagePreference: localStorage.getItem('storedLanguage') || 'en-US',
44    isUtcDisplay: localStorage.getItem('storedUtcDisplay')
45      ? JSON.parse(localStorage.getItem('storedUtcDisplay'))
46      : true,
47    username: localStorage.getItem('storedUsername'),
48    isAuthorized: true,
49    userPrivilege: null,
50  },
51  getters: {
52    assetTag: (state) => state.assetTag,
53    modelType: (state) => state.modelType,
54    serialNumber: (state) => state.serialNumber,
55    serverStatus: (state) => state.serverStatus,
56    bmcTime: (state) => state.bmcTime,
57    languagePreference: (state) => state.languagePreference,
58    isUtcDisplay: (state) => state.isUtcDisplay,
59    username: (state) => state.username,
60    isAuthorized: (state) => state.isAuthorized,
61    userPrivilege: (state) => state.userPrivilege,
62  },
63  mutations: {
64    setAssetTag: (state, assetTag) => (state.assetTag = assetTag),
65    setModelType: (state, modelType) => (state.modelType = modelType),
66    setSerialNumber: (state, serialNumber) =>
67      (state.serialNumber = serialNumber),
68    setBmcTime: (state, bmcTime) => (state.bmcTime = bmcTime),
69    setServerStatus: (state, serverState) =>
70      (state.serverStatus = serverStateMapper(serverState)),
71    setLanguagePreference: (state, language) =>
72      (state.languagePreference = language),
73    setUsername: (state, username) => (state.username = username),
74    setUtcTime: (state, isUtcDisplay) => (state.isUtcDisplay = isUtcDisplay),
75    setUnauthorized: (state) => {
76      state.isAuthorized = false;
77      window.setTimeout(() => {
78        state.isAuthorized = true;
79      }, 100);
80    },
81    setPrivilege: (state, privilege) => {
82      state.userPrivilege = privilege;
83    },
84  },
85  actions: {
86    async getBmcPath() {
87      const serviceRoot = await api
88        .get('/redfish/v1')
89        .catch((error) => console.log(error));
90      let bmcPath = serviceRoot?.data?.ManagerProvidingService?.['@odata.id'];
91      if (!bmcPath) {
92        const managers = await api
93          .get('/redfish/v1/Managers')
94          .catch((error) => console.log(error));
95        bmcPath = managers.data?.Members?.[0]?.['@odata.id'];
96      }
97      return bmcPath;
98    },
99    async getSystemPath() {
100      const systems = await api
101        .get('/redfish/v1/Systems')
102        .catch((error) => console.log(error));
103      let systemPath = systems?.data?.Members?.[0]?.['@odata.id'];
104      return systemPath;
105    },
106    async getBmcTime({ commit }) {
107      return await api
108        .get(`${await this.dispatch('global/getBmcPath')}`)
109        .then((response) => {
110          const bmcDateTime = response.data.DateTime;
111          const date = new Date(bmcDateTime);
112          commit('setBmcTime', date);
113        })
114        .catch((error) => console.log(error));
115    },
116    async getSystemInfo({ commit }) {
117      api
118        .get(`${await this.dispatch('global/getSystemPath')}`)
119        .then(
120          ({
121            data: {
122              AssetTag,
123              Model,
124              PowerState,
125              SerialNumber,
126              Status: { State } = {},
127            },
128          } = {}) => {
129            commit('setAssetTag', AssetTag);
130            commit('setSerialNumber', SerialNumber);
131            commit('setModelType', Model);
132            if (State === 'Quiesced' || State === 'InTest') {
133              // OpenBMC's host state interface is mapped to 2 Redfish
134              // properties "Status""State" and "PowerState". Look first
135              // at State for certain cases.
136              commit('setServerStatus', State);
137            } else {
138              commit('setServerStatus', PowerState);
139            }
140          },
141        )
142        .catch((error) => console.log(error));
143    },
144  },
145};
146export { GlobalStore, serverStateMapper, privilegesId };
147
148export default GlobalStore;
149