| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- <template>
- <div class="p-4">
- <a-card>
- <!-- Redis 信息实时监控 -->
- <a-row :gutter="8">
- <a-col :sm="24" :xl="12">
- <div ref="chartRef" style="width: 100%; height: 300px"></div>
- </a-col>
- <a-col :sm="24" :xl="12">
- <div ref="chartRef2" style="width: 100%; height: 300px"></div>
- </a-col>
- </a-row>
- </a-card>
- <BasicTable @register="registerTable" :api="getInfo" />
- </div>
- </template>
- <script lang="ts" name="monitor-redis" setup>
- import { onMounted, ref, reactive, Ref, onUnmounted } from 'vue';
- import { BasicTable, useTable, TableAction } from '/@/components/Table';
- import { getInfo, getRedisInfo } from './redis.api';
- import dayjs from 'dayjs';
- import { columns } from './redis.data';
- import { useMessage } from '/@/hooks/web/useMessage';
- import { useECharts } from '/@/hooks/web/useECharts';
- const dataSource = ref([]);
- const chartRef = ref<HTMLDivElement | null>(null);
- const chartRef2 = ref<HTMLDivElement | null>(null);
- const { setOptions, echarts } = useECharts(chartRef as Ref<HTMLDivElement>);
- const { setOptions: setOptions2, echarts: echarts2 } = useECharts(chartRef2 as Ref<HTMLDivElement>);
- const loading = ref(false);
- let timer = null;
- const { createMessage } = useMessage();
- const key = reactive({
- title: {
- text: 'Redis Key 实时数量(个)',
- },
- xAxis: {
- type: 'category',
- boundaryGap: false,
- data: [],
- },
- yAxis: {
- type: 'value',
- },
- series: [
- {
- data: [],
- type: 'line',
- areaStyle: {
- color: '#ff6987',
- },
- lineStyle: {
- color: '#dc143c',
- width: 10,
- type: 'solid',
- },
- },
- ],
- });
- const memory = reactive({
- title: {
- text: 'Redis 内存实时占用情况(KB)',
- },
- xAxis: {
- type: 'category',
- boundaryGap: false,
- data: [],
- },
- yAxis: {
- type: 'value',
- },
- series: [
- {
- data: [],
- type: 'line',
- areaStyle: {
- color: '#74bcff',
- },
- lineStyle: {
- color: '#1890ff',
- width: 10,
- type: 'solid',
- },
- },
- ],
- });
- const [registerTable, { reload }] = useTable({
- columns,
- showIndexColumn: false,
- pagination: false,
- bordered: true,
- });
- // 获取一组数据中最大和最小的值
- function getMaxAndMin(dataSource, field) {
- let maxValue = null,
- minValue = null;
- dataSource.forEach((item) => {
- let value = Number.parseInt(item[field]);
- // max
- if (maxValue == null) {
- maxValue = value;
- } else if (value > maxValue) {
- maxValue = value;
- }
- // min
- if (minValue == null) {
- minValue = value;
- } else if (value < minValue) {
- minValue = value;
- }
- });
- return [maxValue, minValue];
- }
- function loadRedisInfo() {
- getInfo().then((res) => {
- dataSource.value = res.result;
- });
- }
- function initCharts() {
- setOptions(memory);
- setOptions2(key);
- }
- /** 开启定时器 */
- function openTimer() {
- loadData();
- closeTimer();
- timer = setInterval(() => {
- loadData();
- }, 5000);
- }
- /** 关闭定时器 */
- function closeTimer() {
- if (timer) clearInterval(timer);
- }
- function loadData() {
- getRedisInfo()
- .then((res) => {
- let time = dayjs().format('hh:mm:ss');
- let [{ dbSize: currentSize }, memoryInfo] = res;
- let currentMemory = memoryInfo.used_memory / 1000;
- // push 数据
- key.xAxis.data.push(time);
- key.series[0].data.push(currentSize);
- memory.xAxis.data.push(time);
- memory.series[0].data.push(currentMemory);
- // 最大长度为6
- if (key.series[0].data.length > 6) {
- key.xAxis.data.splice(0, 1);
- key.series[0].data.splice(0, 1);
- memory.xAxis.data.splice(0, 1);
- memory.series[0].data.splice(0, 1);
- }
- setOptions(memory, false);
- setOptions2(key, false);
- // 计算 Key 最大最小值
- //let keyPole = getMaxAndMin(key.dataSource, 'y');
- //key.max = Math.floor(keyPole[0]) + 10;
- //key.min = Math.floor(keyPole[1]) - 10;
- //if (key.min < 0) this.key.min = 0;
- // 计算 Memory 最大最小值
- //let memoryPole = getMaxAndMin(memory.dataSource, 'y');
- //memory.max = Math.floor(memoryPole[0]) + 100;
- //memory.min = Math.floor(memoryPole[1]) - 100;
- //if (memory.min < 0) memory.min = 0;
- })
- .catch((e) => {
- //closeTimer()
- });
- }
- onMounted(() => {
- initCharts();
- openTimer();
- setTimeout(() => {
- loadData();
- }, 1000);
- });
- // update-begin--author:liaozhiyang---date:220230719---for:【issues-615】系统监控中的REDIS监控页面打开,再关闭后,没有关闭计时器
- onUnmounted(() => {
- closeTimer();
- });
- // update-end--author:liaozhiyang---date:220230719---for:【issues-615】系统监控中的REDIS监控页面打开,再关闭后,没有关闭计时器
- </script>
|