import api from '@/store/api'; import i18n from '@/i18n'; const PowerSupplyStore = { namespaced: true, state: { psuTemp: [], psuTempLastHour: [], psuPower: [], psuPowerLastHour: [], psuVoltage: [], psuVoltageLastHour: [], psuCurrent: [], psuCurrentLastHour: [], powerSupplies: [], limitsTemp: [], limitsVol: [], isLoadingVol: false, }, getters: { powerSupplies: (state) => state.powerSupplies, psuTemp: (state) => state.psuTemp, psuTempLastHour: (state) => state.psuTempLastHour, psuPower: (state) => state.psuPower, psuPowerLastHour: (state) => state.psuPowerLastHour, psuVoltage: (state) => state.psuVoltage, psuVoltageLastHour: (state) => state.psuVoltageLastHour, psuCurrent: (state) => state.psuCurrent, psuCurrentLastHour: (state) => state.psuCurrentLastHour, limitsTemp: (state) => state.limitsTemp, limitsVol: (state) => state.limitsVol, isLoadingVol: (state) => state.isLoadingVol, }, mutations: { setPowerSupply: (state, data) => { state.powerSupplies = data.map((powerSupply) => { const { EfficiencyPercent, FirmwareVersion, LocationIndicatorActive, MemberId, Manufacturer, Model, Name, PartNumber, PowerInputWatts, SerialNumber, SparePartNumber, Location, Status = {}, } = powerSupply; return { id: MemberId, health: Status.Health, partNumber: PartNumber, serialNumber: SerialNumber, efficiencyPercent: EfficiencyPercent, firmwareVersion: FirmwareVersion, identifyLed: LocationIndicatorActive, manufacturer: Manufacturer, model: Model, powerInputWatts: PowerInputWatts, name: Name, sparePartNumber: SparePartNumber, locationNumber: Location?.PartLocation?.ServiceLabel, statusState: Status.State, }; }); }, setpsu_temp: (state, data) => { state.psuTemp = data; }, setpsu_tempLastHour: (state, data) => { state.psuTempLastHour = data; }, setpsu_voltage: (state, data) => { state.psuVoltage = data; }, setpsu_voltageLastHour: (state, data) => { state.psuVoltageLastHour = data; }, setpsu_power: (state, data) => { state.psuPower = data; }, setpsu_powerLastHour: (state, data) => { state.psuPowerLastHour = data; }, setpsu_current: (state, data) => { state.psuCurrent = data; }, setpsu_currentLastHour: (state, data) => { state.psuCurrentLastHour = data; }, setLimitsTemp: (state, data) => { state.limitsTemp = data; }, setLimitsVol: (state, data) => { state.limitsVol = data; }, setIsLoadingVol: (state, data) => { state.isLoadingVol = 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('pagePowerSup.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 patchLimitsVol({ dispatch }, { warning, critical, groups }) { return await api .patch('/redfish/v1/Chassis/SILA_Baseboard/Power', { Voltages: groups.map((group) => { return { MemberId: group, UpperThresholdNonCritical: warning, }; }), }) .then(async () => { return await api.patch('/redfish/v1/Chassis/SILA_Baseboard/Power', { Voltages: groups.map((group) => { return { MemberId: group, UpperThresholdCritical: critical, }; }), }); }) .catch((error) => { console.log(error); throw new Error(i18n.t('pagePowerSup.toast.errorLimitUpdate')); }) .finally(() => dispatch('getLimitsVol')); }, async getLimitsVol({ commit }) { return await api .get('/redfish/v1/Chassis/SILA_Baseboard/Power') .then(({ data: { Voltages = [] } }) => { commit('setLimitsVol', Voltages); }) .catch((error) => console.log(error)); }, async getPsu({ commit }, { lastHour, metricsName }) { let url = null; if (lastHour) { url = `/redfish/v1/TelemetryService/MetricReports/${metricsName}&period=last_hour`; } else { url = `/redfish/v1/TelemetryService/MetricReports/${metricsName}`; } return await api .get(url) .then(({ data: { MetricValues = [] } }) => { if (lastHour) { commit(`set${metricsName}LastHour`, MetricValues); } else { commit(`set${metricsName}`, MetricValues); } }) .catch((error) => console.log(error)); }, async getChassisCollection() { return await api .get('/redfish/v1/Chassis') .then(({ data: { Members } }) => Members.map((member) => member['@odata.id']) ) .catch((error) => console.log(error)); }, async getAllPowerSupplies({ dispatch, commit }) { const collection = await dispatch('getChassisCollection'); if (!collection) return; return await api .all(collection.map((chassis) => dispatch('getChassisPower', chassis))) .then((supplies) => { let suppliesList = []; supplies.forEach( (supply) => (suppliesList = [...suppliesList, ...supply]) ); commit('setPowerSupply', suppliesList); }) .catch((error) => console.log(error)); }, async getChassisPower(_, id) { return await api .get(`${id}/Power`) .then(({ data: { PowerSupplies } }) => PowerSupplies || []) .catch((error) => console.log(error)); }, }, }; export default PowerSupplyStore;