astrbbbb / dashboard /src /components /shared /WaitingForRestart.vue
qa1145's picture
Upload 1245 files
8ede856 verified
<template>
<v-dialog v-model="visible" persistent max-width="400">
<v-card>
<v-card-title>{{ t('core.common.restart.waiting') }}</v-card-title>
<v-card-text>
<v-progress-linear indeterminate color="primary"></v-progress-linear>
</v-card-text>
</v-card>
</v-dialog>
</template>
<script>
import axios from 'axios'
import { useCommonStore } from '@/stores/common';
import { useI18n } from '@/i18n/composables';
export default {
name: 'WaitingForRestart',
setup() {
const { t } = useI18n();
return { t };
},
data() {
return {
visible: false,
startTime: -1,
newStartTime: -1,
status: '',
cnt: 0,
}
},
methods: {
async check(initialStartTime = null) {
this.newStartTime = -1
this.cnt = 0
this.visible = true
this.status = ""
if (typeof initialStartTime === 'number' && Number.isFinite(initialStartTime)) {
this.startTime = initialStartTime
} else {
const commonStore = useCommonStore()
try {
this.startTime = await commonStore.fetchStartTime()
} catch (_error) {
this.startTime = commonStore.getStartTime()
}
}
console.log('start wfr')
setTimeout(() => {
this.timeoutInternal()
}, 1000)
},
stop() {
this.visible = false
this.cnt = 0
this.newStartTime = -1
},
timeoutInternal() {
console.log('wfr: timeoutInternal', this.newStartTime, this.startTime)
if (this.newStartTime === -1 && this.cnt < 60 && this.visible) {
this.checkStartTime()
this.cnt++
setTimeout(() => {
this.timeoutInternal()
}, 1000)
} else {
if (this.cnt >= 60) {
this.status = this.t('core.common.restart.maxRetriesReached')
}
this.cnt = 0
setTimeout(() => {
this.visible = false
}, 1000)
}
},
async checkStartTime() {
try {
let res = await axios.get('/api/stat/start-time', { timeout: 3000 })
let newStartTime = res.data.data.start_time
console.log('wfr: checkStartTime', newStartTime, this.startTime)
if (this.startTime !== -1 && newStartTime !== this.startTime) {
this.newStartTime = newStartTime
console.log('wfr: restarted')
this.visible = false
// reload
window.location.reload()
}
} catch (_error) {
// backend may be unavailable during restart window
}
return this.newStartTime
}
}
}
</script>