summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSukanya Pandey <sukapan1@in.ibm.com>2021-08-23 15:41:02 +0300
committerDixsie Wolmers <dixsiew@gmail.com>2022-01-28 00:14:50 +0300
commite39b95d6d06c9389c123440d1571edc5cee211bb (patch)
tree68a65efe9eb104232cc1153b4517d6ab531f7182
parent2b33ec2cd523cc48c40977b31a13c2ce925f58c5 (diff)
downloadwebui-vue-e39b95d6d06c9389c123440d1571edc5cee211bb.tar.xz
Add ability to view all the dumps
The story is integration of these two API responses for their respective dumps: 1.Resource and Hostboot dumps: redfish/v1/Systems/system/LogServices/Dump/Entries 2.BMC Dumps: /redfish/v1/Managers/bmc/LogServices/Dump/Entries Signed-off-by: Sukanya Pandey <sukapan1@in.ibm.com> Change-Id: I24ded733e682d21904e92e2e8be1951e46d33b09
-rw-r--r--src/store/modules/Logs/DumpsStore.js39
-rw-r--r--src/views/Logs/Dumps/Dumps.vue73
-rw-r--r--src/views/Logs/Dumps/DumpsForm.vue8
3 files changed, 86 insertions, 34 deletions
diff --git a/src/store/modules/Logs/DumpsStore.js b/src/store/modules/Logs/DumpsStore.js
index ac61d2dc..746733a0 100644
--- a/src/store/modules/Logs/DumpsStore.js
+++ b/src/store/modules/Logs/DumpsStore.js
@@ -10,7 +10,7 @@ const DumpsStore = {
allDumps: (state) => state.allDumps,
},
mutations: {
- setBmcDumps: (state, dumps) => {
+ setAllDumps: (state, dumps) => {
state.allDumps = dumps.map((dump) => ({
data: dump.AdditionalDataURI,
dateTime: new Date(dump.Created),
@@ -22,10 +22,35 @@ const DumpsStore = {
},
},
actions: {
- async getBmcDumpEntries({ commit }) {
+ async getBmcDumpEntries() {
+ return api
+ .get('/redfish/v1/')
+ .then((response) => api.get(response.data.Managers['@odata.id']))
+ .then((response) => api.get(`${response.data['@odata.id']}/bmc`))
+ .then((response) => api.get(response.data.LogServices['@odata.id']))
+ .then((response) => api.get(`${response.data['@odata.id']}/Dump`))
+ .then((response) => api.get(response.data.Entries['@odata.id']))
+ .catch((error) => console.log(error));
+ },
+ async getSystemDumpEntries() {
+ return api
+ .get('/redfish/v1/')
+ .then((response) => api.get(response.data.Systems['@odata.id']))
+ .then((response) => api.get(`${response.data['@odata.id']}/system`))
+ .then((response) => api.get(response.data.LogServices['@odata.id']))
+ .then((response) => api.get(`${response.data['@odata.id']}/Dump`))
+ .then((response) => api.get(response.data.Entries['@odata.id']))
+ .catch((error) => console.log(error));
+ },
+ async getAllDumps({ commit, dispatch }) {
return await api
- .get('/redfish/v1/Managers/bmc/LogServices/Dump/Entries')
- .then(({ data = {} }) => commit('setBmcDumps', data.Members || []))
+ .all([dispatch('getBmcDumpEntries'), dispatch('getSystemDumpEntries')])
+ .then((response) => {
+ const bmcDumpEntries = response[0].data?.Members || [];
+ const systemDumpEntries = response[1].data?.Members || [];
+ const allDumps = [...bmcDumpEntries, ...systemDumpEntries];
+ commit('setAllDumps', allDumps);
+ })
.catch((error) => console.log(error));
},
async createBmcDump() {
@@ -66,7 +91,7 @@ const DumpsStore = {
return await api
.all(promises)
.then((response) => {
- dispatch('getBmcDumpEntries');
+ dispatch('getAllDumps');
return response;
})
.then(
@@ -95,13 +120,13 @@ const DumpsStore = {
);
},
async deleteAllDumps({ commit, state }) {
- const totalDumpCount = state.bmcDumps.length;
+ const totalDumpCount = state.allDumps.length;
return await api
.post(
'/redfish/v1/Managers/bmc/LogServices/Dump/Actions/LogService.ClearLog'
)
.then(() => {
- commit('setBmcDumps', []);
+ commit('setAllDumps', []);
return i18n.tc('pageDumps.toast.successDeleteDump', totalDumpCount);
})
.catch((error) => {
diff --git a/src/views/Logs/Dumps/Dumps.vue b/src/views/Logs/Dumps/Dumps.vue
index a6dc10f5..179a503e 100644
--- a/src/views/Logs/Dumps/Dumps.vue
+++ b/src/views/Logs/Dumps/Dumps.vue
@@ -20,8 +20,8 @@
/>
<div class="ml-sm-4">
<table-cell-count
- :filtered-items-count="filteredItemCount"
- :total-number-of-cells="tableItems.length"
+ :filtered-items-count="filteredRows"
+ :total-number-of-cells="allDumps.length"
></table-cell-count>
</div>
</b-col>
@@ -29,6 +29,14 @@
<table-date-filter @change="onChangeDateTimeFilter" />
</b-col>
</b-row>
+ <b-row>
+ <b-col class="text-right">
+ <table-filter
+ :filters="tableFilters"
+ @filter-change="onFilterChange"
+ />
+ </b-col>
+ </b-row>
<table-toolbar
:selected-items-count="selectedRows.length"
:actions="batchActions"
@@ -47,12 +55,12 @@
responsive="md"
sort-by="dateTime"
:fields="fields"
- :items="filteredTableItems"
+ :items="filteredDumps"
:empty-text="$t('global.table.emptyMessage')"
:empty-filtered-text="$t('global.table.emptySearchMessage')"
:filter="searchFilter"
- @filtered="onChangeSearchFilter"
- @row-selected="onRowSelected($event, filteredTableItems.length)"
+ @filtered="onFiltered"
+ @row-selected="onRowSelected($event, filteredDumps.length)"
>
<!-- Checkbox column -->
<template #head(checkbox)>
@@ -126,7 +134,7 @@
first-number
last-number
:per-page="perPage"
- :total-rows="getTotalRowCount(filteredItemCount)"
+ :total-rows="getTotalRowCount()"
aria-controls="table-dump-entries"
/>
</b-col>
@@ -137,7 +145,6 @@
<script>
import IconDelete from '@carbon/icons-vue/es/trash-can/20';
import IconDownload from '@carbon/icons-vue/es/download/20';
-
import DumpsForm from './DumpsForm';
import PageSection from '@/components/Global/PageSection';
import PageTitle from '@/components/Global/PageTitle';
@@ -146,7 +153,6 @@ import TableCellCount from '@/components/Global/TableCellCount';
import TableDateFilter from '@/components/Global/TableDateFilter';
import TableRowAction from '@/components/Global/TableRowAction';
import TableToolbar from '@/components/Global/TableToolbar';
-
import BVTableSelectableMixin, {
selectedRows,
tableHeaderCheckboxModel,
@@ -162,6 +168,7 @@ import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
import SearchFilterMixin, {
searchFilter,
} from '@/components/Mixins/SearchFilterMixin';
+import TableFilter from '@/components/Global/TableFilter';
import TableFilterMixin from '@/components/Mixins/TableFilterMixin';
export default {
@@ -176,6 +183,7 @@ export default {
TableDateFilter,
TableRowAction,
TableToolbar,
+ TableFilter,
},
mixins: [
BVTableSelectableMixin,
@@ -231,24 +239,39 @@ export default {
label: this.$t('global.action.delete'),
},
],
+ tableFilters: [
+ {
+ key: 'dumpType',
+ label: this.$t('pageDumps.table.dumpType'),
+ values: [
+ 'BMC Dump Entry',
+ 'Hostboot Dump Entry',
+ 'Resource Dump Entry',
+ 'System Dump Entry',
+ ],
+ },
+ ],
+ activeFilters: [],
currentPage: currentPage,
filterEndDate: null,
filterStartDate: null,
itemsPerPageOptions: itemsPerPageOptions,
perPage: perPage,
searchFilter,
- searchFilteredItemsCount: 0,
+ searchTotalFilteredRows: 0,
selectedRows,
tableHeaderCheckboxIndeterminate,
tableHeaderCheckboxModel,
};
},
computed: {
- dumps() {
- return this.$store.getters['dumps/allDumps'];
+ filteredRows() {
+ return this.searchFilter
+ ? this.searchTotalFilteredRows
+ : this.filteredDumps.length;
},
- tableItems() {
- return this.dumps.map((item) => {
+ allDumps() {
+ return this.$store.getters['dumps/allDumps'].map((item) => {
return {
...item,
actions: [
@@ -264,32 +287,34 @@ export default {
};
});
},
- filteredTableItems() {
+ filteredDumpsByDate() {
return this.getFilteredTableDataByDate(
- this.tableItems,
+ this.allDumps,
this.filterStartDate,
this.filterEndDate,
'dateTime'
);
},
- filteredItemCount() {
- return this.searchFilter
- ? this.searchFilteredItemsCount
- : this.filteredTableItems.length;
+ filteredDumps() {
+ return this.getFilteredTableData(
+ this.filteredDumpsByDate,
+ this.activeFilters
+ );
},
},
created() {
this.startLoader();
- this.$store
- .dispatch('dumps/getBmcDumpEntries')
- .finally(() => this.endLoader());
+ this.$store.dispatch('dumps/getAllDumps').finally(() => this.endLoader());
},
methods: {
convertBytesToMegabytes(bytes) {
return parseFloat((bytes / 1000000).toFixed(3));
},
- onChangeSearchFilter(items) {
- this.searchFilteredItemsCount = items.length;
+ onFilterChange({ activeFilters }) {
+ this.activeFilters = activeFilters;
+ },
+ onFiltered(filteredItems) {
+ this.searchTotalFilteredRows = filteredItems.length;
},
onChangeDateTimeFilter({ fromDate, toDate }) {
this.filterStartDate = fromDate;
diff --git a/src/views/Logs/Dumps/DumpsForm.vue b/src/views/Logs/Dumps/DumpsForm.vue
index 02ec1864..07f4a060 100644
--- a/src/views/Logs/Dumps/DumpsForm.vue
+++ b/src/views/Logs/Dumps/DumpsForm.vue
@@ -34,10 +34,8 @@
<script>
import { required } from 'vuelidate/lib/validators';
-
import ModalConfirmation from './DumpsModalConfirmation';
import Alert from '@/components/Global/Alert';
-
import BVToastMixin from '@/components/Mixins/BVToastMixin';
import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
@@ -62,9 +60,13 @@ export default {
handleSubmit() {
this.$v.$touch();
if (this.$v.$invalid) return;
+
+ // System dump initiation
if (this.selectedDumpType === 'system') {
this.showConfirmationModal();
- } else {
+ }
+ // BMC dump initiation
+ else if (this.selectedDumpType === 'bmc') {
this.$store
.dispatch('dumps/createBmcDump')
.then(() =>