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