提交 | 用户 | 时间
|
820397
|
1 |
<template> |
H |
2 |
<el-scrollbar height="calc(100vh - 88px - 40px - 50px)"> |
|
3 |
<el-row> |
|
4 |
<!-- 基本信息 --> |
|
5 |
<el-col :span="24" class="card-box" shadow="hover"> |
|
6 |
<el-card> |
|
7 |
<el-descriptions title="基本信息" :column="6" border> |
|
8 |
<el-descriptions-item label="Redis版本 :"> |
|
9 |
{{ cache?.info?.redis_version }} |
|
10 |
</el-descriptions-item> |
|
11 |
<el-descriptions-item label="运行模式 :"> |
|
12 |
{{ cache?.info?.redis_mode == 'standalone' ? '单机' : '集群' }} |
|
13 |
</el-descriptions-item> |
|
14 |
<el-descriptions-item label="端口 :"> |
|
15 |
{{ cache?.info?.tcp_port }} |
|
16 |
</el-descriptions-item> |
|
17 |
<el-descriptions-item label="客户端数 :"> |
|
18 |
{{ cache?.info?.connected_clients }} |
|
19 |
</el-descriptions-item> |
|
20 |
<el-descriptions-item label="运行时间(天) :"> |
|
21 |
{{ cache?.info?.uptime_in_days }} |
|
22 |
</el-descriptions-item> |
|
23 |
<el-descriptions-item label="使用内存 :"> |
|
24 |
{{ cache?.info?.used_memory_human }} |
|
25 |
</el-descriptions-item> |
|
26 |
<el-descriptions-item label="使用CPU :"> |
|
27 |
{{ cache?.info ? parseFloat(cache?.info?.used_cpu_user_children).toFixed(2) : '' }} |
|
28 |
</el-descriptions-item> |
|
29 |
<el-descriptions-item label="内存配置 :"> |
|
30 |
{{ cache?.info?.maxmemory_human }} |
|
31 |
</el-descriptions-item> |
|
32 |
<el-descriptions-item label="AOF是否开启 :"> |
|
33 |
{{ cache?.info?.aof_enabled == '0' ? '否' : '是' }} |
|
34 |
</el-descriptions-item> |
|
35 |
<el-descriptions-item label="RDB是否成功 :"> |
|
36 |
{{ cache?.info?.rdb_last_bgsave_status }} |
|
37 |
</el-descriptions-item> |
|
38 |
<el-descriptions-item label="Key数量 :"> |
|
39 |
{{ cache?.dbSize }} |
|
40 |
</el-descriptions-item> |
|
41 |
<el-descriptions-item label="网络入口/出口 :"> |
|
42 |
{{ cache?.info?.instantaneous_input_kbps }}kps/ |
|
43 |
{{ cache?.info?.instantaneous_output_kbps }}kps |
|
44 |
</el-descriptions-item> |
|
45 |
</el-descriptions> |
|
46 |
</el-card> |
|
47 |
</el-col> |
|
48 |
<!-- 命令统计 --> |
|
49 |
<el-col :span="12" class="mt-3"> |
|
50 |
<el-card :gutter="12" shadow="hover"> |
|
51 |
<Echart :options="commandStatsRefChika" :height="420" /> |
|
52 |
</el-card> |
|
53 |
</el-col> |
|
54 |
<!-- 内存使用量统计 --> |
|
55 |
<el-col :span="12" class="mt-3"> |
|
56 |
<el-card class="ml-3" :gutter="12" shadow="hover"> |
|
57 |
<Echart :options="usedmemoryEchartChika" :height="420" /> |
|
58 |
</el-card> |
|
59 |
</el-col> |
|
60 |
</el-row> |
|
61 |
</el-scrollbar> |
|
62 |
</template> |
|
63 |
<script lang="ts" setup> |
|
64 |
import * as RedisApi from '@/api/infra/redis' |
|
65 |
import { RedisMonitorInfoVO } from '@/api/infra/redis/types' |
|
66 |
const cache = ref<RedisMonitorInfoVO>() |
|
67 |
|
|
68 |
// 基本信息 |
|
69 |
const readRedisInfo = async () => { |
|
70 |
const data = await RedisApi.getCache() |
|
71 |
cache.value = data |
|
72 |
} |
|
73 |
|
|
74 |
// 内存使用情况 |
|
75 |
const usedmemoryEchartChika = reactive<any>({ |
|
76 |
title: { |
|
77 |
// 仪表盘标题。 |
|
78 |
text: '内存使用情况', |
|
79 |
left: 'center', |
|
80 |
show: true, // 是否显示标题,默认 true。 |
|
81 |
offsetCenter: [0, '20%'], //相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。 |
|
82 |
color: 'yellow', // 文字的颜色,默认 #333。 |
|
83 |
fontSize: 20 // 文字的字体大小,默认 15。 |
|
84 |
}, |
|
85 |
toolbox: { |
|
86 |
show: false, |
|
87 |
feature: { |
|
88 |
restore: { show: true }, |
|
89 |
saveAsImage: { show: true } |
|
90 |
} |
|
91 |
}, |
|
92 |
series: [ |
|
93 |
{ |
|
94 |
name: '峰值', |
|
95 |
type: 'gauge', |
|
96 |
min: 0, |
|
97 |
max: 50, |
|
98 |
splitNumber: 10, |
|
99 |
//这是指针的颜色 |
|
100 |
color: '#F5C74E', |
|
101 |
radius: '85%', |
|
102 |
center: ['50%', '50%'], |
|
103 |
startAngle: 225, |
|
104 |
endAngle: -45, |
|
105 |
axisLine: { |
|
106 |
// 坐标轴线 |
|
107 |
lineStyle: { |
|
108 |
// 属性lineStyle控制线条样式 |
|
109 |
color: [ |
|
110 |
[0.2, '#7FFF00'], |
|
111 |
[0.8, '#00FFFF'], |
|
112 |
[1, '#FF0000'] |
|
113 |
], |
|
114 |
//width: 6 外框的大小(环的宽度) |
|
115 |
width: 10 |
|
116 |
} |
|
117 |
}, |
|
118 |
axisTick: { |
|
119 |
// 坐标轴小标记 |
|
120 |
//里面的线长是5(短线) |
|
121 |
length: 5, // 属性length控制线长 |
|
122 |
lineStyle: { |
|
123 |
// 属性lineStyle控制线条样式 |
|
124 |
color: '#76D9D7' |
|
125 |
} |
|
126 |
}, |
|
127 |
splitLine: { |
|
128 |
// 分隔线 |
|
129 |
length: 20, // 属性length控制线长 |
|
130 |
lineStyle: { |
|
131 |
// 属性lineStyle(详见lineStyle)控制线条样式 |
|
132 |
color: '#76D9D7' |
|
133 |
} |
|
134 |
}, |
|
135 |
axisLabel: { |
|
136 |
color: '#76D9D7', |
|
137 |
distance: 15, |
|
138 |
fontSize: 15 |
|
139 |
}, |
|
140 |
pointer: { |
|
141 |
// 指针的大小 |
|
142 |
width: 7, |
|
143 |
show: true |
|
144 |
}, |
|
145 |
detail: { |
|
146 |
textStyle: { |
|
147 |
fontWeight: 'normal', |
|
148 |
// 里面文字下的数值大小(50) |
|
149 |
fontSize: 15, |
|
150 |
color: '#FFFFFF' |
|
151 |
}, |
|
152 |
valueAnimation: true |
|
153 |
}, |
|
154 |
progress: { |
|
155 |
show: true |
|
156 |
} |
|
157 |
} |
|
158 |
] |
|
159 |
}) |
|
160 |
|
|
161 |
// 指令使用情况 |
|
162 |
const commandStatsRefChika = reactive({ |
|
163 |
title: { |
|
164 |
text: '命令统计', |
|
165 |
left: 'center' |
|
166 |
}, |
|
167 |
tooltip: { |
|
168 |
trigger: 'item', |
|
169 |
formatter: '{a} <br/>{b} : {c} ({d}%)' |
|
170 |
}, |
|
171 |
legend: { |
|
172 |
type: 'scroll', |
|
173 |
orient: 'vertical', |
|
174 |
right: 30, |
|
175 |
top: 10, |
|
176 |
bottom: 20, |
|
177 |
data: [] as any[], |
|
178 |
textStyle: { |
|
179 |
color: '#a1a1a1' |
|
180 |
} |
|
181 |
}, |
|
182 |
series: [ |
|
183 |
{ |
|
184 |
name: '命令', |
|
185 |
type: 'pie', |
|
186 |
radius: [20, 120], |
|
187 |
center: ['40%', '60%'], |
|
188 |
data: [] as any[], |
|
189 |
roseType: 'radius', |
|
190 |
label: { |
|
191 |
show: true |
|
192 |
}, |
|
193 |
emphasis: { |
|
194 |
label: { |
|
195 |
show: true |
|
196 |
}, |
|
197 |
itemStyle: { |
|
198 |
shadowBlur: 10, |
|
199 |
shadowOffsetX: 0, |
|
200 |
shadowColor: 'rgba(0, 0, 0, 0.5)' |
|
201 |
} |
|
202 |
} |
|
203 |
} |
|
204 |
] |
|
205 |
}) |
|
206 |
|
|
207 |
/** 加载数据 */ |
|
208 |
const getSummary = () => { |
|
209 |
// 初始化命令图表 |
|
210 |
initCommandStatsChart() |
|
211 |
usedMemoryInstance() |
|
212 |
} |
|
213 |
|
|
214 |
/** 命令使用情况 */ |
|
215 |
const initCommandStatsChart = async () => { |
|
216 |
usedmemoryEchartChika.series[0].data = [] |
|
217 |
// 发起请求 |
|
218 |
try { |
|
219 |
const data = await RedisApi.getCache() |
|
220 |
cache.value = data |
|
221 |
// 处理数据 |
|
222 |
const commandStats = [] as any[] |
|
223 |
const nameList = [] as string[] |
|
224 |
data.commandStats.forEach((row) => { |
|
225 |
commandStats.push({ |
|
226 |
name: row.command, |
|
227 |
value: row.calls |
|
228 |
}) |
|
229 |
nameList.push(row.command) |
|
230 |
}) |
|
231 |
commandStatsRefChika.legend.data = nameList |
|
232 |
commandStatsRefChika.series[0].data = commandStats |
|
233 |
} catch {} |
|
234 |
} |
|
235 |
const usedMemoryInstance = async () => { |
|
236 |
try { |
|
237 |
const data = await RedisApi.getCache() |
|
238 |
cache.value = data |
|
239 |
// 仪表盘详情,用于显示数据。 |
|
240 |
usedmemoryEchartChika.series[0].detail = { |
|
241 |
show: true, // 是否显示详情,默认 true。 |
|
242 |
offsetCenter: [0, '50%'], // 相对于仪表盘中心的偏移位置,数组第一项是水平方向的偏移,第二项是垂直方向的偏移。可以是绝对的数值,也可以是相对于仪表盘半径的百分比。 |
|
243 |
color: 'auto', // 文字的颜色,默认 auto。 |
|
244 |
fontSize: 30, // 文字的字体大小,默认 15。 |
|
245 |
formatter: cache.value!.info.used_memory_human // 格式化函数或者字符串 |
|
246 |
} |
|
247 |
|
|
248 |
usedmemoryEchartChika.series[0].data[0] = { |
|
249 |
value: cache.value!.info.used_memory_human, |
|
250 |
name: '内存消耗' |
|
251 |
} |
|
252 |
console.log(cache.value!.info) |
|
253 |
usedmemoryEchartChika.tooltip = { |
|
254 |
formatter: '{b} <br/>{a} : ' + cache.value!.info.used_memory_human |
|
255 |
} |
|
256 |
} catch {} |
|
257 |
} |
|
258 |
|
|
259 |
/** 初始化 **/ |
|
260 |
onMounted(() => { |
|
261 |
// 读取 redis 信息 |
|
262 |
readRedisInfo() |
|
263 |
// 加载数据 |
|
264 |
getSummary() |
|
265 |
}) |
|
266 |
</script> |