blob: 281bbef46e03befd82457aeadbe5248882093cd9 [file] [log] [blame]
<template>
<b-container fluid="xl">
<page-title />
<b-row class="mb-4">
<b-col md="8" xl="6">
<page-section
:section-title="$t('pageServerPowerOperations.currentStatus')"
>
<b-row>
<b-col>
<dl>
<dt>{{ $t('pageServerPowerOperations.serverStatus') }}</dt>
<dd
v-if="serverStatus === 'on'"
data-test-id="powerServerOps-text-hostStatus"
>
{{ $t('global.status.on') }}
</dd>
<dd
v-else-if="serverStatus === 'off'"
data-test-id="powerServerOps-text-hostStatus"
>
{{ $t('global.status.off') }}
</dd>
<dd
v-else-if="serverStatus === 'diagnosticMode'"
data-test-id="powerServerOps-text-hostStatus"
>
{{ $t('global.status.diagnosticMode') }}
</dd>
<dd v-else>
{{ $t('global.status.notAvailable') }}
</dd>
</dl>
</b-col>
</b-row>
<b-row>
<b-col>
<dl>
<dt>
{{ $t('pageServerPowerOperations.lastPowerOperation') }}
</dt>
<dd
v-if="lastPowerOperationTime"
data-test-id="powerServerOps-text-lastPowerOp"
>
{{ lastPowerOperationTime | formatDate }}
{{ lastPowerOperationTime | formatTime }}
</dd>
<dd v-else>--</dd>
</dl>
</b-col>
</b-row>
</page-section>
</b-col>
</b-row>
<b-row>
<b-col v-if="hasBootSourceOptions" sm="8" md="6" xl="4">
<page-section
:section-title="$t('pageServerPowerOperations.serverBootSettings')"
>
<boot-settings />
</page-section>
</b-col>
<b-col sm="8" md="6" xl="7">
<page-section
:section-title="$t('pageServerPowerOperations.operations')"
>
<alert :show="oneTimeBootEnabled" variant="warning">
{{ $t('pageServerPowerOperations.oneTimeBootWarning') }}
</alert>
<template v-if="isOperationInProgress">
<alert variant="info">
{{ $t('pageServerPowerOperations.operationInProgress') }}
</alert>
</template>
<template v-else-if="serverStatus === 'off'">
<b-button
variant="primary"
data-test-id="serverPowerOperations-button-powerOn"
@click="powerOn"
>
{{ $t('pageServerPowerOperations.powerOn') }}
</b-button>
</template>
<template v-else>
<!-- Reboot server options -->
<b-form novalidate class="mb-5" @submit.prevent="rebootServer">
<b-form-group
:label="$t('pageServerPowerOperations.rebootServer')"
>
<b-form-radio
v-model="form.rebootOption"
name="reboot-option"
data-test-id="serverPowerOperations-radio-rebootOrderly"
value="orderly"
>
{{ $t('pageServerPowerOperations.orderlyReboot') }}
</b-form-radio>
<b-form-radio
v-model="form.rebootOption"
name="reboot-option"
data-test-id="serverPowerOperations-radio-rebootImmediate"
value="immediate"
>
{{ $t('pageServerPowerOperations.immediateReboot') }}
</b-form-radio>
</b-form-group>
<b-button
variant="primary"
type="submit"
data-test-id="serverPowerOperations-button-reboot"
>
{{ $t('pageServerPowerOperations.reboot') }}
</b-button>
</b-form>
<!-- Shutdown server options -->
<b-form novalidate @submit.prevent="shutdownServer">
<b-form-group
:label="$t('pageServerPowerOperations.shutdownServer')"
>
<b-form-radio
v-model="form.shutdownOption"
name="shutdown-option"
data-test-id="serverPowerOperations-radio-shutdownOrderly"
value="orderly"
>
{{ $t('pageServerPowerOperations.orderlyShutdown') }}
</b-form-radio>
<b-form-radio
v-model="form.shutdownOption"
name="shutdown-option"
data-test-id="serverPowerOperations-radio-shutdownImmediate"
value="immediate"
>
{{ $t('pageServerPowerOperations.immediateShutdown') }}
</b-form-radio>
</b-form-group>
<b-button
variant="primary"
type="submit"
data-test-id="serverPowerOperations-button-shutDown"
>
{{ $t('pageServerPowerOperations.shutDown') }}
</b-button>
</b-form>
</template>
</page-section>
</b-col>
</b-row>
</b-container>
</template>
<script>
import PageTitle from '@/components/Global/PageTitle';
import PageSection from '@/components/Global/PageSection';
import BVToastMixin from '@/components/Mixins/BVToastMixin';
import BootSettings from './BootSettings';
import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
import Alert from '@/components/Global/Alert';
export default {
name: 'ServerPowerOperations',
components: { PageTitle, PageSection, BootSettings, Alert },
mixins: [BVToastMixin, LoadingBarMixin],
beforeRouteLeave(to, from, next) {
this.hideLoader();
next();
},
data() {
return {
form: {
rebootOption: 'orderly',
shutdownOption: 'orderly',
},
};
},
computed: {
serverStatus() {
return this.$store.getters['global/serverStatus'];
},
isOperationInProgress() {
return this.$store.getters['controls/isOperationInProgress'];
},
lastPowerOperationTime() {
return this.$store.getters['controls/lastPowerOperationTime'];
},
oneTimeBootEnabled() {
return this.$store.getters['serverBootSettings/overrideEnabled'];
},
hasBootSourceOptions() {
let bootOptions =
this.$store.getters['serverBootSettings/bootSourceOptions'];
return bootOptions.length !== 0;
},
},
created() {
this.startLoader();
const bootSettingsPromise = new Promise((resolve) => {
this.$root.$on('server-power-operations-boot-settings-complete', () =>
resolve(),
);
});
Promise.all([
this.$store.dispatch('serverBootSettings/getBootSettings'),
this.$store.dispatch('controls/getLastPowerOperationTime'),
bootSettingsPromise,
]).finally(() => this.endLoader());
},
methods: {
powerOn() {
this.$store.dispatch('controls/serverPowerOn');
},
rebootServer() {
const modalMessage = this.$t(
'pageServerPowerOperations.modal.confirmRebootMessage',
);
const modalOptions = {
title: this.$t('pageServerPowerOperations.modal.confirmRebootTitle'),
okTitle: this.$t('global.action.confirm'),
cancelTitle: this.$t('global.action.cancel'),
autoFocusButton: 'ok',
};
if (this.form.rebootOption === 'orderly') {
this.$bvModal
.msgBoxConfirm(modalMessage, modalOptions)
.then((confirmed) => {
if (confirmed) this.$store.dispatch('controls/serverSoftReboot');
});
} else if (this.form.rebootOption === 'immediate') {
this.$bvModal
.msgBoxConfirm(modalMessage, modalOptions)
.then((confirmed) => {
if (confirmed) this.$store.dispatch('controls/serverHardReboot');
});
}
},
shutdownServer() {
const modalMessage = this.$t(
'pageServerPowerOperations.modal.confirmShutdownMessage',
);
const modalOptions = {
title: this.$t('pageServerPowerOperations.modal.confirmShutdownTitle'),
okTitle: this.$t('global.action.confirm'),
cancelTitle: this.$t('global.action.cancel'),
autoFocusButton: 'ok',
};
if (this.form.shutdownOption === 'orderly') {
this.$bvModal
.msgBoxConfirm(modalMessage, modalOptions)
.then((confirmed) => {
if (confirmed) this.$store.dispatch('controls/serverSoftPowerOff');
});
}
if (this.form.shutdownOption === 'immediate') {
this.$bvModal
.msgBoxConfirm(modalMessage, modalOptions)
.then((confirmed) => {
if (confirmed) this.$store.dispatch('controls/serverHardPowerOff');
});
}
},
},
};
</script>