| import api from '../../api'; |
| |
| const EVENT_SEVERITY = { |
| emergency: 'xyz.openbmc_project.Logging.Entry.Level.Emergency', |
| alert: 'xyz.openbmc_project.Logging.Entry.Level.Alert', |
| critical: 'xyz.openbmc_project.Logging.Entry.Level.Critical', |
| error: 'xyz.openbmc_project.Logging.Entry.Level.Error', |
| warning: 'xyz.openbmc_project.Logging.Entry.Level.Warning', |
| notice: 'xyz.openbmc_project.Logging.Entry.Level.Notice', |
| informational: 'xyz.openbmc_project.Logging.Entry.Level.Informational', |
| debug: 'xyz.openbmc_project.Logging.Entry.Level.Debug' |
| }; |
| |
| const priorityMapper = severity => { |
| switch (severity) { |
| case EVENT_SEVERITY.emergency: |
| case EVENT_SEVERITY.alert: |
| case EVENT_SEVERITY.critical: |
| case EVENT_SEVERITY.error: |
| return 'high'; |
| case EVENT_SEVERITY.warning: |
| return 'medium'; |
| case EVENT_SEVERITY.notice: |
| case EVENT_SEVERITY.debug: |
| case EVENT_SEVERITY.informational: |
| return 'low'; |
| default: |
| return ''; |
| } |
| }; |
| |
| const getHealthStatus = allEvents => { |
| let status = 'good'; |
| for (const event of allEvents) { |
| if (!event.Resolved && event.priority === 'medium') { |
| status = 'warning'; |
| } |
| if (!event.Resolved && event.priority === 'high') { |
| status = 'critical'; |
| break; |
| } |
| } |
| return status; |
| }; |
| |
| const EventLogStore = { |
| namespaced: true, |
| state: { |
| allEvents: [], |
| highPriorityEvents: [], |
| healthStatus: null |
| }, |
| getters: { |
| allEvents: state => state.allEvents, |
| highPriorityEvents: state => state.highPriorityEvents, |
| healthStatus: state => state.healthStatus |
| }, |
| mutations: { |
| setAllEvents: (state, allEvents) => (state.allEvents = allEvents), |
| setHighPriorityEvents: (state, highPriorityEvents) => |
| (state.highPriorityEvents = highPriorityEvents), |
| setHealthStatus: (state, status) => (state.healthStatus = status) |
| }, |
| actions: { |
| getEventLogData({ commit }) { |
| api |
| .get('/xyz/openbmc_project/logging/enumerate') |
| .then(response => { |
| const responseData = response.data.data; |
| const eventLogs = []; |
| |
| for (const key in responseData) { |
| const event = responseData[key]; |
| const { Id } = event; |
| if (responseData.hasOwnProperty(key) && Id) { |
| const { EventID, Description, Timestamp, Severity } = event; |
| eventLogs.push({ |
| logId: Id, |
| priority: priorityMapper(Severity), |
| timestamp: new Date(Timestamp), |
| eventID: EventID, |
| description: Description, |
| ...event |
| }); |
| } |
| } |
| |
| const healthStatus = getHealthStatus(eventLogs); |
| const highPriorityEvents = eventLogs.filter( |
| ({ priority, Resolved }) => priority === 'high' && !Resolved |
| ); |
| |
| commit('setAllEvents', eventLogs); |
| commit('setHighPriorityEvents', highPriorityEvents); |
| commit('setHealthStatus', healthStatus); |
| }) |
| .catch(error => { |
| console.log('Event Log Data:', error); |
| }); |
| }, |
| checkHealth({ commit, getters }, interfaces) { |
| if (getters['healthStatus'] === 'critical') return; |
| for (const key in interfaces) { |
| const event = interfaces[key]; |
| const eventPriority = priorityMapper(event.Severity); |
| const isEventResolved = event.Resolved; |
| if (!isEventResolved) { |
| if (eventPriority === 'high') { |
| commit('setHealthStatus', 'critical'); |
| break; |
| } |
| if (eventPriority === 'medium') commit('setHealthStatus', 'warning'); |
| } |
| } |
| } |
| } |
| }; |
| |
| export default EventLogStore; |