blob: 5664e99fd63779042290fe9f0424a9a7cb4c4d15 [file] [log] [blame]
Yoshie Muranakabe3af332020-05-11 08:23:04 -07001import api, { getResponseCount } from '@/store/api';
2import i18n from '@/i18n';
Dixsie Wolmersf65ee342020-01-22 19:47:56 -06003
Mateusz Gapski076ab272020-07-20 10:55:15 +02004const getHealthStatus = (events, loadedEvents) => {
5 let status = loadedEvents ? 'OK' : '';
Yoshie Muranakace9a3ef2020-05-06 14:33:22 -07006 for (const event of events) {
7 if (event.severity === 'Warning') {
8 status = 'Warning';
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -08009 }
Yoshie Muranakace9a3ef2020-05-06 14:33:22 -070010 if (event.severity === 'Critical') {
11 status = 'Critical';
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -080012 break;
13 }
14 }
15 return status;
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060016};
17
Yoshie Muranakace9a3ef2020-05-06 14:33:22 -070018// TODO: High priority events should also check if Log
19// is resolved when the property is available in Redfish
Derick Montague602e98a2020-10-21 16:20:00 -050020const getHighPriorityEvents = (events) =>
Yoshie Muranakace9a3ef2020-05-06 14:33:22 -070021 events.filter(({ severity }) => severity === 'Critical');
22
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060023const EventLogStore = {
24 namespaced: true,
25 state: {
Mateusz Gapski076ab272020-07-20 10:55:15 +020026 allEvents: [],
Derick Montague602e98a2020-10-21 16:20:00 -050027 loadedEvents: false,
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060028 },
29 getters: {
Derick Montague602e98a2020-10-21 16:20:00 -050030 allEvents: (state) => state.allEvents,
31 highPriorityEvents: (state) => getHighPriorityEvents(state.allEvents),
32 healthStatus: (state) =>
33 getHealthStatus(state.allEvents, state.loadedEvents),
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060034 },
35 mutations: {
Mateusz Gapski076ab272020-07-20 10:55:15 +020036 setAllEvents: (state, allEvents) => (
37 (state.allEvents = allEvents), (state.loadedEvents = true)
Derick Montague602e98a2020-10-21 16:20:00 -050038 ),
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060039 },
40 actions: {
Yoshie Muranaka598bf7e2020-05-01 12:26:00 -070041 async getEventLogData({ commit }) {
42 return await api
Yoshie Muranakace9a3ef2020-05-06 14:33:22 -070043 .get('/redfish/v1/Systems/system/LogServices/EventLog/Entries')
44 .then(({ data: { Members = [] } = {} }) => {
Derick Montague602e98a2020-10-21 16:20:00 -050045 const eventLogs = Members.map((log) => {
Sukanya Pandey47b047c2020-12-23 13:18:55 +053046 const {
47 Id,
48 Severity,
49 Created,
50 EntryType,
51 Message,
52 Name,
53 Modified,
Dixsie Wolmers27d68af2021-05-02 18:20:27 -050054 Resolved,
Dixsie Wolmers8b1beff2021-06-14 11:29:44 -050055 AdditionalDataURI,
Sukanya Pandey47b047c2020-12-23 13:18:55 +053056 } = log;
Yoshie Muranakabe3af332020-05-11 08:23:04 -070057 return {
58 id: Id,
59 severity: Severity,
60 date: new Date(Created),
61 type: EntryType,
62 description: Message,
Sukanya Pandey47b047c2020-12-23 13:18:55 +053063 name: Name,
64 modifiedDate: new Date(Modified),
Derick Montague602e98a2020-10-21 16:20:00 -050065 uri: log['@odata.id'],
Dixsie Wolmers27d68af2021-05-02 18:20:27 -050066 filterByStatus: Resolved ? 'Resolved' : 'Unresolved',
67 status: Resolved, //true or false
Dixsie Wolmers8b1beff2021-06-14 11:29:44 -050068 additionalDataUri: AdditionalDataURI,
Yoshie Muranakabe3af332020-05-11 08:23:04 -070069 };
70 });
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -080071 commit('setAllEvents', eventLogs);
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060072 })
Derick Montague602e98a2020-10-21 16:20:00 -050073 .catch((error) => {
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060074 console.log('Event Log Data:', error);
75 });
Yoshie Muranakabe3af332020-05-11 08:23:04 -070076 },
Sukanya Pandey2f6d5522020-10-28 10:38:00 +053077 async deleteAllEventLogs({ dispatch }, data) {
78 return await api
79 .post(
80 '/redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog'
81 )
82 .then(() => dispatch('getEventLogData'))
83 .then(() => i18n.tc('pageEventLogs.toast.successDelete', data))
84 .catch((error) => {
85 console.log(error);
86 throw new Error(i18n.tc('pageEventLogs.toast.errorDelete', data));
87 });
88 },
Yoshie Muranakabe3af332020-05-11 08:23:04 -070089 async deleteEventLogs({ dispatch }, uris = []) {
Derick Montague602e98a2020-10-21 16:20:00 -050090 const promises = uris.map((uri) =>
91 api.delete(uri).catch((error) => {
Yoshie Muranakabe3af332020-05-11 08:23:04 -070092 console.log(error);
93 return error;
94 })
95 );
96 return await api
97 .all(promises)
Derick Montague602e98a2020-10-21 16:20:00 -050098 .then((response) => {
Yoshie Muranakabe3af332020-05-11 08:23:04 -070099 dispatch('getEventLogData');
100 return response;
101 })
102 .then(
103 api.spread((...responses) => {
104 const { successCount, errorCount } = getResponseCount(responses);
105 const toastMessages = [];
106
107 if (successCount) {
108 const message = i18n.tc(
109 'pageEventLogs.toast.successDelete',
110 successCount
111 );
112 toastMessages.push({ type: 'success', message });
113 }
114
115 if (errorCount) {
116 const message = i18n.tc(
117 'pageEventLogs.toast.errorDelete',
118 errorCount
119 );
120 toastMessages.push({ type: 'error', message });
121 }
122
123 return toastMessages;
124 })
125 );
Derick Montague602e98a2020-10-21 16:20:00 -0500126 },
Dixsie Wolmers27d68af2021-05-02 18:20:27 -0500127 async resolveEventLogs({ dispatch }, logs) {
128 const promises = logs.map((log) =>
129 api.patch(log.uri, { Resolved: true }).catch((error) => {
130 console.log(error);
131 return error;
132 })
133 );
134 return await api
135 .all(promises)
136 .then((response) => {
137 dispatch('getEventLogData');
138 return response;
139 })
140 .then(
141 api.spread((...responses) => {
142 const { successCount, errorCount } = getResponseCount(responses);
143 const toastMessages = [];
144 if (successCount) {
145 const message = i18n.tc(
146 'pageEventLogs.toast.successResolveLogs',
147 successCount
148 );
149 toastMessages.push({ type: 'success', message });
150 }
151 if (errorCount) {
152 const message = i18n.tc(
153 'pageEventLogs.toast.errorResolveLogs',
154 errorCount
155 );
156 toastMessages.push({ type: 'error', message });
157 }
158 return toastMessages;
159 })
160 );
161 },
162 async unresolveEventLogs({ dispatch }, logs) {
163 const promises = logs.map((log) =>
164 api.patch(log.uri, { Resolved: false }).catch((error) => {
165 console.log(error);
166 return error;
167 })
168 );
169 return await api
170 .all(promises)
171 .then((response) => {
172 dispatch('getEventLogData');
173 return response;
174 })
175 .then(
176 api.spread((...responses) => {
177 const { successCount, errorCount } = getResponseCount(responses);
178 const toastMessages = [];
179 if (successCount) {
180 const message = i18n.tc(
181 'pageEventLogs.toast.successUnresolveLogs',
182 successCount
183 );
184 toastMessages.push({ type: 'success', message });
185 }
186 if (errorCount) {
187 const message = i18n.tc(
188 'pageEventLogs.toast.errorUnresolveLogs',
189 errorCount
190 );
191 toastMessages.push({ type: 'error', message });
192 }
193 return toastMessages;
194 })
195 );
196 },
197 async updateEventLogStatus({ dispatch }, log) {
198 const updatedEventLogStatus = log.status;
199 return await api
200 .patch(log.uri, { Resolved: updatedEventLogStatus })
201 .then(() => {
202 dispatch('getEventLogData');
203 })
204 .then(() => {
205 if (log.status) {
206 return i18n.t('pageEventLogs.toast.successResolveLog');
207 } else {
208 return i18n.t('pageEventLogs.toast.successUnresolveLog');
209 }
210 })
211 .catch((error) => {
212 console.log(error);
213 throw new Error(i18n.t('pageEventLogs.toast.errorLogStatusUpdate'));
214 });
215 },
Derick Montague602e98a2020-10-21 16:20:00 -0500216 },
Dixsie Wolmersf65ee342020-01-22 19:47:56 -0600217};
218
219export default EventLogStore;