1<template> 2 <b-container fluid="xl"> 3 <page-title /> 4 <overview-quick-links class="mb-4" /> 5 <page-section 6 :section-title="$t('pageOverview.systemInformation')" 7 class="mb-1" 8 > 9 <b-row class="row-cols-1 row-cols-md-2"> 10 <b-col class="mb-3"> 11 <overview-server class="h-100" /> 12 </b-col> 13 <b-col class="mb-3"> 14 <overview-firmware class="h-100" /> 15 </b-col> 16 </b-row> 17 <b-row class="row-cols-1 row-cols-md-2"> 18 <b-col class="mb-3"> 19 <overview-network class="h-100" /> 20 </b-col> 21 <b-col class="mb-3"> 22 <overview-power class="h-100" /> 23 </b-col> 24 </b-row> 25 </page-section> 26 <page-section :section-title="$t('pageOverview.statusInformation')"> 27 <b-row class="row-cols-1 row-cols-md-2"> 28 <b-col class="mb-3"> 29 <overview-events class="h-100" /> 30 </b-col> 31 <b-col class="mb-3"> 32 <overview-inventory class="h-100" /> 33 </b-col> 34 <b-col v-if="showDumps" class="mb-3"> 35 <overview-dumps class="h-100" /> 36 </b-col> 37 </b-row> 38 </page-section> 39 </b-container> 40</template> 41 42<script> 43import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin'; 44import OverviewDumps from './OverviewDumps.vue'; 45import OverviewEvents from './OverviewEvents.vue'; 46import OverviewFirmware from './OverviewFirmware.vue'; 47import OverviewInventory from './OverviewInventory.vue'; 48import OverviewNetwork from './OverviewNetwork'; 49import OverviewPower from './OverviewPower'; 50import OverviewQuickLinks from './OverviewQuickLinks'; 51import OverviewServer from './OverviewServer'; 52import PageSection from '@/components/Global/PageSection'; 53import PageTitle from '@/components/Global/PageTitle'; 54import { useI18n } from 'vue-i18n'; 55 56export default { 57 name: 'Overview', 58 components: { 59 OverviewDumps, 60 OverviewEvents, 61 OverviewFirmware, 62 OverviewInventory, 63 OverviewNetwork, 64 OverviewPower, 65 OverviewQuickLinks, 66 OverviewServer, 67 PageSection, 68 PageTitle, 69 }, 70 mixins: [LoadingBarMixin], 71 data() { 72 return { 73 $t: useI18n().t, 74 showDumps: process.env.VUE_APP_ENV_NAME === 'ibm', 75 // Promise resolvers 76 dumpsResolver: null, 77 eventsResolver: null, 78 selResolver: null, 79 firmwareResolver: null, 80 inventoryResolver: null, 81 networkResolver: null, 82 powerResolver: null, 83 quicklinksResolver: null, 84 serverResolver: null, 85 }; 86 }, 87 created() { 88 this.startLoader(); 89 90 const dumpsPromise = new Promise((resolve) => { 91 this.dumpsResolver = resolve; 92 this.$eventBus.on('overview-dumps-complete', () => resolve()); 93 }); 94 95 const eventsPromise = new Promise((resolve) => { 96 this.eventsResolver = resolve; 97 this.$eventBus.on('overview-events-complete', () => resolve()); 98 }); 99 100 const firmwarePromise = new Promise((resolve) => { 101 this.firmwareResolver = resolve; 102 this.$eventBus.on('overview-firmware-complete', () => resolve()); 103 }); 104 105 const inventoryPromise = new Promise((resolve) => { 106 this.inventoryResolver = resolve; 107 this.$eventBus.on('overview-inventory-complete', () => resolve()); 108 }); 109 110 const networkPromise = new Promise((resolve) => { 111 this.networkResolver = resolve; 112 this.$eventBus.on('overview-network-complete', () => resolve()); 113 }); 114 115 const powerPromise = new Promise((resolve) => { 116 this.powerResolver = resolve; 117 this.$eventBus.on('overview-power-complete', () => resolve()); 118 }); 119 120 const quicklinksPromise = new Promise((resolve) => { 121 this.quicklinksResolver = resolve; 122 this.$eventBus.on('overview-quicklinks-complete', () => resolve()); 123 }); 124 125 const serverPromise = new Promise((resolve) => { 126 this.serverResolver = resolve; 127 this.$eventBus.on('overview-server-complete', () => resolve()); 128 }); 129 130 const promises = [ 131 eventsPromise, 132 firmwarePromise, 133 inventoryPromise, 134 networkPromise, 135 powerPromise, 136 quicklinksPromise, 137 serverPromise, 138 ]; 139 if (this.showDumps) promises.push(dumpsPromise); 140 Promise.all(promises).finally(() => { 141 this.endLoader(); 142 }); 143 }, 144 beforeUnmount() { 145 // Clean up event listeners 146 this.$eventBus.off('overview-dumps-complete', this.handleDumpsComplete); 147 this.$eventBus.off('overview-events-complete', this.handleEventsComplete); 148 this.$eventBus.off('overview-sel-complete', this.handleSelComplete); 149 this.$eventBus.off( 150 'overview-firmware-complete', 151 this.handleFirmwareComplete, 152 ); 153 this.$eventBus.off( 154 'overview-inventory-complete', 155 this.handleInventoryComplete, 156 ); 157 this.$eventBus.off('overview-network-complete', this.handleNetworkComplete); 158 this.$eventBus.off('overview-power-complete', this.handlePowerComplete); 159 this.$eventBus.off( 160 'overview-quicklinks-complete', 161 this.handleQuicklinksComplete, 162 ); 163 this.$eventBus.off('overview-server-complete', this.handleServerComplete); 164 }, 165 methods: { 166 handleDumpsComplete() { 167 if (this.dumpsResolver) this.dumpsResolver(); 168 }, 169 handleEventsComplete() { 170 if (this.eventsResolver) this.eventsResolver(); 171 }, 172 handleSelComplete() { 173 if (this.selResolver) this.selResolver(); 174 }, 175 handleFirmwareComplete() { 176 if (this.firmwareResolver) this.firmwareResolver(); 177 }, 178 handleInventoryComplete() { 179 if (this.inventoryResolver) this.inventoryResolver(); 180 }, 181 handleNetworkComplete() { 182 if (this.networkResolver) this.networkResolver(); 183 }, 184 handlePowerComplete() { 185 if (this.powerResolver) this.powerResolver(); 186 }, 187 handleQuicklinksComplete() { 188 if (this.quicklinksResolver) this.quicklinksResolver(); 189 }, 190 handleServerComplete() { 191 if (this.serverResolver) this.serverResolver(); 192 }, 193 }, 194}; 195</script> 196