123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <template>
- <a-skeleton active :loading="loading" :paragraph="{rows: 17}">
- <a-card>
- <!-- Radis 信息实时监控 -->
- <a-row :gutter="8">
- <a-col :sm="24" :xl="12">
- <area-chart-ty v-bind="memory"/>
- </a-col>
- <a-col :sm="24" :xl="12">
- <area-chart-ty v-bind="key"/>
- </a-col>
- </a-row>
- <h3>Redis 详细信息</h3>
- <a-table
- :loading="tableLoading"
- :columns="columns"
- :dataSource="redisInfo"
- :pagination="false"/>
- </a-card>
- </a-skeleton>
- </template>
- <script>
- import moment from 'moment'
- import { getAction } from '@/api/manage'
- import AreaChartTy from '@/components/chart/AreaChartTy'
- export default {
- name: 'RedisInfo',
- components: {
- AreaChartTy
- },
- data() {
- return {
- loading: true,
- tableLoading: true,
- // 定时器ID
- timer: null,
- // 定时器周期
- millisec: 3000,
- // Key 实时数量
- key: {
- title: 'Radis Key 实时数量(个)',
- dataSource: [],
- y: '数量(个)',
- height: 340,
- min: 0,
- max: 100,
- color: '#FF6987',
- lineSize: 8,
- lineColor: '#DC143C'
- },
- // 内存实时占用情况
- memory: {
- title: 'Radis 内存实时占用情况(KB)',
- dataSource: [],
- y: '内存(KB)',
- min: 0,
- max: 3000,
- height: 340,
- lineSize: 8
- },
- redisInfo: [],
- columns: [{
- title: 'Key',
- align: 'center',
- dataIndex: 'key'
- }, {
- title: 'Description',
- align: 'left',
- dataIndex: 'description'
- }, {
- title: 'Value',
- align: 'center',
- dataIndex: 'value'
- }],
- url: {
- keysSize: '/sys/actuator/redis/keysSize',
- memoryInfo: '/sys/actuator/redis/memoryInfo',
- info: '/sys/actuator/redis/info'
- },
- path: '/monitor/redis/info'
- }
- },
- mounted() {
- this.openTimer()
- this.loadRedisInfo()
- setTimeout(() => {
- this.loadData()
- }, 1000)
- },
- beforeDestroy() {
- this.closeTimer()
- },
- methods: {
- /** 开启定时器 */
- openTimer() {
- this.loadData()
- this.closeTimer()
- this.timer = setInterval(() => {
- if (this.$route.path === this.path) {
- this.loadData()
- }
- }, this.millisec)
- },
- /** 关闭定时器 */
- closeTimer() {
- if (this.timer) clearInterval(this.timer)
- },
- /** 查询数据 */
- loadData() {
- Promise.all([
- getAction(this.url.keysSize),
- getAction(this.url.memoryInfo)
- ]).then((res) => {
- let time = moment().format('hh:mm:ss')
- let [{ dbSize: currentSize }, memoryInfo] = res
- let currentMemory = memoryInfo.used_memory / 1000
- // push 数据
- this.key.dataSource.push({ x: time, y: currentSize })
- this.memory.dataSource.push({ x: time, y: currentMemory })
- // 最大长度为6
- if (this.key.dataSource.length > 6) {
- this.key.dataSource.splice(0, 1)
- this.memory.dataSource.splice(0, 1)
- }
- // 计算 Key 最大最小值
- let keyPole = this.getMaxAndMin(this.key.dataSource, 'y')
- this.key.max = Math.floor(keyPole[0]) + 10
- this.key.min = Math.floor(keyPole[1]) - 10
- if (this.key.min < 0) this.key.min = 0
- // 计算 Memory 最大最小值
- let memoryPole = this.getMaxAndMin(this.memory.dataSource, 'y')
- this.memory.max = Math.floor(memoryPole[0]) + 100
- this.memory.min = Math.floor(memoryPole[1]) - 100
- if (this.memory.min < 0) this.memory.min = 0
- }).catch((e) => {
- console.error(e)
- this.closeTimer()
- this.$message.error('获取 Redis 信息失败')
- }).finally(() => {
- this.loading = false
- })
- },
- // 获取一组数据中最大和最小的值
- 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]
- },
- loadRedisInfo() {
- this.tableLoading = true
- getAction(this.url.info).then((res) => {
- this.redisInfo = res.result
- }).finally(() => {
- this.tableLoading = false
- })
- }
- }
- }
- </script>
- <style></style>
|