diff options
Diffstat (limited to 'src/views')
-rw-r--r-- | src/views/Control/ServerPowerOperations/ServerPowerOperations.vue | 184 | ||||
-rw-r--r-- | src/views/Control/ServerPowerOperations/index.js | 2 |
2 files changed, 186 insertions, 0 deletions
diff --git a/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue b/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue new file mode 100644 index 00000000..c9b02b3e --- /dev/null +++ b/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue @@ -0,0 +1,184 @@ +<template> + <b-container fluid> + <page-title /> + <b-row> + <b-col md="8" lg="8" xl="6"> + <page-section + :section-title="$t('pageServerPowerOperations.currentStatus')" + > + <dl> + <dt>{{ $t('pageServerPowerOperations.hostname') }}</dt> + <dd>{{ hostname }}</dd> + </dl> + <dl> + <dt>{{ $t('pageServerPowerOperations.hostStatus') }}</dt> + <dd v-if="hostStatus === 'on'"> + {{ $t('global.status.on') }} + </dd> + <dd v-else-if="hostStatus === 'off'"> + {{ $t('global.status.off') }} + </dd> + <dd v-else> + {{ $t('global.status.notAvailable') }} + </dd> + </dl> + </page-section> + </b-col> + </b-row> + <b-row> + <b-col md="8" lg="7" xl="8"> + <page-section + :section-title="$t('pageServerPowerOperations.operations')" + > + <template v-if="isOperationInProgress"> + {{ $t('pageServerPowerOperations.operationInProgress') }} + </template> + <template v-else-if="hostStatus === 'off'"> + <b-button variant="primary" @click="powerOn"> + {{ $t('pageServerPowerOperations.powerOn') }} + </b-button> + </template> + <template v-else-if="hostStatus === 'on'"> + <!-- 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" + value="orderly" + > + {{ $t('pageServerPowerOperations.orderlyReboot') }} + </b-form-radio> + <b-form-radio + v-model="form.rebootOption" + name="reboot-option" + value="immediate" + > + {{ $t('pageServerPowerOperations.immediateReboot') }} + </b-form-radio> + </b-form-group> + <b-button variant="primary" type="submit"> + {{ $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" + value="orderly" + > + {{ $t('pageServerPowerOperations.orderlyShutdown') }} + </b-form-radio> + <b-form-radio + v-model="form.shutdownOption" + name="shutdown-option" + value="immediate" + > + {{ $t('pageServerPowerOperations.immediateShutdown') }} + </b-form-radio> + </b-form-group> + <b-button variant="primary" type="submit"> + {{ $t('pageServerPowerOperations.shutDown') }} + </b-button> + </b-form> + </template> + <template v-else> + {{ $t('global.status.notAvailable') }} + </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'; + +export default { + name: 'ServerPowerOperations', + components: { PageTitle, PageSection }, + mixins: [BVToastMixin], + data() { + return { + form: { + rebootOption: 'orderly', + shutdownOption: 'orderly' + } + }; + }, + computed: { + hostStatus() { + return this.$store.getters['global/hostStatus']; + }, + hostname() { + return this.$store.getters['global/hostName']; + }, + isOperationInProgress() { + return this.$store.getters['controls/isOperationInProgress']; + } + }, + created() { + this.$store.dispatch('global/getHostName'); + }, + methods: { + powerOn() { + this.$store.dispatch('controls/hostPowerOn'); + }, + rebootServer() { + const modalMessage = this.$t( + 'pageServerPowerOperations.modal.confirmRebootMessage' + ); + const modalOptions = { + title: this.$t('pageServerPowerOperations.modal.confirmRebootTitle'), + okTitle: this.$t('global.action.confirm') + }; + + if (this.form.rebootOption === 'orderly') { + this.$bvModal + .msgBoxConfirm(modalMessage, modalOptions) + .then(confirmed => { + if (confirmed) this.$store.dispatch('controls/hostSoftReboot'); + }); + } else if (this.form.rebootOption === 'immediate') { + this.$bvModal + .msgBoxConfirm(modalMessage, modalOptions) + .then(confirmed => { + if (confirmed) this.$store.dispatch('controls/hostHardReboot'); + }); + } + }, + shutdownServer() { + const modalMessage = this.$t( + 'pageServerPowerOperations.modal.confirmShutdownMessage' + ); + const modalOptions = { + title: this.$t('pageServerPowerOperations.modal.confirmShutdownTitle'), + okTitle: this.$t('global.action.confirm') + }; + + if (this.form.shutdownOption === 'orderly') { + this.$bvModal + .msgBoxConfirm(modalMessage, modalOptions) + .then(confirmed => { + if (confirmed) this.$store.dispatch('controls/hostSoftPowerOff'); + }); + } + if (this.form.shutdownOption === 'immediate') { + this.$bvModal + .msgBoxConfirm(modalMessage, modalOptions) + .then(confirmed => { + if (confirmed) this.$store.dispatch('controls/hostHardPowerOff'); + }); + } + } + } +}; +</script> diff --git a/src/views/Control/ServerPowerOperations/index.js b/src/views/Control/ServerPowerOperations/index.js new file mode 100644 index 00000000..10430047 --- /dev/null +++ b/src/views/Control/ServerPowerOperations/index.js @@ -0,0 +1,2 @@ +import ServerPowerOperations from './ServerPowerOperations.vue'; +export default ServerPowerOperations; |