blob: e42367b349a4c5660a25f72e9fa6f810d412bca7 [file] [log] [blame]
SurenNeware61859092020-10-01 09:37:32 +05301import api from '@/store/api';
Yoshie Muranakab8b6f792019-12-03 14:47:32 -08002
Yoshie Muranakadc04feb2019-12-04 08:41:22 -08003const 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',
Derick Montague602e98a2020-10-21 16:20:00 -05007 diagnosticMode: 'xyz.openbmc_project.State.Host.HostState.DiagnosticMode',
Yoshie Muranakadc04feb2019-12-04 08:41:22 -08008};
9
Aravinth S99fe2282025-08-20 15:08:17 +053010const privilegesId = {
11 admin: 'Administrator',
12 operator: 'Operator',
13 readOnly: 'ReadOnly',
14};
15
Derick Montague71114fe2021-05-06 18:17:34 -050016const serverStateMapper = (hostState) => {
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080017 switch (hostState) {
18 case HOST_STATE.on:
Yoshie Muranaka881ddc42020-04-21 19:24:29 -070019 case 'On': // Redfish PowerState
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080020 return 'on';
21 case HOST_STATE.off:
Yoshie Muranaka881ddc42020-04-21 19:24:29 -070022 case 'Off': // Redfish PowerState
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080023 return 'off';
24 case HOST_STATE.error:
Yoshie Muranakaa3cbc652020-05-13 12:55:48 -070025 case 'Quiesced': // Redfish Status
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080026 return 'error';
Yoshie Muranakaa3cbc652020-05-13 12:55:48 -070027 case HOST_STATE.diagnosticMode:
28 case 'InTest': // Redfish Status
29 return 'diagnosticMode';
Yoshie Muranakadc04feb2019-12-04 08:41:22 -080030 default:
31 return 'unreachable';
32 }
33};
34
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080035const GlobalStore = {
36 namespaced: true,
37 state: {
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +053038 assetTag: null,
Yoshie Muranakae45f54b2020-03-26 15:23:34 -070039 bmcTime: null,
Sukanya Pandey4dd7eab2021-08-16 18:59:14 +053040 modelType: null,
41 serialNumber: null,
Derick Montague71114fe2021-05-06 18:17:34 -050042 serverStatus: 'unreachable',
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053043 languagePreference: localStorage.getItem('storedLanguage') || 'en-US',
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053044 isUtcDisplay: localStorage.getItem('storedUtcDisplay')
45 ? JSON.parse(localStorage.getItem('storedUtcDisplay'))
46 : true,
Sukanya Pandeydd6aa0a2020-10-08 20:47:39 +053047 username: localStorage.getItem('storedUsername'),
Derick Montague602e98a2020-10-21 16:20:00 -050048 isAuthorized: true,
Damian Celicoaeb19812022-11-24 02:00:53 +010049 userPrivilege: null,
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080050 },
51 getters: {
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +053052 assetTag: (state) => state.assetTag,
Sukanya Pandey4dd7eab2021-08-16 18:59:14 +053053 modelType: (state) => state.modelType,
54 serialNumber: (state) => state.serialNumber,
Derick Montague71114fe2021-05-06 18:17:34 -050055 serverStatus: (state) => state.serverStatus,
Derick Montague602e98a2020-10-21 16:20:00 -050056 bmcTime: (state) => state.bmcTime,
57 languagePreference: (state) => state.languagePreference,
58 isUtcDisplay: (state) => state.isUtcDisplay,
59 username: (state) => state.username,
60 isAuthorized: (state) => state.isAuthorized,
Damian Celicoaeb19812022-11-24 02:00:53 +010061 userPrivilege: (state) => state.userPrivilege,
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080062 },
63 mutations: {
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +053064 setAssetTag: (state, assetTag) => (state.assetTag = assetTag),
Sukanya Pandey4dd7eab2021-08-16 18:59:14 +053065 setModelType: (state, modelType) => (state.modelType = modelType),
66 setSerialNumber: (state, serialNumber) =>
67 (state.serialNumber = serialNumber),
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060068 setBmcTime: (state, bmcTime) => (state.bmcTime = bmcTime),
Derick Montague71114fe2021-05-06 18:17:34 -050069 setServerStatus: (state, serverState) =>
70 (state.serverStatus = serverStateMapper(serverState)),
Yoshie Muranaka68bbba22020-05-18 09:49:37 -070071 setLanguagePreference: (state, language) =>
Sukanya Pandeyb1f559f2020-04-28 20:18:28 +053072 (state.languagePreference = language),
Sukanya Pandeyfc16f3c2020-06-23 22:54:27 +053073 setUsername: (state, username) => (state.username = username),
Sukanya Pandeydd6aa0a2020-10-08 20:47:39 +053074 setUtcTime: (state, isUtcDisplay) => (state.isUtcDisplay = isUtcDisplay),
Derick Montague602e98a2020-10-21 16:20:00 -050075 setUnauthorized: (state) => {
Sukanya Pandeydd6aa0a2020-10-08 20:47:39 +053076 state.isAuthorized = false;
77 window.setTimeout(() => {
78 state.isAuthorized = true;
79 }, 100);
Derick Montague602e98a2020-10-21 16:20:00 -050080 },
Damian Celicoaeb19812022-11-24 02:00:53 +010081 setPrivilege: (state, privilege) => {
82 state.userPrivilege = privilege;
83 },
Yoshie Muranakab8b6f792019-12-03 14:47:32 -080084 },
85 actions: {
Sean Zhang8841b7d2024-06-15 08:42:41 +030086 async getBmcPath() {
87 const serviceRoot = await api
88 .get('/redfish/v1')
89 .catch((error) => console.log(error));
Surya Vde23ea22024-07-11 15:19:46 +053090 let bmcPath = serviceRoot?.data?.ManagerProvidingService?.['@odata.id'];
Sean Zhang8841b7d2024-06-15 08:42:41 +030091 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));
Surya Vde23ea22024-07-11 15:19:46 +0530103 let systemPath = systems?.data?.Members?.[0]?.['@odata.id'];
Sean Zhang8841b7d2024-06-15 08:42:41 +0300104 return systemPath;
105 },
Yoshie Muranaka598bf7e2020-05-01 12:26:00 -0700106 async getBmcTime({ commit }) {
107 return await api
Sean Zhang8841b7d2024-06-15 08:42:41 +0300108 .get(`${await this.dispatch('global/getBmcPath')}`)
Derick Montague602e98a2020-10-21 16:20:00 -0500109 .then((response) => {
Yoshie Muranakaa371d202020-04-13 10:42:09 -0700110 const bmcDateTime = response.data.DateTime;
111 const date = new Date(bmcDateTime);
Dixsie Wolmers97f41872020-02-23 15:56:16 -0600112 commit('setBmcTime', date);
Dixsie Wolmersf65ee342020-01-22 19:47:56 -0600113 })
Derick Montague602e98a2020-10-21 16:20:00 -0500114 .catch((error) => console.log(error));
Dixsie Wolmersf65ee342020-01-22 19:47:56 -0600115 },
Sean Zhang8841b7d2024-06-15 08:42:41 +0300116 async getSystemInfo({ commit }) {
Yoshie Muranakadc04feb2019-12-04 08:41:22 -0800117 api
Sean Zhang8841b7d2024-06-15 08:42:41 +0300118 .get(`${await this.dispatch('global/getSystemPath')}`)
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +0530119 .then(
Sukanya Pandey4dd7eab2021-08-16 18:59:14 +0530120 ({
121 data: {
122 AssetTag,
123 Model,
124 PowerState,
125 SerialNumber,
126 Status: { State } = {},
127 },
128 } = {}) => {
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +0530129 commit('setAssetTag', AssetTag);
Sukanya Pandey4dd7eab2021-08-16 18:59:14 +0530130 commit('setSerialNumber', SerialNumber);
131 commit('setModelType', Model);
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +0530132 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.
Derick Montague71114fe2021-05-06 18:17:34 -0500136 commit('setServerStatus', State);
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +0530137 } else {
Derick Montague71114fe2021-05-06 18:17:34 -0500138 commit('setServerStatus', PowerState);
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +0530139 }
Ed Tanous81323992024-02-27 11:26:24 -0800140 },
Sukanya Pandeyc5c2ae92020-12-09 16:14:19 +0530141 )
Derick Montague602e98a2020-10-21 16:20:00 -0500142 .catch((error) => console.log(error));
143 },
144 },
Yoshie Muranakab8b6f792019-12-03 14:47:32 -0800145};
Aravinth S99fe2282025-08-20 15:08:17 +0530146export { GlobalStore, serverStateMapper, privilegesId };
Yoshie Muranakab8b6f792019-12-03 14:47:32 -0800147
148export default GlobalStore;