summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/locales/en-US.json5
-rw-r--r--src/store/modules/Health/BmcStore.js36
-rw-r--r--src/views/Health/HardwareStatus/HardwareStatusTableBmcManager.vue162
3 files changed, 146 insertions, 57 deletions
diff --git a/src/locales/en-US.json b/src/locales/en-US.json
index 33048f6d..8ec50e96 100644
--- a/src/locales/en-US.json
+++ b/src/locales/en-US.json
@@ -375,6 +375,7 @@
"system": "System",
"table": {
"assetTag": "Asset tag",
+ "bmcDateTime": "BMC date and time",
"chassisType": "Chassis type",
"connectTypesSupported": "Connect types supported",
"description": "Description",
@@ -388,9 +389,10 @@
"id": "ID",
"identifyLed": "Identify LED",
"indicatorLed": "Indicator LED",
- "locationNumber": "Location number",
"instructionSet": "Instruction set",
+ "lastResetTime": "Last reset time",
"locationNumber": "Location number",
+ "managerType": "Manager type",
"manufacturer": "Manufacturer",
"maxConcurrentSessions": "Max concurrent sessions",
"maxSpeedMHz": "Max speed MHz",
@@ -398,6 +400,7 @@
"model": "Model",
"name": "Name",
"partNumber": "Part number",
+ "power": "Power",
"powerInputWatts": "Power input watts",
"powerState": "Power state",
"processorArchitecture": "Processor architecture",
diff --git a/src/store/modules/Health/BmcStore.js b/src/store/modules/Health/BmcStore.js
index 73df10b8..bbe157eb 100644
--- a/src/store/modules/Health/BmcStore.js
+++ b/src/store/modules/Health/BmcStore.js
@@ -1,6 +1,7 @@
import api from '@/store/api';
+import i18n from '@/i18n';
-const ChassisStore = {
+const BmcStore = {
namespaced: true,
state: {
bmc: null,
@@ -11,6 +12,7 @@ const ChassisStore = {
mutations: {
setBmcInfo: (state, data) => {
const bmc = {};
+ bmc.dateTime = new Date(data.DateTime);
bmc.description = data.Description;
bmc.firmwareVersion = data.FirmwareVersion;
bmc.graphicalConsoleConnectTypes =
@@ -21,7 +23,13 @@ const ChassisStore = {
bmc.health = data.Status.Health;
bmc.healthRollup = data.Status.HealthRollup;
bmc.id = data.Id;
+ bmc.lastResetTime = new Date(data.LastResetTime);
+ bmc.identifyLed = data.LocationIndicatorActive;
+ bmc.locationNumber = data.LocationNumber;
+ bmc.manufacturer = data.manufacturer;
+ bmc.managerType = data.ManagerType;
bmc.model = data.Model;
+ bmc.name = data.Name;
bmc.partNumber = data.PartNumber;
bmc.powerState = data.PowerState;
bmc.serialConsoleConnectTypes = data.SerialConsole.ConnectTypesSupported;
@@ -29,8 +37,10 @@ const ChassisStore = {
bmc.serialConsoleMaxSessions = data.SerialConsole.MaxConcurrentSessions;
bmc.serialNumber = data.SerialNumber;
bmc.serviceEntryPointUuid = data.ServiceEntryPointUUID;
+ bmc.sparePartNumber = data.SparePartNumber;
bmc.statusState = data.Status.State;
bmc.uuid = data.UUID;
+ bmc.uri = data['@odata.id'];
state.bmc = bmc;
},
},
@@ -41,7 +51,29 @@ const ChassisStore = {
.then(({ data }) => commit('setBmcInfo', data))
.catch((error) => console.log(error));
},
+ async updateIdentifyLedValue({ dispatch }, led) {
+ const uri = led.uri;
+ const updatedIdentifyLedValue = {
+ LocationIndicatorActive: led.identifyLed,
+ };
+ return await api
+ .patch(uri, updatedIdentifyLedValue)
+ .then(() => dispatch('getBmcInfo'))
+ .catch((error) => {
+ dispatch('getBmcInfo');
+ console.log('error', error);
+ if (led.identifyLed) {
+ throw new Error(
+ i18n.t('pageHardwareStatus.toast.errorEnableIdentifyLed')
+ );
+ } else {
+ throw new Error(
+ i18n.t('pageHardwareStatus.toast.errorDisableIdentifyLed')
+ );
+ }
+ });
+ },
},
};
-export default ChassisStore;
+export default BmcStore;
diff --git a/src/views/Health/HardwareStatus/HardwareStatusTableBmcManager.vue b/src/views/Health/HardwareStatus/HardwareStatusTableBmcManager.vue
index 2feced86..96736736 100644
--- a/src/views/Health/HardwareStatus/HardwareStatusTableBmcManager.vue
+++ b/src/views/Health/HardwareStatus/HardwareStatusTableBmcManager.vue
@@ -28,63 +28,101 @@
{{ value }}
</template>
+ <!-- Toggle identify LED -->
+ <template #cell(identifyLed)="row">
+ <b-form-checkbox
+ v-if="hasIdentifyLed(row.item.identifyLed)"
+ v-model="row.item.identifyLed"
+ name="switch"
+ switch
+ @change="toggleIdentifyLedValue(row.item)"
+ >
+ <span v-if="row.item.identifyLed">
+ {{ $t('global.status.on') }}
+ </span>
+ <span v-else> {{ $t('global.status.off') }} </span>
+ </b-form-checkbox>
+ <div v-else>--</div>
+ </template>
+
<template #row-details="{ item }">
<b-container fluid>
<b-row>
- <b-col sm="6">
+ <b-col class="mt-2" sm="6" xl="6">
<dl>
- <!-- Description -->
- <dt class="float-none">
- {{ $t('pageHardwareStatus.table.description') }}:
- </dt>
- <dd class="mb-4">
- {{ tableFormatter(item.description) }}
- </dd>
- <!-- Firmware version -->
- <dt class="float-none">
- {{ $t('pageHardwareStatus.table.firmwareVersion') }}:
- </dt>
- <dd class="mb-4">
- {{ tableFormatter(item.firmwareVersion) }}
- </dd>
+ <!-- Name -->
+ <dt>{{ $t('pageHardwareStatus.table.name') }}:</dt>
+ <dd>{{ tableFormatter(item.name) }}</dd>
+ <!-- Part number -->
+ <dt>{{ $t('pageHardwareStatus.table.partNumber') }}:</dt>
+ <dd>{{ tableFormatter(item.partNumber) }}</dd>
+ <!-- Serial number -->
+ <dt>{{ $t('pageHardwareStatus.table.serialNumber') }}:</dt>
+ <dd>{{ tableFormatter(item.serialNumber) }}</dd>
+ <!-- Spare part number -->
+ <dt>{{ $t('pageHardwareStatus.table.sparePartNumber') }}:</dt>
+ <dd>{{ tableFormatter(item.sparePartNumber) }}</dd>
+ <!-- Model -->
+ <dt>{{ $t('pageHardwareStatus.table.model') }}:</dt>
+ <dd>{{ tableFormatter(item.model) }}</dd>
+ <!-- UUID -->
+ <dt>{{ $t('pageHardwareStatus.table.uuid') }}:</dt>
+ <dd>{{ tableFormatter(item.uuid) }}</dd>
<!-- Service entry point UUID -->
- <dt class="float-none">
+ <dt>
{{ $t('pageHardwareStatus.table.serviceEntryPointUuid') }}:
</dt>
- <dd class="mb-4">
- {{ tableFormatter(item.serviceEntryPointUuid) }}
- </dd>
- <!-- UUID -->
- <dt class="float-none">
- {{ $t('pageHardwareStatus.table.uuid') }}:
- </dt>
- <dd class="mb-4">
- {{ tableFormatter(item.uuid) }}
- </dd>
+ <dd>{{ tableFormatter(item.serviceEntryPointUuid) }}</dd>
</dl>
</b-col>
- <b-col sm="6">
+ <b-col class="mt-2" sm="6" xl="6">
<dl>
+ <!-- Status state -->
+ <dt>{{ $t('pageHardwareStatus.table.statusState') }}:</dt>
+ <dd>{{ tableFormatter(item.statusState) }}</dd>
<!-- Power state -->
- <dt>{{ $t('pageHardwareStatus.table.powerState') }}:</dt>
+ <dt>{{ $t('pageHardwareStatus.table.power') }}:</dt>
<dd>{{ tableFormatter(item.powerState) }}</dd>
-
- <!-- Model -->
- <dt>{{ $t('pageHardwareStatus.table.model') }}:</dt>
- <dd>{{ tableFormatter(item.model) }}</dd>
-
<!-- Health rollup -->
- <dt>
- {{ $t('pageHardwareStatus.table.statusHealthRollup') }}:
- </dt>
+ <dt>{{ $t('pageHardwareStatus.table.healthRollup') }}:</dt>
<dd>{{ tableFormatter(item.healthRollup) }}</dd>
-
- <!-- Status state -->
- <dt>{{ $t('pageHardwareStatus.table.statusState') }}:</dt>
- <dd>{{ tableFormatter(item.statusState) }}</dd>
-
+ <!-- BMC date and time -->
+ <dt>{{ $t('pageHardwareStatus.table.bmcDateTime') }}:</dt>
+ <dd>
+ {{ item.dateTime | formatDate }}
+ {{ item.dateTime | formatTime }}
+ </dd>
+ <!-- Reset date and time -->
+ <dt>{{ $t('pageHardwareStatus.table.lastResetTime') }}:</dt>
+ <dd>
+ {{ item.lastResetTime | formatDate }}
+ {{ item.lastResetTime | formatTime }}
+ </dd>
+ </dl>
+ </b-col>
+ </b-row>
+ <div class="section-divider mb-3 mt-3"></div>
+ <b-row>
+ <b-col class="mt-2" sm="6" xl="6">
+ <dl>
+ <!-- Manufacturer -->
+ <dt>{{ $t('pageHardwareStatus.table.manufacturer') }}:</dt>
+ <dd>{{ tableFormatter(item.manufacturer) }}</dd>
+ <!-- Description -->
+ <dt>{{ $t('pageHardwareStatus.table.description') }}:</dt>
+ <dd>{{ tableFormatter(item.description) }}</dd>
+ <!-- Manager type -->
+ <dt>{{ $t('pageHardwareStatus.table.managerType') }}:</dt>
+ <dd>{{ tableFormatter(item.managerType) }}</dd>
+ </dl>
+ </b-col>
+ <b-col class="mt-2" sm="6" xl="6">
+ <dl>
+ <!-- Firmware Version -->
+ <dt>{{ $t('pageHardwareStatus.table.firmwareVersion') }}:</dt>
+ <dd>{{ item.firmwareVersion }}</dd>
<!-- Graphical console -->
- <dt class="font-weight-bold mt-3 mb-2 float-none">
+ <dt class="mt-1 mb-2 float-none">
{{ $t('pageHardwareStatus.table.graphicalConsole') }}
</dt>
<dt>
@@ -96,12 +134,15 @@
<dt>
{{ $t('pageHardwareStatus.table.maxConcurrentSessions') }}:
</dt>
- <dd>{{ tableFormatter(item.graphicalConsoleMaxSessions) }}</dd>
+ <dd>
+ {{ tableFormatter(item.graphicalConsoleMaxSessions) }}
+ </dd>
<dt>{{ $t('pageHardwareStatus.table.serviceEnabled') }}:</dt>
- <dd>{{ tableFormatter(item.graphicalConsoleEnabled) }}</dd>
-
+ <dd>
+ {{ tableFormatter(item.graphicalConsoleEnabled) }}
+ </dd>
<!-- Serial console -->
- <dt class="font-weight-bold mt-3 mb-2 float-none">
+ <dt class="mt-1 mb-2 float-none">
{{ $t('pageHardwareStatus.table.serialConsole') }}
</dt>
<dt>
@@ -128,9 +169,8 @@
<script>
import PageSection from '@/components/Global/PageSection';
import IconChevron from '@carbon/icons-vue/es/chevron--down/20';
-
import StatusIcon from '@/components/Global/StatusIcon';
-
+import BVToastMixin from '@/components/Mixins/BVToastMixin';
import TableRowExpandMixin, {
expandRowLabel,
} from '@/components/Mixins/TableRowExpandMixin';
@@ -138,7 +178,7 @@ import TableDataFormatterMixin from '@/components/Mixins/TableDataFormatterMixin
export default {
components: { IconChevron, PageSection, StatusIcon },
- mixins: [TableRowExpandMixin, TableDataFormatterMixin],
+ mixins: [BVToastMixin, TableRowExpandMixin, TableDataFormatterMixin],
data() {
return {
fields: [
@@ -156,16 +196,15 @@ export default {
key: 'health',
label: this.$t('pageHardwareStatus.table.health'),
formatter: this.tableFormatter,
- tdClass: 'text-nowrap',
},
{
- key: 'partNumber',
- label: this.$t('pageHardwareStatus.table.partNumber'),
+ key: 'locationNumber',
+ label: this.$t('pageHardwareStatus.table.locationNumber'),
formatter: this.tableFormatter,
},
{
- key: 'serialNumber',
- label: this.$t('pageHardwareStatus.table.serialNumber'),
+ key: 'identifyLed',
+ label: this.$t('pageHardwareStatus.table.identifyLed'),
formatter: this.tableFormatter,
},
],
@@ -190,5 +229,20 @@ export default {
this.$root.$emit('hardware-status-bmc-manager-complete');
});
},
+ methods: {
+ toggleIdentifyLedValue(row) {
+ this.$store
+ .dispatch('bmc/updateIdentifyLedValue', {
+ uri: row.uri,
+ identifyLed: row.identifyLed,
+ })
+ .catch(({ message }) => this.errorToast(message));
+ },
+ // TO DO: remove hasIdentifyLed method once the following story is merged:
+ // https://gerrit.openbmc-project.xyz/c/openbmc/bmcweb/+/43179
+ hasIdentifyLed(identifyLed) {
+ return typeof identifyLed === 'boolean';
+ },
+ },
};
</script>