1import api from '@/store/api';
2
3const FanStore = {
4  namespaced: true,
5  state: {
6    fans: [],
7  },
8  getters: {
9    fans: (state) => state.fans,
10  },
11  mutations: {
12    setFanInfo: (state, data) => {
13      state.fans = data.map((fan) => {
14        const ThermalSubsystem =
15          process.env.VUE_APP_FAN_DATA_FROM_THERMAL_SUBSYSTEM === 'true'
16            ? true
17            : false;
18        if (ThermalSubsystem) {
19          const {
20            Id,
21            Name,
22            PartNumber,
23            SerialNumber,
24            SpeedPercent = {},
25            Status = {},
26          } = fan;
27          return {
28            id: Id,
29            health: Status.Health,
30            name: Name,
31            speed: SpeedPercent.Reading,
32            statusState: Status.State,
33            healthRollup: Status.HealthRollup,
34            partNumber: PartNumber,
35            serialNumber: SerialNumber,
36          };
37        } else {
38          const {
39            MemberId,
40            Name,
41            Reading,
42            Status = {},
43            PartNumber,
44            SerialNumber,
45          } = fan;
46          return {
47            id: MemberId,
48            health: Status.Health,
49            partNumber: PartNumber,
50            serialNumber: SerialNumber,
51            healthRollup: Status.HealthRollup,
52            name: Name,
53            speed: Reading,
54            statusState: Status.State,
55          };
56        }
57      });
58    },
59  },
60  actions: {
61    async getChassisCollection() {
62      return await api
63        .get('/redfish/v1/Chassis')
64        .then(({ data: { Members } }) =>
65          api.all(
66            Members.map((member) =>
67              api.get(member['@odata.id']).then((response) => response.data)
68            )
69          )
70        )
71        .catch((error) => console.log(error));
72    },
73    async getFanInfo({ dispatch, commit }) {
74      const collection = await dispatch('getChassisCollection');
75      if (!collection || collection.length === 0) return;
76      return await api
77        .all(collection.map((chassis) => dispatch('getChassisFans', chassis)))
78        .then((fansFromChassis) => commit('setFanInfo', fansFromChassis.flat()))
79        .catch((error) => console.log(error));
80    },
81    async getChassisFans(_, chassis) {
82      const ThermalSubsystem =
83        process.env.VUE_APP_FAN_DATA_FROM_THERMAL_SUBSYSTEM === 'true'
84          ? true
85          : false;
86      if (ThermalSubsystem) {
87        return await api
88          .get(chassis.ThermalSubsystem['@odata.id'])
89          .then((response) => {
90            return api.get(`${response.data.Fans['@odata.id']}`);
91          })
92          .then(({ data: { Members } }) => {
93            const promises = Members.map((member) =>
94              api.get(member['@odata.id'])
95            );
96            return api.all(promises);
97          })
98          .then((response) => {
99            const data = response.map(({ data }) => data);
100            return data;
101          })
102          .catch((error) => console.log(error));
103      } else {
104        return await api
105          .get(chassis.Thermal['@odata.id'])
106          .then(({ data: { Fans } }) => {
107            return Fans || [];
108          })
109          .catch((error) => console.log(error));
110      }
111    },
112  },
113};
114
115export default FanStore;
116