blob: 418e45581c0bb5aa867da914da00fa2cc0aed22e [file] [log] [blame]
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: {
async getEventLogData({ commit }) {
return await 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;