1828dda9bSDerick Montagueimport api, { getResponseCount } from '@/store/api';
2828dda9bSDerick Montagueimport i18n from '@/i18n';
3828dda9bSDerick Montague
4828dda9bSDerick Montagueconst getHealthStatus = (events, loadedEvents) => {
5828dda9bSDerick Montague  let status = loadedEvents ? 'OK' : '';
6828dda9bSDerick Montague  for (const event of events) {
77c26338eSGlukhov Mikhail    if (event.filterByStatus === 'Unresolved') {
8828dda9bSDerick Montague      if (event.severity === 'Warning') {
9828dda9bSDerick Montague        status = 'Warning';
10828dda9bSDerick Montague      }
11828dda9bSDerick Montague      if (event.severity === 'Critical') {
12828dda9bSDerick Montague        status = 'Critical';
13828dda9bSDerick Montague        break;
14828dda9bSDerick Montague      }
15828dda9bSDerick Montague    }
167c26338eSGlukhov Mikhail  }
17828dda9bSDerick Montague  return status;
18828dda9bSDerick Montague};
19828dda9bSDerick Montague
20828dda9bSDerick Montague// TODO: High priority events should also check if Log
21828dda9bSDerick Montague// is resolved when the property is available in Redfish
22828dda9bSDerick Montagueconst getHighPriorityEvents = (events) =>
23828dda9bSDerick Montague  events.filter(({ severity }) => severity === 'Critical');
24828dda9bSDerick Montague
25828dda9bSDerick Montagueconst EventLogStore = {
26828dda9bSDerick Montague  namespaced: true,
27828dda9bSDerick Montague  state: {
28828dda9bSDerick Montague    allEvents: [],
29828dda9bSDerick Montague    loadedEvents: false,
30828dda9bSDerick Montague  },
31828dda9bSDerick Montague  getters: {
32828dda9bSDerick Montague    allEvents: (state) => state.allEvents,
33828dda9bSDerick Montague    highPriorityEvents: (state) => getHighPriorityEvents(state.allEvents),
34828dda9bSDerick Montague    healthStatus: (state) =>
35828dda9bSDerick Montague      getHealthStatus(state.allEvents, state.loadedEvents),
36828dda9bSDerick Montague  },
37828dda9bSDerick Montague  mutations: {
38828dda9bSDerick Montague    setAllEvents: (state, allEvents) => (
39828dda9bSDerick Montague      (state.allEvents = allEvents), (state.loadedEvents = true)
40828dda9bSDerick Montague    ),
41828dda9bSDerick Montague  },
42828dda9bSDerick Montague  actions: {
43828dda9bSDerick Montague    async getEventLogData({ commit }) {
44828dda9bSDerick Montague      return await api
45*8841b7d4SSean Zhang        .get(
46*8841b7d4SSean Zhang          `${await this.dispatch('global/getSystemPath')}/LogServices/EventLog/Entries`,
47*8841b7d4SSean Zhang        )
48828dda9bSDerick Montague        .then(({ data: { Members = [] } = {} }) => {
49828dda9bSDerick Montague          const eventLogs = Members.map((log) => {
50828dda9bSDerick Montague            const {
51828dda9bSDerick Montague              Id,
52828dda9bSDerick Montague              Severity,
53828dda9bSDerick Montague              Created,
54828dda9bSDerick Montague              EntryType,
55828dda9bSDerick Montague              Message,
56828dda9bSDerick Montague              Name,
57828dda9bSDerick Montague              Modified,
58828dda9bSDerick Montague              Resolved,
59828dda9bSDerick Montague              AdditionalDataURI,
60828dda9bSDerick Montague            } = log;
61828dda9bSDerick Montague            return {
62828dda9bSDerick Montague              id: Id,
63828dda9bSDerick Montague              severity: Severity,
64828dda9bSDerick Montague              date: new Date(Created),
65828dda9bSDerick Montague              type: EntryType,
66828dda9bSDerick Montague              description: Message,
67828dda9bSDerick Montague              name: Name,
68828dda9bSDerick Montague              modifiedDate: new Date(Modified),
69828dda9bSDerick Montague              uri: log['@odata.id'],
70828dda9bSDerick Montague              filterByStatus: Resolved ? 'Resolved' : 'Unresolved',
71828dda9bSDerick Montague              status: Resolved, //true or false
72828dda9bSDerick Montague              additionalDataUri: AdditionalDataURI,
73828dda9bSDerick Montague            };
74828dda9bSDerick Montague          });
75828dda9bSDerick Montague          commit('setAllEvents', eventLogs);
76828dda9bSDerick Montague        })
77828dda9bSDerick Montague        .catch((error) => {
78828dda9bSDerick Montague          console.log('Event Log Data:', error);
79828dda9bSDerick Montague        });
80828dda9bSDerick Montague    },
81828dda9bSDerick Montague    async deleteAllEventLogs({ dispatch }, data) {
82828dda9bSDerick Montague      return await api
83828dda9bSDerick Montague        .post(
84*8841b7d4SSean Zhang          `${await this.dispatch('global/getSystemPath')}/LogServices/EventLog/Actions/LogService.ClearLog`,
85828dda9bSDerick Montague        )
86828dda9bSDerick Montague        .then(() => dispatch('getEventLogData'))
87828dda9bSDerick Montague        .then(() => i18n.tc('pageEventLogs.toast.successDelete', data.length))
88828dda9bSDerick Montague        .catch((error) => {
89828dda9bSDerick Montague          console.log(error);
90828dda9bSDerick Montague          throw new Error(
918132399cSEd Tanous            i18n.tc('pageEventLogs.toast.errorDelete', data.length),
92828dda9bSDerick Montague          );
93828dda9bSDerick Montague        });
94828dda9bSDerick Montague    },
95828dda9bSDerick Montague    async deleteEventLogs({ dispatch }, uris = []) {
96828dda9bSDerick Montague      const promises = uris.map((uri) =>
97828dda9bSDerick Montague        api.delete(uri).catch((error) => {
98828dda9bSDerick Montague          console.log(error);
99828dda9bSDerick Montague          return error;
1008132399cSEd Tanous        }),
101828dda9bSDerick Montague      );
102828dda9bSDerick Montague      return await api
103828dda9bSDerick Montague        .all(promises)
104828dda9bSDerick Montague        .then((response) => {
105828dda9bSDerick Montague          dispatch('getEventLogData');
106828dda9bSDerick Montague          return response;
107828dda9bSDerick Montague        })
108828dda9bSDerick Montague        .then(
109828dda9bSDerick Montague          api.spread((...responses) => {
110828dda9bSDerick Montague            const { successCount, errorCount } = getResponseCount(responses);
111828dda9bSDerick Montague            const toastMessages = [];
112828dda9bSDerick Montague
113828dda9bSDerick Montague            if (successCount) {
114828dda9bSDerick Montague              const message = i18n.tc(
115828dda9bSDerick Montague                'pageEventLogs.toast.successDelete',
1168132399cSEd Tanous                successCount,
117828dda9bSDerick Montague              );
118828dda9bSDerick Montague              toastMessages.push({ type: 'success', message });
119828dda9bSDerick Montague            }
120828dda9bSDerick Montague
121828dda9bSDerick Montague            if (errorCount) {
122828dda9bSDerick Montague              const message = i18n.tc(
123828dda9bSDerick Montague                'pageEventLogs.toast.errorDelete',
1248132399cSEd Tanous                errorCount,
125828dda9bSDerick Montague              );
126828dda9bSDerick Montague              toastMessages.push({ type: 'error', message });
127828dda9bSDerick Montague            }
128828dda9bSDerick Montague
129828dda9bSDerick Montague            return toastMessages;
1308132399cSEd Tanous          }),
131828dda9bSDerick Montague        );
132828dda9bSDerick Montague    },
133828dda9bSDerick Montague    async resolveEventLogs({ dispatch }, logs) {
134828dda9bSDerick Montague      const promises = logs.map((log) =>
135828dda9bSDerick Montague        api.patch(log.uri, { Resolved: true }).catch((error) => {
136828dda9bSDerick Montague          console.log(error);
137828dda9bSDerick Montague          return error;
1388132399cSEd Tanous        }),
139828dda9bSDerick Montague      );
140828dda9bSDerick Montague      return await api
141828dda9bSDerick Montague        .all(promises)
142828dda9bSDerick Montague        .then((response) => {
143828dda9bSDerick Montague          dispatch('getEventLogData');
144828dda9bSDerick Montague          return response;
145828dda9bSDerick Montague        })
146828dda9bSDerick Montague        .then(
147828dda9bSDerick Montague          api.spread((...responses) => {
148828dda9bSDerick Montague            const { successCount, errorCount } = getResponseCount(responses);
149828dda9bSDerick Montague            const toastMessages = [];
150828dda9bSDerick Montague            if (successCount) {
151828dda9bSDerick Montague              const message = i18n.tc(
152828dda9bSDerick Montague                'pageEventLogs.toast.successResolveLogs',
1538132399cSEd Tanous                successCount,
154828dda9bSDerick Montague              );
155828dda9bSDerick Montague              toastMessages.push({ type: 'success', message });
156828dda9bSDerick Montague            }
157828dda9bSDerick Montague            if (errorCount) {
158828dda9bSDerick Montague              const message = i18n.tc(
159828dda9bSDerick Montague                'pageEventLogs.toast.errorResolveLogs',
1608132399cSEd Tanous                errorCount,
161828dda9bSDerick Montague              );
162828dda9bSDerick Montague              toastMessages.push({ type: 'error', message });
163828dda9bSDerick Montague            }
164828dda9bSDerick Montague            return toastMessages;
1658132399cSEd Tanous          }),
166828dda9bSDerick Montague        );
167828dda9bSDerick Montague    },
168828dda9bSDerick Montague    async unresolveEventLogs({ dispatch }, logs) {
169828dda9bSDerick Montague      const promises = logs.map((log) =>
170828dda9bSDerick Montague        api.patch(log.uri, { Resolved: false }).catch((error) => {
171828dda9bSDerick Montague          console.log(error);
172828dda9bSDerick Montague          return error;
1738132399cSEd Tanous        }),
174828dda9bSDerick Montague      );
175828dda9bSDerick Montague      return await api
176828dda9bSDerick Montague        .all(promises)
177828dda9bSDerick Montague        .then((response) => {
178828dda9bSDerick Montague          dispatch('getEventLogData');
179828dda9bSDerick Montague          return response;
180828dda9bSDerick Montague        })
181828dda9bSDerick Montague        .then(
182828dda9bSDerick Montague          api.spread((...responses) => {
183828dda9bSDerick Montague            const { successCount, errorCount } = getResponseCount(responses);
184828dda9bSDerick Montague            const toastMessages = [];
185828dda9bSDerick Montague            if (successCount) {
186828dda9bSDerick Montague              const message = i18n.tc(
187828dda9bSDerick Montague                'pageEventLogs.toast.successUnresolveLogs',
1888132399cSEd Tanous                successCount,
189828dda9bSDerick Montague              );
190828dda9bSDerick Montague              toastMessages.push({ type: 'success', message });
191828dda9bSDerick Montague            }
192828dda9bSDerick Montague            if (errorCount) {
193828dda9bSDerick Montague              const message = i18n.tc(
194828dda9bSDerick Montague                'pageEventLogs.toast.errorUnresolveLogs',
1958132399cSEd Tanous                errorCount,
196828dda9bSDerick Montague              );
197828dda9bSDerick Montague              toastMessages.push({ type: 'error', message });
198828dda9bSDerick Montague            }
199828dda9bSDerick Montague            return toastMessages;
2008132399cSEd Tanous          }),
201828dda9bSDerick Montague        );
202828dda9bSDerick Montague    },
203828dda9bSDerick Montague    // Single log entry
204828dda9bSDerick Montague    async updateEventLogStatus({ dispatch }, log) {
205828dda9bSDerick Montague      const updatedEventLogStatus = log.status;
206828dda9bSDerick Montague      return await api
207828dda9bSDerick Montague        .patch(log.uri, { Resolved: updatedEventLogStatus })
208828dda9bSDerick Montague        .then(() => {
209828dda9bSDerick Montague          dispatch('getEventLogData');
210828dda9bSDerick Montague        })
211828dda9bSDerick Montague        .then(() => {
212828dda9bSDerick Montague          if (log.status) {
213828dda9bSDerick Montague            return i18n.tc('pageEventLogs.toast.successResolveLogs', 1);
214828dda9bSDerick Montague          } else {
215828dda9bSDerick Montague            return i18n.tc('pageEventLogs.toast.successUnresolveLogs', 1);
216828dda9bSDerick Montague          }
217828dda9bSDerick Montague        })
218828dda9bSDerick Montague        .catch((error) => {
219828dda9bSDerick Montague          console.log(error);
220828dda9bSDerick Montague          throw new Error(i18n.t('pageEventLogs.toast.errorLogStatusUpdate'));
221828dda9bSDerick Montague        });
222828dda9bSDerick Montague    },
223828dda9bSDerick Montague  },
224828dda9bSDerick Montague};
225828dda9bSDerick Montague
226828dda9bSDerick Montagueexport default EventLogStore;
227