summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/locales/en-US.json9
-rw-r--r--src/store/modules/Health/EventLogStore.js11
-rw-r--r--src/views/Health/EventLogs/EventLogs.vue59
3 files changed, 67 insertions, 12 deletions
diff --git a/src/locales/en-US.json b/src/locales/en-US.json
index e73adbc0..eccd302a 100644
--- a/src/locales/en-US.json
+++ b/src/locales/en-US.json
@@ -7,11 +7,13 @@
"confirm": "Confirm",
"copy": "Copy",
"delete": "Delete",
+ "deleteAll": "Delete all",
"disable": "Disable",
"download": "Download",
"edit": "Edit",
"enable": "Enable",
"export": "Export",
+ "exportAll": "Export all",
"filter": "Filter",
"refresh": "Refresh",
"replace": "Replace",
@@ -246,12 +248,13 @@
},
"pageEventLogs": {
"additionalDataUri": "Download additional data",
- "exportFilePrefix": "event_logs_",
"resolve": "Resolve",
"resolved": "Resolved",
"unresolve": "Unresolve",
"unresolved": "Unresolved",
"modal": {
+ "deleteAllTitle": "Delete all logs",
+ "deleteAllMessage": "Are you sure you want to delete all logs? This action cannot be undone.",
"deleteTitle": "Delete log | Delete logs",
"deleteMessage": "Are you sure you want to delete %{count} log? This action cannot be undone. | Are you sure you want to delete %{count} logs? This action cannot be undone."
},
@@ -268,13 +271,11 @@
},
"toast": {
"errorDelete": "Error deleting %{count} log. | Error deleting %{count} logs.",
- "successDelete": "Successfully deleted %{count} log. | Successfully deleted %{count} logs.",
"errorLogStatusUpdate": "Error updating log status.",
"errorResolveLogs": "Error resolving %{count} log. | Error resolving %{count} logs.",
"errorUnresolveLogs": "Error unresolving %{count} log. | Error unresolving %{count} logs.",
- "successResolveLog": "Successfully resolved log.",
+ "successDelete": "Successfully deleted %{count} log. | Successfully deleted %{count} logs.",
"successResolveLogs": "Successfully resolved %{count} log. | Successfully resolved %{count} logs.",
- "successUnresolveLog": "Successfully unresolved log.",
"successUnresolveLogs": "Successfully unresolved %{count} log. | Successfully unresolved %{count} logs."
}
},
diff --git a/src/store/modules/Health/EventLogStore.js b/src/store/modules/Health/EventLogStore.js
index 5664e99f..c9bd82fd 100644
--- a/src/store/modules/Health/EventLogStore.js
+++ b/src/store/modules/Health/EventLogStore.js
@@ -80,10 +80,12 @@ const EventLogStore = {
'/redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog'
)
.then(() => dispatch('getEventLogData'))
- .then(() => i18n.tc('pageEventLogs.toast.successDelete', data))
+ .then(() => i18n.tc('pageEventLogs.toast.successDelete', data.length))
.catch((error) => {
console.log(error);
- throw new Error(i18n.tc('pageEventLogs.toast.errorDelete', data));
+ throw new Error(
+ i18n.tc('pageEventLogs.toast.errorDelete', data.length)
+ );
});
},
async deleteEventLogs({ dispatch }, uris = []) {
@@ -194,6 +196,7 @@ const EventLogStore = {
})
);
},
+ // Single log entry
async updateEventLogStatus({ dispatch }, log) {
const updatedEventLogStatus = log.status;
return await api
@@ -203,9 +206,9 @@ const EventLogStore = {
})
.then(() => {
if (log.status) {
- return i18n.t('pageEventLogs.toast.successResolveLog');
+ return i18n.tc('pageEventLogs.toast.successResolveLogs', 1);
} else {
- return i18n.t('pageEventLogs.toast.successUnresolveLog');
+ return i18n.tc('pageEventLogs.toast.successUnresolveLogs', 1);
}
})
.catch((error) => {
diff --git a/src/views/Health/EventLogs/EventLogs.vue b/src/views/Health/EventLogs/EventLogs.vue
index 9bc88c1a..fa3f43cb 100644
--- a/src/views/Health/EventLogs/EventLogs.vue
+++ b/src/views/Health/EventLogs/EventLogs.vue
@@ -2,7 +2,7 @@
<b-container fluid="xl">
<page-title />
<b-row class="align-items-start">
- <b-col sm="8" xl="6" class="d-sm-flex align-items-end">
+ <b-col sm="8" xl="6" class="d-sm-flex align-items-end mb-4">
<search
:placeholder="$t('pageEventLogs.table.searchLogs')"
data-test-id="eventLogs-input-searchLogs"
@@ -23,6 +23,21 @@
<b-row>
<b-col class="text-right">
<table-filter :filters="tableFilters" @filter-change="onFilterChange" />
+ <b-button
+ variant="link"
+ :disabled="allLogs.length === 0"
+ @click="deleteAllLogs"
+ >
+ <icon-delete /> {{ $t('global.action.deleteAll') }}
+ </b-button>
+ <b-button
+ variant="primary"
+ :class="{ disabled: allLogs.length === 0 }"
+ :download="exportFileNameByDate()"
+ :href="href"
+ >
+ <icon-export /> {{ $t('global.action.exportAll') }}
+ </b-button>
</b-col>
</b-row>
<b-row>
@@ -180,7 +195,7 @@
:value="action.value"
:title="action.title"
:row-data="row.item"
- :export-name="exportFileNameByDate()"
+ :export-name="exportFileNameByDate('export')"
:data-test-id="`eventLogs-button-deleteRow-${row.index}`"
@click-table-action="onTableRowAction($event, row.item)"
>
@@ -224,6 +239,7 @@
</template>
<script>
+import IconDelete from '@carbon/icons-vue/es/trash-can/20';
import IconTrashcan from '@carbon/icons-vue/es/trash-can/20';
import IconExport from '@carbon/icons-vue/es/document--export/20';
import IconChevron from '@carbon/icons-vue/es/chevron--down/20';
@@ -264,6 +280,7 @@ import SearchFilterMixin, {
export default {
components: {
+ IconDelete,
IconExport,
IconTrashcan,
IconChevron,
@@ -373,6 +390,9 @@ export default {
};
},
computed: {
+ href() {
+ return `data:text/json;charset=utf-8,${this.exportAllLogs()}`;
+ },
filteredRows() {
return this.searchFilter
? this.searchTotalFilteredRows
@@ -430,6 +450,23 @@ export default {
})
.catch(({ message }) => this.errorToast(message));
},
+ deleteAllLogs() {
+ this.$bvModal
+ .msgBoxConfirm(this.$t('pageEventLogs.modal.deleteAllMessage'), {
+ title: this.$t('pageEventLogs.modal.deleteAllTitle'),
+ okTitle: this.$t('global.action.delete'),
+ okVariant: 'danger',
+ cancelTitle: this.$t('global.action.cancel'),
+ })
+ .then((deleteConfirmed) => {
+ if (deleteConfirmed) {
+ this.$store
+ .dispatch('eventLog/deleteAllEventLogs', this.allLogs)
+ .then((message) => this.successToast(message))
+ .catch(({ message }) => this.errorToast(message));
+ }
+ });
+ },
deleteLogs(uris) {
this.$store
.dispatch('eventLog/deleteEventLogs', uris)
@@ -443,6 +480,14 @@ export default {
});
});
},
+ exportAllLogs() {
+ {
+ return this.$store.getters['eventLog/allEvents'].map((eventLogs) => {
+ const allEventLogsString = JSON.stringify(eventLogs);
+ return allEventLogsString;
+ });
+ }
+ },
onFilterChange({ activeFilters }) {
this.activeFilters = activeFilters;
},
@@ -507,13 +552,19 @@ export default {
this.searchTotalFilteredRows = filteredItems.length;
},
// Create export file name based on date
- exportFileNameByDate() {
+ exportFileNameByDate(value) {
let date = new Date();
date =
date.toISOString().slice(0, 10) +
'_' +
date.toString().split(':').join('-').split(' ')[4];
- return this.$t('pageEventLogs.exportFilePrefix') + date;
+ let fileName;
+ if (value === 'export') {
+ fileName = 'event_log_';
+ } else {
+ fileName = 'all_event_logs_';
+ }
+ return fileName + date;
},
resolveLogs() {
this.$store