1828dda9bSDerick Montagueimport api, { getResponseCount } from '@/store/api';
2828dda9bSDerick Montagueimport i18n from '@/i18n';
3828dda9bSDerick Montague
4828dda9bSDerick Montagueconst DumpsStore = {
5828dda9bSDerick Montague  namespaced: true,
6828dda9bSDerick Montague  state: {
7c2c53aa9SKenneth    allDumps: [],
8828dda9bSDerick Montague  },
9828dda9bSDerick Montague  getters: {
10c2c53aa9SKenneth    allDumps: (state) => state.allDumps,
11828dda9bSDerick Montague  },
12828dda9bSDerick Montague  mutations: {
13e39b95d6SSukanya Pandey    setAllDumps: (state, dumps) => {
14c2c53aa9SKenneth      state.allDumps = dumps.map((dump) => ({
15828dda9bSDerick Montague        data: dump.AdditionalDataURI,
16828dda9bSDerick Montague        dateTime: new Date(dump.Created),
17828dda9bSDerick Montague        dumpType: dump.Name,
18828dda9bSDerick Montague        id: dump.Id,
19828dda9bSDerick Montague        location: dump['@odata.id'],
20828dda9bSDerick Montague        size: dump.AdditionalDataSizeBytes,
21828dda9bSDerick Montague      }));
22828dda9bSDerick Montague    },
23828dda9bSDerick Montague  },
24828dda9bSDerick Montague  actions: {
25e39b95d6SSukanya Pandey    async getBmcDumpEntries() {
26e39b95d6SSukanya Pandey      return api
27*8841b7d4SSean Zhang        .get(`${await this.dispatch('global/getBmcPath')}`)
28e39b95d6SSukanya Pandey        .then((response) => api.get(response.data.LogServices['@odata.id']))
29e39b95d6SSukanya Pandey        .then((response) => api.get(`${response.data['@odata.id']}/Dump`))
30e39b95d6SSukanya Pandey        .then((response) => api.get(response.data.Entries['@odata.id']))
31e39b95d6SSukanya Pandey        .catch((error) => console.log(error));
32e39b95d6SSukanya Pandey    },
33e39b95d6SSukanya Pandey    async getSystemDumpEntries() {
34e39b95d6SSukanya Pandey      return api
35*8841b7d4SSean Zhang        .get(`${await this.dispatch('global/getSystemPath')}`)
36e39b95d6SSukanya Pandey        .then((response) => api.get(response.data.LogServices['@odata.id']))
37e39b95d6SSukanya Pandey        .then((response) => api.get(`${response.data['@odata.id']}/Dump`))
38e39b95d6SSukanya Pandey        .then((response) => api.get(response.data.Entries['@odata.id']))
39e39b95d6SSukanya Pandey        .catch((error) => console.log(error));
40e39b95d6SSukanya Pandey    },
41e39b95d6SSukanya Pandey    async getAllDumps({ commit, dispatch }) {
42828dda9bSDerick Montague      return await api
43e39b95d6SSukanya Pandey        .all([dispatch('getBmcDumpEntries'), dispatch('getSystemDumpEntries')])
44e39b95d6SSukanya Pandey        .then((response) => {
45e39b95d6SSukanya Pandey          const bmcDumpEntries = response[0].data?.Members || [];
46e39b95d6SSukanya Pandey          const systemDumpEntries = response[1].data?.Members || [];
47e39b95d6SSukanya Pandey          const allDumps = [...bmcDumpEntries, ...systemDumpEntries];
48e39b95d6SSukanya Pandey          commit('setAllDumps', allDumps);
49e39b95d6SSukanya Pandey        })
50828dda9bSDerick Montague        .catch((error) => console.log(error));
51828dda9bSDerick Montague    },
52828dda9bSDerick Montague    async createBmcDump() {
53828dda9bSDerick Montague      return await api
54828dda9bSDerick Montague        .post(
55*8841b7d4SSean Zhang          `${await this.dispatch('global/getBmcPath')}/LogServices/Dump/Actions/LogService.CollectDiagnosticData`,
56828dda9bSDerick Montague          {
57828dda9bSDerick Montague            DiagnosticDataType: 'Manager',
58828dda9bSDerick Montague            OEMDiagnosticDataType: '',
598132399cSEd Tanous          },
60828dda9bSDerick Montague        )
61828dda9bSDerick Montague        .catch((error) => {
62828dda9bSDerick Montague          console.log(error);
63828dda9bSDerick Montague          throw new Error(i18n.t('pageDumps.toast.errorStartBmcDump'));
64828dda9bSDerick Montague        });
65828dda9bSDerick Montague    },
66828dda9bSDerick Montague    async createSystemDump() {
67828dda9bSDerick Montague      return await api
68828dda9bSDerick Montague        .post(
69*8841b7d4SSean Zhang          `${await this.dispatch('global/getSystemPath')}/LogServices/Dump/Actions/LogService.CollectDiagnosticData`,
70828dda9bSDerick Montague          {
71828dda9bSDerick Montague            DiagnosticDataType: 'OEM',
72828dda9bSDerick Montague            OEMDiagnosticDataType: 'System',
738132399cSEd Tanous          },
74828dda9bSDerick Montague        )
75828dda9bSDerick Montague        .catch((error) => {
76828dda9bSDerick Montague          console.log(error);
77828dda9bSDerick Montague          throw new Error(i18n.t('pageDumps.toast.errorStartSystemDump'));
78828dda9bSDerick Montague        });
79828dda9bSDerick Montague    },
80828dda9bSDerick Montague    async deleteDumps({ dispatch }, dumps) {
81828dda9bSDerick Montague      const promises = dumps.map(({ location }) =>
82828dda9bSDerick Montague        api.delete(location).catch((error) => {
83828dda9bSDerick Montague          console.log(error);
84828dda9bSDerick Montague          return error;
858132399cSEd Tanous        }),
86828dda9bSDerick Montague      );
87828dda9bSDerick Montague      return await api
88828dda9bSDerick Montague        .all(promises)
89828dda9bSDerick Montague        .then((response) => {
90e39b95d6SSukanya Pandey          dispatch('getAllDumps');
91828dda9bSDerick Montague          return response;
92828dda9bSDerick Montague        })
93828dda9bSDerick Montague        .then(
94828dda9bSDerick Montague          api.spread((...responses) => {
95828dda9bSDerick Montague            const { successCount, errorCount } = getResponseCount(responses);
96828dda9bSDerick Montague            const toastMessages = [];
97828dda9bSDerick Montague
98828dda9bSDerick Montague            if (successCount) {
99828dda9bSDerick Montague              const message = i18n.tc(
100828dda9bSDerick Montague                'pageDumps.toast.successDeleteDump',
1018132399cSEd Tanous                successCount,
102828dda9bSDerick Montague              );
103828dda9bSDerick Montague              toastMessages.push({ type: 'success', message });
104828dda9bSDerick Montague            }
105828dda9bSDerick Montague
106828dda9bSDerick Montague            if (errorCount) {
107828dda9bSDerick Montague              const message = i18n.tc(
108828dda9bSDerick Montague                'pageDumps.toast.errorDeleteDump',
1098132399cSEd Tanous                errorCount,
110828dda9bSDerick Montague              );
111828dda9bSDerick Montague              toastMessages.push({ type: 'error', message });
112828dda9bSDerick Montague            }
113828dda9bSDerick Montague
114828dda9bSDerick Montague            return toastMessages;
1158132399cSEd Tanous          }),
116828dda9bSDerick Montague        );
117828dda9bSDerick Montague    },
118828dda9bSDerick Montague    async deleteAllDumps({ commit, state }) {
119e39b95d6SSukanya Pandey      const totalDumpCount = state.allDumps.length;
120828dda9bSDerick Montague      return await api
121828dda9bSDerick Montague        .post(
122*8841b7d4SSean Zhang          `${await this.dispatch('global/getBmcPath')}/LogServices/Dump/Actions/LogService.ClearLog`,
123828dda9bSDerick Montague        )
124828dda9bSDerick Montague        .then(() => {
125e39b95d6SSukanya Pandey          commit('setAllDumps', []);
126828dda9bSDerick Montague          return i18n.tc('pageDumps.toast.successDeleteDump', totalDumpCount);
127828dda9bSDerick Montague        })
128828dda9bSDerick Montague        .catch((error) => {
129828dda9bSDerick Montague          console.log(error);
130828dda9bSDerick Montague          throw new Error(
1318132399cSEd Tanous            i18n.tc('pageDumps.toast.errorDeleteDump', totalDumpCount),
132828dda9bSDerick Montague          );
133828dda9bSDerick Montague        });
134828dda9bSDerick Montague    },
135828dda9bSDerick Montague  },
136828dda9bSDerick Montague};
137828dda9bSDerick Montague
138828dda9bSDerick Montagueexport default DumpsStore;
139