2021-01-03 22:38:32 +09:00
|
|
|
<template>
|
|
|
|
<MkContainer :show-header="props.showHeader" :naked="props.transparent">
|
|
|
|
<template #header><Fa :icon="faServer"/>{{ $ts._widgets.serverMetric }}</template>
|
|
|
|
<template #func><button @click="toggleView()" class="_button"><Fa :icon="faSort"/></button></template>
|
|
|
|
|
|
|
|
<div class="mkw-serverMetric" v-if="meta">
|
|
|
|
<XCpuMemory v-if="props.view === 0" :connection="connection" :meta="meta"/>
|
|
|
|
<XNet v-if="props.view === 1" :connection="connection" :meta="meta"/>
|
|
|
|
<XCpu v-if="props.view === 2" :connection="connection" :meta="meta"/>
|
|
|
|
<XMemory v-if="props.view === 3" :connection="connection" :meta="meta"/>
|
|
|
|
<XDisk v-if="props.view === 4" :connection="connection" :meta="meta"/>
|
|
|
|
</div>
|
|
|
|
</MkContainer>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script lang="ts">
|
|
|
|
import { defineComponent } from 'vue';
|
|
|
|
import { faServer, faSort } from '@fortawesome/free-solid-svg-icons';
|
|
|
|
import define from '../define';
|
2021-03-23 17:30:14 +09:00
|
|
|
import MkContainer from '@client/components/ui/container.vue';
|
2021-01-03 22:38:32 +09:00
|
|
|
import XCpuMemory from './cpu-mem.vue';
|
|
|
|
import XNet from './net.vue';
|
|
|
|
import XCpu from './cpu.vue';
|
|
|
|
import XMemory from './mem.vue';
|
|
|
|
import XDisk from './disk.vue';
|
2021-03-23 17:30:14 +09:00
|
|
|
import * as os from '@client/os';
|
2021-01-03 22:38:32 +09:00
|
|
|
|
|
|
|
const widget = define({
|
|
|
|
name: 'serverMetric',
|
|
|
|
props: () => ({
|
|
|
|
showHeader: {
|
|
|
|
type: 'boolean',
|
|
|
|
default: true,
|
|
|
|
},
|
|
|
|
transparent: {
|
|
|
|
type: 'boolean',
|
|
|
|
default: false,
|
|
|
|
},
|
|
|
|
view: {
|
|
|
|
type: 'number',
|
|
|
|
default: 0,
|
|
|
|
hidden: true,
|
|
|
|
},
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
|
|
|
export default defineComponent({
|
|
|
|
extends: widget,
|
|
|
|
components: {
|
|
|
|
MkContainer,
|
|
|
|
XCpuMemory,
|
|
|
|
XNet,
|
|
|
|
XCpu,
|
|
|
|
XMemory,
|
|
|
|
XDisk,
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
meta: null,
|
|
|
|
connection: null,
|
|
|
|
faServer, faSort,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
created() {
|
|
|
|
os.api('server-info', {}).then(res => {
|
|
|
|
this.meta = res;
|
|
|
|
});
|
|
|
|
this.connection = os.stream.useSharedConnection('serverStats');
|
|
|
|
},
|
|
|
|
unmounted() {
|
|
|
|
this.connection.dispose();
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
toggleView() {
|
|
|
|
if (this.props.view == 4) {
|
|
|
|
this.props.view = 0;
|
|
|
|
} else {
|
|
|
|
this.props.view++;
|
|
|
|
}
|
|
|
|
this.save();
|
|
|
|
},
|
|
|
|
}
|
|
|
|
});
|
|
|
|
</script>
|