diff options
author | Sukanya Pandey <sukapan1@in.ibm.com> | 2021-08-23 15:41:02 +0300 |
---|---|---|
committer | Dixsie Wolmers <dixsiew@gmail.com> | 2022-01-28 00:14:50 +0300 |
commit | e39b95d6d06c9389c123440d1571edc5cee211bb (patch) | |
tree | 68a65efe9eb104232cc1153b4517d6ab531f7182 /src | |
parent | 2b33ec2cd523cc48c40977b31a13c2ce925f58c5 (diff) | |
download | webui-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
Diffstat (limited to 'src')
-rw-r--r-- | src/store/modules/Logs/DumpsStore.js | 39 | ||||
-rw-r--r-- | src/views/Logs/Dumps/Dumps.vue | 73 | ||||
-rw-r--r-- | src/views/Logs/Dumps/DumpsForm.vue | 8 |
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(() => |