xref: /openbmc/webui-vue/src/views/Overview/Overview.vue (revision d36ac8a8be8636ddd0e64ce005d507b21bcdeb00)
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