| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- <template lang='pug'>
- q-page.admin-system
- .row.q-pa-md.items-center
- .col-auto
- img.admin-icon.animated.fadeInLeft(src='/_assets/icons/fluent-processor.svg')
- .col.q-pl-md
- .text-h5.text-primary.animated.fadeInLeft {{ t('admin.system.title') }}
- .text-subtitle1.text-grey.animated.fadeInLeft.wait-p2s {{ t('admin.system.subtitle') }}
- .col-auto
- q-btn.q-mr-sm.acrylic-btn(
- icon='las la-question-circle'
- flat
- color='grey'
- :href='siteStore.docsBase + `/system/`'
- target='_blank'
- type='a'
- )
- q-btn.q-mr-sm.acrylic-btn(
- icon='las la-redo-alt'
- flat
- color='secondary'
- :loading='state.loading > 0'
- @click='load'
- )
- q-btn.acrylic-btn(
- ref='copySysInfoBtn'
- flat
- icon='fa-regular fa-clipboard'
- label='Copy System Info'
- color='primary'
- @click=''
- :disabled='state.loading > 0'
- )
- q-separator(inset)
- .row.q-pa-md.q-col-gutter-md
- .col-6
- //- -----------------------
- //- WIKI.JS
- //- -----------------------
- q-card.q-pb-sm.shadow-1
- q-card-section
- .text-subtitle1 Wiki.js
- q-item
- blueprint-icon(icon='breakable', :hue-rotate='-45')
- q-item-section
- q-item-label {{ t('admin.system.currentVersion') }}
- q-item-label(caption) {{t('admin.system.currentVersionHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ state.info.currentVersion }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='cloud-checked', :hue-rotate='-45')
- q-item-section
- q-item-label {{ t('admin.system.latestVersion') }}
- q-item-label(caption) {{t('admin.system.latestVersionHint')}}
- q-item-section
- .row.q-col-gutter-sm
- .col
- .dark-value(caption) {{ state.info.latestVersion }}
- .col-auto
- q-btn.acrylic-btn(
- flat
- color='purple'
- @click='checkForUpdates'
- :label='t(`admin.system.checkUpdate`)'
- )
- //- -----------------------
- //- CLIENT
- //- -----------------------
- q-no-ssr
- q-card.q-mt-md.q-pb-sm.shadow-1
- q-card-section
- .text-subtitle1 {{t('admin.system.client')}}
- q-item
- blueprint-icon(icon='navigation-toolbar-top', :hue-rotate='-45')
- q-item-section
- q-item-label {{t('admin.system.browser')}}
- q-item-label(caption) {{t('admin.system.browserHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ clientBrowser }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='computer', :hue-rotate='-45')
- q-item-section
- q-item-label {{t('admin.system.clientPlatform')}}
- q-item-label(caption) {{t('admin.system.clientPlatformHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ clientPlatform }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='translation', :hue-rotate='-45')
- q-item-section
- q-item-label {{t('admin.system.clientLanguage')}}
- q-item-label(caption) {{t('admin.system.clientLanguageHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ clientLanguage }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='cookies', :hue-rotate='-45')
- q-item-section
- q-item-label {{t('admin.system.clientCookies')}}
- q-item-label(caption) {{t('admin.system.clientCookiesHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ clientCookies }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='widescreen', :hue-rotate='-45')
- q-item-section
- q-item-label {{t('admin.system.clientViewport')}}
- q-item-label(caption) {{t('admin.system.clientViewportHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ clientViewport }}
- .col-6
- //- -----------------------
- //- ENGINES
- //- -----------------------
- q-card.q-pb-sm.shadow-1
- q-card-section
- .text-subtitle1 {{t('admin.system.engines')}}
- q-item
- blueprint-icon(icon='nodejs', :hue-rotate='-45')
- q-item-section
- q-item-label Node.js
- q-item-label(caption) {{t('admin.system.nodejsHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ state.info.nodeVersion }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='postgresql', :hue-rotate='-45')
- q-item-section
- q-item-label {{t('admin.system.database')}}
- q-item-label(caption) {{t('admin.system.databaseHint')}}
- q-item-section
- q-item-label.dark-value(caption) PostgreSQL {{dbVersion}}
- q-separator(inset)
- q-item
- blueprint-icon(icon='database', :hue-rotate='-45')
- q-item-section
- q-item-label {{t('admin.system.databaseHost')}}
- q-item-label(caption) {{t('admin.system.databaseHostHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ state.info.dbHost }}
- //- -----------------------
- //- HOST INFORMATION
- //- -----------------------
- q-card.q-mt-md.q-pb-sm.shadow-1
- q-card-section
- .text-subtitle1 {{ t('admin.system.hostInfo') }}
- q-item
- blueprint-icon(:icon='platformLogo', :hue-rotate='-45')
- q-item-section
- q-item-label {{ t('admin.system.os') }}
- q-item-label(caption) {{t('admin.system.osHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ (state.info.platform === 'docker') ? 'Docker Container (Linux)' : state.info.operatingSystem }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='server', :hue-rotate='-45')
- q-item-section
- q-item-label {{ t('admin.system.hostname') }}
- q-item-label(caption) {{t('admin.system.hostnameHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ state.info.hostname }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='processor', :hue-rotate='-45')
- q-item-section
- q-item-label {{ t('admin.system.cpuCores') }}
- q-item-label(caption) {{t('admin.system.cpuCoresHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ state.info.cpuCores }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='memory-slot', :hue-rotate='-45')
- q-item-section
- q-item-label {{ t('admin.system.totalRAM') }}
- q-item-label(caption) {{t('admin.system.totalRAMHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ state.info.ramTotal }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='program', :hue-rotate='-45')
- q-item-section
- q-item-label {{ t('admin.system.workingDirectory') }}
- q-item-label(caption) {{t('admin.system.workingDirectoryHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ state.info.workingDirectory }}
- q-separator(inset)
- q-item
- blueprint-icon(icon='automation', :hue-rotate='-45')
- q-item-section
- q-item-label {{ t('admin.system.configFile') }}
- q-item-label(caption) {{t('admin.system.configFileHint')}}
- q-item-section
- q-item-label.dark-value(caption) {{ state.info.configFile }}
- //- v-list-item-action-text {{ t('admin.system.published') }} {{ state.info.latestVersionReleaseDate | moment('from') }}
- //- v-card-actions(v-if='info.upgradeCapable && !isLatestVersion && info.platform === `docker`', :class='$vuetify.theme.dark ? `grey darken-3-d5` : `indigo lighten-5`')
- //- .caption.indigo--text.pl-3(:class='$vuetify.theme.dark ? `text--lighten-4` : ``') Wiki.js can perform the upgrade to the latest version for you.
- //- v-spacer
- //- v-btn.px-3(
- //- color='indigo'
- //- dark
- //- @click='performUpgrade'
- //- )
- //- v-icon(left) mdi-upload
- //- span Perform Upgrade
- //- v-dialog(
- //- v-model='isUpgrading'
- //- persistent
- //- width='450'
- //- )
- //- v-card.blue.darken-5(dark)
- //- v-card-text.text-center.pa-10
- //- self-building-square-spinner(
- //- :animation-duration='4000'
- //- :size='40'
- //- color='#FFF'
- //- style='margin: 0 auto;'
- //- )
- //- .body-2.mt-5.blue--text.text--lighten-4 Your Wiki.js container is being upgraded...
- //- .caption.blue--text.text--lighten-2 Please wait
- //- v-progress-linear.mt-5(
- //- color='blue lighten-2'
- //- :value='upgradeProgress'
- //- :buffer-value='upgradeProgress'
- //- rounded
- //- :stream='isUpgradingStarted'
- //- query
- //- :indeterminate='!isUpgradingStarted'
- //- )
- </template>
- <script setup>
- import { cloneDeep } from 'lodash-es'
- import gql from 'graphql-tag'
- import { useI18n } from 'vue-i18n'
- import { useMeta, useQuasar } from 'quasar'
- import { computed, onMounted, reactive, ref, watch } from 'vue'
- import ClipboardJS from 'clipboard'
- import { useSiteStore } from 'src/stores/site'
- import CheckUpdateDialog from '../components/CheckUpdateDialog.vue'
- // QUASAR
- const $q = useQuasar()
- // STORES
- const siteStore = useSiteStore()
- // I18N
- const { t } = useI18n()
- // META
- useMeta({
- title: t('admin.system.title')
- })
- // DATA
- const state = reactive({
- clip: null,
- loading: 0,
- isUpgrading: false,
- isUpgradingStarted: false,
- upgradeProgress: 0,
- info: {
- platform: ''
- }
- })
- // REFS
- const copySysInfoBtn = ref(null)
- // COMPUTED
- const dbVersion = computed(() => {
- return state.info?.dbVersion?.replace(/(?:\r\n|\r|\n)/g, ', ')
- })
- const platformLogo = computed(() => {
- switch (state.info.platform) {
- case 'docker':
- return 'docker-container'
- case 'darwin':
- return 'apple-logo'
- case 'linux':
- if (this.info.operatingSystem.indexOf('Ubuntu') >= 0) {
- return 'ubuntu'
- } else {
- return 'linux'
- }
- case 'win32':
- return 'windows8'
- default:
- return 'washing-machine'
- }
- })
- const isLatestVersion = computed(() => {
- return state.info.currentVersion === state.info.latestVersion
- })
- const clientBrowser = computed(() => {
- return !import.meta.env.SSR ? navigator.userAgent : ''
- })
- const clientPlatform = computed(() => {
- return !import.meta.env.SSR ? navigator.platform : ''
- })
- const clientLanguage = computed(() => {
- return !import.meta.env.SSR ? navigator.language : ''
- })
- const clientCookies = computed(() => {
- return !import.meta.env.SSR ? navigator.cookieEnabled : ''
- })
- const clientViewport = computed(() => {
- return !import.meta.env.SSR ? `${document.documentElement.clientWidth}x${document.documentElement.clientHeight}` : ''
- })
- // METHODS
- async function load () {
- state.loading++
- $q.loading.show()
- const resp = await APOLLO_CLIENT.query({
- query: gql`
- query getSystemInfo {
- systemInfo {
- configFile
- cpuCores
- currentVersion
- dbHost
- dbVersion
- hostname
- latestVersion
- latestVersionReleaseDate
- nodeVersion
- operatingSystem
- platform
- ramTotal
- upgradeCapable
- workingDirectory
- }
- }
- `,
- fetchPolicy: 'network-only'
- })
- state.info = cloneDeep(resp?.data?.systemInfo)
- $q.loading.hide()
- state.loading--
- }
- function checkForUpdates () {
- $q.dialog({
- component: CheckUpdateDialog
- })
- }
- // async function performUpgrade () {
- // state.isUpgrading = true
- // state.isUpgradingStarted = false
- // state.upgradeProgress = 0
- // this.$store.commit('loadingStart', 'admin-system-upgrade')
- // try {
- // const respRaw = await APOLLO_CLIENT.mutate({
- // mutation: gql`
- // mutation performUpdate {
- // system {
- // performUpgrade {
- // responseResult {
- // succeeded
- // errorCode
- // slug
- // message
- // }
- // }
- // }
- // }
- // `
- // })
- // const resp = _get(respRaw, 'data.system.performUpgrade.responseResult', {})
- // if (resp.succeeded) {
- // this.isUpgradingStarted = true
- // const progressInterval = setInterval(() => {
- // this.upgradeProgress += 0.83
- // }, 500)
- // setTimeout(() => {
- // clearInterval(progressInterval)
- // window.location.reload(true)
- // }, 60000)
- // } else {
- // throw new Error(resp.message)
- // }
- // } catch (err) {
- // this.$store.commit('pushGraphError', err)
- // this.$store.commit('loadingStop', 'admin-system-upgrade')
- // this.isUpgrading = false
- // }
- // }
- // MOUNTED
- onMounted(() => {
- load()
- const clip = new ClipboardJS(copySysInfoBtn.value.$el, {
- text: () => {
- return `Wiki.js ${state.info.currentVersion}
- Postgres ${dbVersion.value}
- Node.js ${state.info.nodeVersion}
- OS: ${state.info.operatingSystem}
- Platform: ${state.info.platform}
- CPU Cores: ${state.info.cpuCores}
- Total RAM: ${state.info.ramTotal}`
- }
- })
- clip.on('success', () => {
- $q.notify({
- type: 'positive',
- message: 'Info copied successfully',
- icon: 'las la-clipboard'
- })
- })
- clip.on('error', () => {
- $q.notify({
- type: 'negative',
- message: 'Failed to copy to system info'
- })
- })
- })
- </script>
- <style lang='scss'>
- .admin-system {
- .v-list-item-title, .v-list-item__subtitle {
- user-select: text;
- }
- .dark-value {
- background-color: #F8F8F8;
- color: #333;
- padding: 8px 12px;
- border-radius: 4px;
- font-family: 'Roboto Mono', Consolas, "Liberation Mono", Courier, monospace;
- }
- }
- </style>
|