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