import api from '@/store/api'; import i18n from '@/i18n'; const ProcessorStore = { namespaced: true, state: { cpuTemp: [], cpuPower: [], cpuTempLastHour: [], cpuPowerLastHour: [], limitsTemp: [], }, getters: { cpuTemp: (state) => state.cpuTemp, cpuPower: (state) => state.cpuPower, cpuTempLastHour: (state) => state.cpuTempLastHour, cpuPowerLastHour: (state) => state.cpuPowerLastHour, limitsTemp: (state) => state.limitsTemp, }, mutations: { setProcessorsInfo: (state, data) => { state.cpuTemp = data.map((processor) => { const { Id, Status = {}, PartNumber, SerialNumber, SparePartNumber, InstructionSet, Manufacturer, Model, Name, ProcessorArchitecture, ProcessorType, Version, AssetTag, MinSpeedMHz, MaxSpeedMHz, TotalCores, TotalThreads, Location, LocationIndicatorActive, } = processor; return { id: Id, health: Status.Health, healthRollup: Status.HealthRollup, partNumber: PartNumber, sparePartNumber: SparePartNumber, serialNumber: SerialNumber, statusState: Status.State, instructionSet: InstructionSet, manufacturer: Manufacturer, model: Model, name: Name, processorArchitecture: ProcessorArchitecture, processorType: ProcessorType, version: Version, assetTag: AssetTag, minSpeedMHz: MinSpeedMHz, maxSpeedMHz: MaxSpeedMHz, totalCores: TotalCores, totalThreads: TotalThreads, locationNumber: Location?.PartLocation?.ServiceLabel, identifyLed: LocationIndicatorActive, uri: processor['@odata.id'], }; }); }, setCpuTempDynamic: (state, data) => { state.cpuTemp = data; }, setCpuPowerDynamic: (state, data) => { state.cpuPower = data; }, setCpuTempDynamicLastHour: (state, data) => { state.cpuTempLastHour = data; }, setCpuPowerDynamicLastHour: (state, data) => { state.cpuPowerLastHour = data; }, setLimitsTemp: (state, data) => { state.limitsTemp = data; }, }, actions: { async patchLimitsTemp({ dispatch }, { warning, critical, groups }) { return await api .patch('/redfish/v1/Chassis/SILA_Baseboard/Thermal', { Temperatures: groups.map((group) => { return { MemberId: group, UpperThresholdNonCritical: warning, }; }), }) .then(async () => { return await api.patch('/redfish/v1/Chassis/SILA_Baseboard/Thermal', { Temperatures: groups.map((group) => { return { MemberId: group, UpperThresholdCritical: critical, }; }), }); }) .catch((error) => { console.log(error); throw new Error(i18n.t('pageProcessor.toast.errorLimitUpdate')); }) .finally(() => dispatch('getLimitsTemp')); }, async getLimitsTemp({ commit }) { return await api .get('/redfish/v1/Chassis/SILA_Baseboard/Thermal') .then(({ data: { Temperatures = [] } }) => { commit('setLimitsTemp', Temperatures); }) .catch((error) => console.log(error)); }, async getCpuPowerDynamic({ commit }, { lastHour }) { let url = null; if (lastHour) { url = '/redfish/v1/TelemetryService/MetricReports/power&period=last_hour'; } else { url = '/redfish/v1/TelemetryService/MetricReports/power'; } return await api .get(url) .then(({ data: { MetricValues = [] } }) => { if (lastHour) { commit('setCpuPowerDynamicLastHour', MetricValues); } else { commit('setCpuPowerDynamic', MetricValues); } }) .catch((error) => console.log(error)); }, async getCpuTempDynamic({ commit }, { lastHour }) { let url = null; if (lastHour) { url = '/redfish/v1/TelemetryService/MetricReports/cpu_temp&period=last_hour'; } else { url = '/redfish/v1/TelemetryService/MetricReports/cpu_temp'; } return await api .get(url) .then(({ data: { MetricValues = [] } }) => { if (lastHour) { commit('setCpuTempDynamicLastHour', MetricValues); } else { commit('setCpuTempDynamic', MetricValues); } }) .catch((error) => console.log(error)); }, async getProcessorsInfo({ commit }) { return await api .get('/redfish/v1/Systems/system/Processors') .then(({ data: { Members = [] } }) => Members.map((member) => api.get(member['@odata.id'])) ) .then((promises) => api.all(promises)) .then((response) => { const data = response.map(({ data }) => data); commit('setProcessorsInfo', data); }) .catch((error) => console.log(error)); }, // Waiting for the following to be merged to test the Identify Led: // https://gerrit.openbmc-project.xyz/c/openbmc/bmcweb/+/37045 async updateIdentifyLedValue({ dispatch }, led) { const uri = led.uri; const updatedIdentifyLedValue = { LocationIndicatorActive: led.identifyLed, }; return await api.patch(uri, updatedIdentifyLedValue).catch((error) => { dispatch('getProcessorsInfo'); console.log('error', error); if (led.identifyLed) { throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed')); } else { throw new Error( i18n.t('pageInventory.toast.errorDisableIdentifyLed') ); } }); }, }, }; export default ProcessorStore;