blob: cdfb358a6910d01ba0084ea0b67861c1e513623f [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) => {
Yoshie Muranakabe3af332020-05-11 08:23:04 -070046 const { Id, Severity, Created, EntryType, Message } = log;
47 return {
48 id: Id,
49 severity: Severity,
50 date: new Date(Created),
51 type: EntryType,
52 description: Message,
Derick Montague602e98a2020-10-21 16:20:00 -050053 uri: log['@odata.id'],
Yoshie Muranakabe3af332020-05-11 08:23:04 -070054 };
55 });
Yoshie Muranaka1ace1d92020-02-06 13:47:28 -080056 commit('setAllEvents', eventLogs);
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060057 })
Derick Montague602e98a2020-10-21 16:20:00 -050058 .catch((error) => {
Dixsie Wolmersf65ee342020-01-22 19:47:56 -060059 console.log('Event Log Data:', error);
60 });
Yoshie Muranakabe3af332020-05-11 08:23:04 -070061 },
Sukanya Pandey2f6d5522020-10-28 10:38:00 +053062 async deleteAllEventLogs({ dispatch }, data) {
63 return await api
64 .post(
65 '/redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog'
66 )
67 .then(() => dispatch('getEventLogData'))
68 .then(() => i18n.tc('pageEventLogs.toast.successDelete', data))
69 .catch((error) => {
70 console.log(error);
71 throw new Error(i18n.tc('pageEventLogs.toast.errorDelete', data));
72 });
73 },
Yoshie Muranakabe3af332020-05-11 08:23:04 -070074 async deleteEventLogs({ dispatch }, uris = []) {
Derick Montague602e98a2020-10-21 16:20:00 -050075 const promises = uris.map((uri) =>
76 api.delete(uri).catch((error) => {
Yoshie Muranakabe3af332020-05-11 08:23:04 -070077 console.log(error);
78 return error;
79 })
80 );
81 return await api
82 .all(promises)
Derick Montague602e98a2020-10-21 16:20:00 -050083 .then((response) => {
Yoshie Muranakabe3af332020-05-11 08:23:04 -070084 dispatch('getEventLogData');
85 return response;
86 })
87 .then(
88 api.spread((...responses) => {
89 const { successCount, errorCount } = getResponseCount(responses);
90 const toastMessages = [];
91
92 if (successCount) {
93 const message = i18n.tc(
94 'pageEventLogs.toast.successDelete',
95 successCount
96 );
97 toastMessages.push({ type: 'success', message });
98 }
99
100 if (errorCount) {
101 const message = i18n.tc(
102 'pageEventLogs.toast.errorDelete',
103 errorCount
104 );
105 toastMessages.push({ type: 'error', message });
106 }
107
108 return toastMessages;
109 })
110 );
Derick Montague602e98a2020-10-21 16:20:00 -0500111 },
112 },
Dixsie Wolmersf65ee342020-01-22 19:47:56 -0600113};
114
115export default EventLogStore;