summaryrefslogtreecommitdiff
path: root/src/store/modules/Logs
diff options
context:
space:
mode:
Diffstat (limited to 'src/store/modules/Logs')
-rw-r--r--src/store/modules/Logs/DumpsStore.js117
-rw-r--r--src/store/modules/Logs/EventLogStore.js222
2 files changed, 339 insertions, 0 deletions
diff --git a/src/store/modules/Logs/DumpsStore.js b/src/store/modules/Logs/DumpsStore.js
new file mode 100644
index 00000000..3b91354b
--- /dev/null
+++ b/src/store/modules/Logs/DumpsStore.js
@@ -0,0 +1,117 @@
+import api, { getResponseCount } from '@/store/api';
+import i18n from '@/i18n';
+
+const DumpsStore = {
+ namespaced: true,
+ state: {
+ bmcDumps: [],
+ },
+ getters: {
+ bmcDumps: (state) => state.bmcDumps,
+ },
+ mutations: {
+ setBmcDumps: (state, dumps) => {
+ state.bmcDumps = dumps.map((dump) => ({
+ data: dump.AdditionalDataURI,
+ dateTime: new Date(dump.Created),
+ dumpType: dump.Name,
+ id: dump.Id,
+ location: dump['@odata.id'],
+ size: dump.AdditionalDataSizeBytes,
+ }));
+ },
+ },
+ actions: {
+ async getBmcDumps({ commit }) {
+ return await api
+ .get('/redfish/v1/Managers/bmc/LogServices/Dump/Entries')
+ .then(({ data = {} }) => commit('setBmcDumps', data.Members || []))
+ .catch((error) => console.log(error));
+ },
+ async createBmcDump() {
+ return await api
+ .post(
+ '/redfish/v1/Managers/bmc/LogServices/Dump/Actions/LogService.CollectDiagnosticData',
+ {
+ DiagnosticDataType: 'Manager',
+ OEMDiagnosticDataType: '',
+ }
+ )
+ .catch((error) => {
+ console.log(error);
+ throw new Error(i18n.t('pageDumps.toast.errorStartBmcDump'));
+ });
+ },
+ async createSystemDump() {
+ return await api
+ .post(
+ '/redfish/v1/Systems/system/LogServices/Dump/Actions/LogService.CollectDiagnosticData',
+ {
+ DiagnosticDataType: 'OEM',
+ OEMDiagnosticDataType: 'System',
+ }
+ )
+ .catch((error) => {
+ console.log(error);
+ throw new Error(i18n.t('pageDumps.toast.errorStartSystemDump'));
+ });
+ },
+ async deleteDumps({ dispatch }, dumps) {
+ const promises = dumps.map(({ location }) =>
+ api.delete(location).catch((error) => {
+ console.log(error);
+ return error;
+ })
+ );
+ return await api
+ .all(promises)
+ .then((response) => {
+ dispatch('getBmcDumps');
+ return response;
+ })
+ .then(
+ api.spread((...responses) => {
+ const { successCount, errorCount } = getResponseCount(responses);
+ const toastMessages = [];
+
+ if (successCount) {
+ const message = i18n.tc(
+ 'pageDumps.toast.successDeleteDump',
+ successCount
+ );
+ toastMessages.push({ type: 'success', message });
+ }
+
+ if (errorCount) {
+ const message = i18n.tc(
+ 'pageDumps.toast.errorDeleteDump',
+ errorCount
+ );
+ toastMessages.push({ type: 'error', message });
+ }
+
+ return toastMessages;
+ })
+ );
+ },
+ async deleteAllDumps({ commit, state }) {
+ const totalDumpCount = state.bmcDumps.length;
+ return await api
+ .post(
+ '/redfish/v1/Managers/bmc/LogServices/Dump/Actions/LogService.ClearLog'
+ )
+ .then(() => {
+ commit('setBmcDumps', []);
+ return i18n.tc('pageDumps.toast.successDeleteDump', totalDumpCount);
+ })
+ .catch((error) => {
+ console.log(error);
+ throw new Error(
+ i18n.tc('pageDumps.toast.errorDeleteDump', totalDumpCount)
+ );
+ });
+ },
+ },
+};
+
+export default DumpsStore;
diff --git a/src/store/modules/Logs/EventLogStore.js b/src/store/modules/Logs/EventLogStore.js
new file mode 100644
index 00000000..c9bd82fd
--- /dev/null
+++ b/src/store/modules/Logs/EventLogStore.js
@@ -0,0 +1,222 @@
+import api, { getResponseCount } from '@/store/api';
+import i18n from '@/i18n';
+
+const getHealthStatus = (events, loadedEvents) => {
+ let status = loadedEvents ? 'OK' : '';
+ for (const event of events) {
+ if (event.severity === 'Warning') {
+ status = 'Warning';
+ }
+ if (event.severity === 'Critical') {
+ status = 'Critical';
+ break;
+ }
+ }
+ return status;
+};
+
+// TODO: High priority events should also check if Log
+// is resolved when the property is available in Redfish
+const getHighPriorityEvents = (events) =>
+ events.filter(({ severity }) => severity === 'Critical');
+
+const EventLogStore = {
+ namespaced: true,
+ state: {
+ allEvents: [],
+ loadedEvents: false,
+ },
+ getters: {
+ allEvents: (state) => state.allEvents,
+ highPriorityEvents: (state) => getHighPriorityEvents(state.allEvents),
+ healthStatus: (state) =>
+ getHealthStatus(state.allEvents, state.loadedEvents),
+ },
+ mutations: {
+ setAllEvents: (state, allEvents) => (
+ (state.allEvents = allEvents), (state.loadedEvents = true)
+ ),
+ },
+ actions: {
+ async getEventLogData({ commit }) {
+ return await api
+ .get('/redfish/v1/Systems/system/LogServices/EventLog/Entries')
+ .then(({ data: { Members = [] } = {} }) => {
+ const eventLogs = Members.map((log) => {
+ const {
+ Id,
+ Severity,
+ Created,
+ EntryType,
+ Message,
+ Name,
+ Modified,
+ Resolved,
+ AdditionalDataURI,
+ } = log;
+ return {
+ id: Id,
+ severity: Severity,
+ date: new Date(Created),
+ type: EntryType,
+ description: Message,
+ name: Name,
+ modifiedDate: new Date(Modified),
+ uri: log['@odata.id'],
+ filterByStatus: Resolved ? 'Resolved' : 'Unresolved',
+ status: Resolved, //true or false
+ additionalDataUri: AdditionalDataURI,
+ };
+ });
+ commit('setAllEvents', eventLogs);
+ })
+ .catch((error) => {
+ console.log('Event Log Data:', error);
+ });
+ },
+ async deleteAllEventLogs({ dispatch }, data) {
+ return await api
+ .post(
+ '/redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog'
+ )
+ .then(() => dispatch('getEventLogData'))
+ .then(() => i18n.tc('pageEventLogs.toast.successDelete', data.length))
+ .catch((error) => {
+ console.log(error);
+ throw new Error(
+ i18n.tc('pageEventLogs.toast.errorDelete', data.length)
+ );
+ });
+ },
+ async deleteEventLogs({ dispatch }, uris = []) {
+ const promises = uris.map((uri) =>
+ api.delete(uri).catch((error) => {
+ console.log(error);
+ return error;
+ })
+ );
+ return await api
+ .all(promises)
+ .then((response) => {
+ dispatch('getEventLogData');
+ return response;
+ })
+ .then(
+ api.spread((...responses) => {
+ const { successCount, errorCount } = getResponseCount(responses);
+ const toastMessages = [];
+
+ if (successCount) {
+ const message = i18n.tc(
+ 'pageEventLogs.toast.successDelete',
+ successCount
+ );
+ toastMessages.push({ type: 'success', message });
+ }
+
+ if (errorCount) {
+ const message = i18n.tc(
+ 'pageEventLogs.toast.errorDelete',
+ errorCount
+ );
+ toastMessages.push({ type: 'error', message });
+ }
+
+ return toastMessages;
+ })
+ );
+ },
+ async resolveEventLogs({ dispatch }, logs) {
+ const promises = logs.map((log) =>
+ api.patch(log.uri, { Resolved: true }).catch((error) => {
+ console.log(error);
+ return error;
+ })
+ );
+ return await api
+ .all(promises)
+ .then((response) => {
+ dispatch('getEventLogData');
+ return response;
+ })
+ .then(
+ api.spread((...responses) => {
+ const { successCount, errorCount } = getResponseCount(responses);
+ const toastMessages = [];
+ if (successCount) {
+ const message = i18n.tc(
+ 'pageEventLogs.toast.successResolveLogs',
+ successCount
+ );
+ toastMessages.push({ type: 'success', message });
+ }
+ if (errorCount) {
+ const message = i18n.tc(
+ 'pageEventLogs.toast.errorResolveLogs',
+ errorCount
+ );
+ toastMessages.push({ type: 'error', message });
+ }
+ return toastMessages;
+ })
+ );
+ },
+ async unresolveEventLogs({ dispatch }, logs) {
+ const promises = logs.map((log) =>
+ api.patch(log.uri, { Resolved: false }).catch((error) => {
+ console.log(error);
+ return error;
+ })
+ );
+ return await api
+ .all(promises)
+ .then((response) => {
+ dispatch('getEventLogData');
+ return response;
+ })
+ .then(
+ api.spread((...responses) => {
+ const { successCount, errorCount } = getResponseCount(responses);
+ const toastMessages = [];
+ if (successCount) {
+ const message = i18n.tc(
+ 'pageEventLogs.toast.successUnresolveLogs',
+ successCount
+ );
+ toastMessages.push({ type: 'success', message });
+ }
+ if (errorCount) {
+ const message = i18n.tc(
+ 'pageEventLogs.toast.errorUnresolveLogs',
+ errorCount
+ );
+ toastMessages.push({ type: 'error', message });
+ }
+ return toastMessages;
+ })
+ );
+ },
+ // Single log entry
+ async updateEventLogStatus({ dispatch }, log) {
+ const updatedEventLogStatus = log.status;
+ return await api
+ .patch(log.uri, { Resolved: updatedEventLogStatus })
+ .then(() => {
+ dispatch('getEventLogData');
+ })
+ .then(() => {
+ if (log.status) {
+ return i18n.tc('pageEventLogs.toast.successResolveLogs', 1);
+ } else {
+ return i18n.tc('pageEventLogs.toast.successUnresolveLogs', 1);
+ }
+ })
+ .catch((error) => {
+ console.log(error);
+ throw new Error(i18n.t('pageEventLogs.toast.errorLogStatusUpdate'));
+ });
+ },
+ },
+};
+
+export default EventLogStore;