summaryrefslogtreecommitdiff
path: root/src/store/modules/HardwareStatus/SensorsStore.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/store/modules/HardwareStatus/SensorsStore.js')
-rw-r--r--src/store/modules/HardwareStatus/SensorsStore.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/store/modules/HardwareStatus/SensorsStore.js b/src/store/modules/HardwareStatus/SensorsStore.js
new file mode 100644
index 00000000..0af2a95b
--- /dev/null
+++ b/src/store/modules/HardwareStatus/SensorsStore.js
@@ -0,0 +1,123 @@
+import api from '@/store/api';
+import { uniqBy } from 'lodash';
+
+const SensorsStore = {
+ namespaced: true,
+ state: {
+ sensors: [],
+ },
+ getters: {
+ sensors: (state) => state.sensors,
+ },
+ mutations: {
+ setSensors: (state, sensors) => {
+ state.sensors = uniqBy([...state.sensors, ...sensors], 'name');
+ },
+ },
+ actions: {
+ async getAllSensors({ dispatch }) {
+ const collection = await dispatch('getChassisCollection');
+ if (!collection) return;
+ const promises = collection.reduce((acc, id) => {
+ acc.push(dispatch('getSensors', id));
+ acc.push(dispatch('getThermalSensors', id));
+ acc.push(dispatch('getPowerSensors', id));
+ return acc;
+ }, []);
+ return await api.all(promises);
+ },
+ async getChassisCollection() {
+ return await api
+ .get('/redfish/v1/Chassis')
+ .then(({ data: { Members } }) =>
+ Members.map((member) => member['@odata.id'])
+ )
+ .catch((error) => console.log(error));
+ },
+ async getSensors({ commit }, id) {
+ const sensors = await api
+ .get(`${id}/Sensors`)
+ .then((response) => response.data.Members)
+ .catch((error) => console.log(error));
+ if (!sensors) return;
+ const promises = sensors.map((sensor) => {
+ return api.get(sensor['@odata.id']).catch((error) => {
+ console.log(error);
+ return error;
+ });
+ });
+ return await api.all(promises).then(
+ api.spread((...responses) => {
+ const sensorData = responses.map(({ data }) => {
+ return {
+ name: data.Name,
+ status: data.Status.Health,
+ currentValue: data.Reading,
+ lowerCaution: data.Thresholds?.LowerCaution?.Reading,
+ upperCaution: data.Thresholds?.UpperCaution?.Reading,
+ lowerCritical: data.Thresholds?.LowerCritical?.Reading,
+ upperCritical: data.Thresholds?.UpperCritical?.Reading,
+ units: data.ReadingUnits,
+ };
+ });
+ commit('setSensors', sensorData);
+ })
+ );
+ },
+ async getThermalSensors({ commit }, id) {
+ return await api
+ .get(`${id}/Thermal`)
+ .then(({ data: { Fans = [], Temperatures = [] } }) => {
+ const sensorData = [];
+ Fans.forEach((sensor) => {
+ sensorData.push({
+ name: sensor.Name,
+ status: sensor.Status.Health,
+ currentValue: sensor.Reading,
+ lowerCaution: sensor.LowerThresholdNonCritical,
+ upperCaution: sensor.UpperThresholdNonCritical,
+ lowerCritical: sensor.LowerThresholdCritical,
+ upperCritical: sensor.UpperThresholdCritical,
+ units: sensor.ReadingUnits,
+ });
+ });
+ Temperatures.forEach((sensor) => {
+ sensorData.push({
+ name: sensor.Name,
+ status: sensor.Status.Health,
+ currentValue: sensor.ReadingCelsius,
+ lowerCaution: sensor.LowerThresholdNonCritical,
+ upperCaution: sensor.UpperThresholdNonCritical,
+ lowerCritical: sensor.LowerThresholdCritical,
+ upperCritical: sensor.UpperThresholdCritical,
+ units: '℃',
+ });
+ });
+ commit('setSensors', sensorData);
+ })
+ .catch((error) => console.log(error));
+ },
+ async getPowerSensors({ commit }, id) {
+ return await api
+ .get(`${id}/Power`)
+ .then(({ data: { Voltages = [] } }) => {
+ const sensorData = Voltages.map((sensor) => {
+ return {
+ name: sensor.Name,
+ status: sensor.Status.Health,
+ currentValue: sensor.ReadingVolts,
+ lowerCaution: sensor.LowerThresholdNonCritical,
+ upperCaution: sensor.UpperThresholdNonCritical,
+ lowerCritical: sensor.LowerThresholdCritical,
+ upperCritical: sensor.UpperThresholdCritical,
+ units: 'Volts',
+ };
+ });
+ commit('setSensors', sensorData);
+ })
+ .catch((error) => console.log(error));
+ },
+ },
+};
+
+export default SensorsStore;