feat: redis erchat
parent
fe72d10ff2
commit
4816bf8faa
|
@ -0,0 +1,51 @@
|
|||
<template>
|
||||
<Card title="命令统计" :loading="loading">
|
||||
<div ref="chartRef" :style="{ width, height }"></div>
|
||||
</Card>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { Ref, ref, watch } from 'vue'
|
||||
import { Card } from 'ant-design-vue'
|
||||
import { useECharts } from '@/hooks/web/useECharts'
|
||||
import { propTypes } from '@/utils/propTypes'
|
||||
|
||||
const props = defineProps({
|
||||
loading: Boolean,
|
||||
commandStats: propTypes.array,
|
||||
width: propTypes.string.def('100%'),
|
||||
height: propTypes.string.def('300px')
|
||||
})
|
||||
|
||||
const chartRef = ref<HTMLDivElement | null>(null)
|
||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||
|
||||
const optionsData = ref<any[]>(props.commandStats)
|
||||
|
||||
watch(
|
||||
() => props.loading,
|
||||
() => {
|
||||
if (props.loading) {
|
||||
return
|
||||
}
|
||||
setOptions({
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: '{a} <br/>{b} : {c} ({d}%)'
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '命令',
|
||||
type: 'pie',
|
||||
roseType: 'radius',
|
||||
radius: [15, 95],
|
||||
center: ['50%', '38%'],
|
||||
data: optionsData.value,
|
||||
animationEasing: 'cubicInOut',
|
||||
animationDuration: 1000
|
||||
}
|
||||
]
|
||||
})
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
</script>
|
|
@ -0,0 +1,55 @@
|
|||
<template>
|
||||
<Card title="内存信息" :loading="loading">
|
||||
<div ref="chartRef" :style="{ width, height }"></div>
|
||||
</Card>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { Ref, ref, watch } from 'vue'
|
||||
import { Card } from 'ant-design-vue'
|
||||
import { useECharts } from '@/hooks/web/useECharts'
|
||||
import { propTypes } from '@/utils/propTypes'
|
||||
|
||||
const props = defineProps({
|
||||
loading: Boolean,
|
||||
cacheInfo: propTypes.object,
|
||||
width: propTypes.string.def('100%'),
|
||||
height: propTypes.string.def('300px')
|
||||
})
|
||||
|
||||
const chartRef = ref<HTMLDivElement | null>(null)
|
||||
const { setOptions } = useECharts(chartRef as Ref<HTMLDivElement>)
|
||||
|
||||
const optionsData = ref<any>(props.cacheInfo)
|
||||
|
||||
watch(
|
||||
() => props.loading,
|
||||
() => {
|
||||
if (props.loading) {
|
||||
return
|
||||
}
|
||||
setOptions({
|
||||
tooltip: {
|
||||
formatter: '{b} <br/>{a} : ' + optionsData.value.used_memory_human
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '峰值',
|
||||
type: 'gauge',
|
||||
min: 0,
|
||||
max: 1000,
|
||||
detail: {
|
||||
formatter: optionsData.value.used_memory_human
|
||||
},
|
||||
data: [
|
||||
{
|
||||
value: parseFloat(optionsData.value.used_memory_human),
|
||||
name: '内存消耗'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
</script>
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="p-4">
|
||||
<Description
|
||||
title="基础信息"
|
||||
:collapseOptions="{ canExpand: true, helpMessage: 'Redis 基本信息' }"
|
||||
|
@ -7,23 +7,34 @@
|
|||
:data="cacheInfo"
|
||||
:schema="baseInfoSchema"
|
||||
/>
|
||||
<div class="md:flex enter-y mt-4">
|
||||
<CommandStats class="md:w-1/2 w-full" :loading="loading" :commandStats="commandStats" />
|
||||
<Memory class="md:w-1/2 !md:mx-4 !md:my-0 !my-4 w-full" :loading="loading" :cacheInfo="cacheInfo" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="Redis">
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { Description } from '@/components/Description'
|
||||
import { baseInfoSchema } from './redis.data'
|
||||
// import { getCache, getKeyDefineList, getKeyList, getKeyValue, deleteKey, deleteKeys } from '@/api/infra/redis'
|
||||
import { getCache } from '@/api/infra/redis'
|
||||
import { ref } from 'vue'
|
||||
import { onMounted } from 'vue'
|
||||
import { createAsyncComponent } from '@/utils/factory/createAsyncComponent'
|
||||
|
||||
const cacheInfo = ref()
|
||||
const commandStats = ref()
|
||||
const CommandStats = createAsyncComponent(() => import('./components/CommandStats.vue'))
|
||||
const Memory = createAsyncComponent(() => import('./components/Memory.vue'))
|
||||
|
||||
const loading = ref(true)
|
||||
const cacheInfo = ref<any>()
|
||||
const commandStats = ref<any[]>([])
|
||||
|
||||
async function getList() {
|
||||
const res = await getCache()
|
||||
cacheInfo.value = res.info
|
||||
commandStats.value = res.commandStats
|
||||
await res.commandStats.forEach((val) => {
|
||||
commandStats.value.push({ name: val.command, value: val.calls })
|
||||
})
|
||||
loading.value = false
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
|
|
Loading…
Reference in New Issue