blob: 10d50b1a875ce0df784dce9cfa27a017a601c508 [file] [log] [blame]
import api from '@/store/api';
const HOST_STATE = {
on: 'xyz.openbmc_project.State.Host.HostState.Running',
off: 'xyz.openbmc_project.State.Host.HostState.Off',
error: 'xyz.openbmc_project.State.Host.HostState.Quiesced',
diagnosticMode: 'xyz.openbmc_project.State.Host.HostState.DiagnosticMode',
};
const serverStateMapper = (hostState) => {
switch (hostState) {
case HOST_STATE.on:
case 'On': // Redfish PowerState
return 'on';
case HOST_STATE.off:
case 'Off': // Redfish PowerState
return 'off';
case HOST_STATE.error:
case 'Quiesced': // Redfish Status
return 'error';
case HOST_STATE.diagnosticMode:
case 'InTest': // Redfish Status
return 'diagnosticMode';
default:
return 'unreachable';
}
};
const GlobalStore = {
namespaced: true,
state: {
assetTag: null,
bmcTime: null,
modelType: null,
serialNumber: null,
serverStatus: 'unreachable',
languagePreference: localStorage.getItem('storedLanguage') || 'en-US',
isUtcDisplay: localStorage.getItem('storedUtcDisplay')
? JSON.parse(localStorage.getItem('storedUtcDisplay'))
: true,
username: localStorage.getItem('storedUsername'),
isAuthorized: true,
userPrivilege: null,
},
getters: {
assetTag: (state) => state.assetTag,
modelType: (state) => state.modelType,
serialNumber: (state) => state.serialNumber,
serverStatus: (state) => state.serverStatus,
bmcTime: (state) => state.bmcTime,
languagePreference: (state) => state.languagePreference,
isUtcDisplay: (state) => state.isUtcDisplay,
username: (state) => state.username,
isAuthorized: (state) => state.isAuthorized,
userPrivilege: (state) => state.userPrivilege,
},
mutations: {
setAssetTag: (state, assetTag) => (state.assetTag = assetTag),
setModelType: (state, modelType) => (state.modelType = modelType),
setSerialNumber: (state, serialNumber) =>
(state.serialNumber = serialNumber),
setBmcTime: (state, bmcTime) => (state.bmcTime = bmcTime),
setServerStatus: (state, serverState) =>
(state.serverStatus = serverStateMapper(serverState)),
setLanguagePreference: (state, language) =>
(state.languagePreference = language),
setUsername: (state, username) => (state.username = username),
setUtcTime: (state, isUtcDisplay) => (state.isUtcDisplay = isUtcDisplay),
setUnauthorized: (state) => {
state.isAuthorized = false;
window.setTimeout(() => {
state.isAuthorized = true;
}, 100);
},
setPrivilege: (state, privilege) => {
state.userPrivilege = privilege;
},
},
actions: {
async getBmcPath() {
const serviceRoot = await api
.get('/redfish/v1')
.catch((error) => console.log(error));
let bmcPath = serviceRoot.data?.ManagerProvidingService?.['@odata.id'];
if (!bmcPath) {
const managers = await api
.get('/redfish/v1/Managers')
.catch((error) => console.log(error));
bmcPath = managers.data?.Members?.[0]?.['@odata.id'];
}
return bmcPath;
},
async getSystemPath() {
const systems = await api
.get('/redfish/v1/Systems')
.catch((error) => console.log(error));
let systemPath = systems.data?.Members?.[0]?.['@odata.id'];
return systemPath;
},
async getBmcTime({ commit }) {
return await api
.get(`${await this.dispatch('global/getBmcPath')}`)
.then((response) => {
const bmcDateTime = response.data.DateTime;
const date = new Date(bmcDateTime);
commit('setBmcTime', date);
})
.catch((error) => console.log(error));
},
async getSystemInfo({ commit }) {
api
.get(`${await this.dispatch('global/getSystemPath')}`)
.then(
({
data: {
AssetTag,
Model,
PowerState,
SerialNumber,
Status: { State } = {},
},
} = {}) => {
commit('setAssetTag', AssetTag);
commit('setSerialNumber', SerialNumber);
commit('setModelType', Model);
if (State === 'Quiesced' || State === 'InTest') {
// OpenBMC's host state interface is mapped to 2 Redfish
// properties "Status""State" and "PowerState". Look first
// at State for certain cases.
commit('setServerStatus', State);
} else {
commit('setServerStatus', PowerState);
}
},
)
.catch((error) => console.log(error));
},
},
};
export default GlobalStore;