@@ -16,14 +16,19 @@ import {
16
16
import { DeleteTwoTone } from "@ant-design/icons" ;
17
17
import { message } from "antd" ;
18
18
import { SearchOutlined } from "@ant-design/icons" ;
19
- import { REDIS_DATA_TYPE , CONNECT_TYPE } from "@/utils/constant" ;
19
+ import {
20
+ REDIS_DATA_TYPE ,
21
+ CONNECT_TYPE ,
22
+ REDIS_DATA_SHOW ,
23
+ } from "@/utils/constant" ;
20
24
import "@/pages/CommonCss/zebra.css" ;
21
25
import uuid from "node-uuid" ;
22
26
import Log from "@/services/LogService" ;
23
27
import KeysHistoryService from "@/services/KeysHistoryService" ;
24
28
import LocaleUtils from "@/utils/LocaleUtils" ;
25
- import intl from "react-intl-universal" ;
26
29
import BufferUtils from "@/utils/BufferUtils" ;
30
+ import { notification } from "antd" ;
31
+ import intl from "react-intl-universal" ;
27
32
var lodash = window . require ( "lodash" ) ;
28
33
const { Search } = Input ;
29
34
const { Option } = Select ;
@@ -155,6 +160,123 @@ class HostKeyTree extends Component {
155
160
}
156
161
}
157
162
}
163
+ /**
164
+ *加载 redis key
165
+ *
166
+ * @param {* } pattern
167
+ * @param {* } cursor
168
+ * @param {* } originalKey
169
+ * @memberof HostKeyTree
170
+ */
171
+ loadRedisDataByPattern ( tableData , pattern , cursor , originalKey ) {
172
+ let redisArr = [ this . props . node . redis ] ;
173
+ if ( this . props . node . data . connectType === CONNECT_TYPE . CLUSTER ) {
174
+ redisArr = this . props . node . redis . nodes ( "master" ) ;
175
+ }
176
+ let patternBuffer = BufferUtils . hexToBuffer ( pattern ) ;
177
+ redisArr [ 0 ] . scanBuffer (
178
+ cursor ,
179
+ "MATCH" ,
180
+ patternBuffer ,
181
+ "COUNT" ,
182
+ REDIS_DATA_SHOW . FETCH_DATA_SIZE ,
183
+ ( err , res ) => {
184
+ if ( err ) {
185
+ this . setState ( { searchDisable : false } ) ;
186
+ message . error ( "" + err ) ;
187
+ Log . error (
188
+ "[cmd=HostKeyTree] loadRedisDataByPattern error" ,
189
+ pattern ,
190
+ cursor ,
191
+ originalKey ,
192
+ err
193
+ ) ;
194
+ return ;
195
+ }
196
+ let data = [ ] ;
197
+ for ( let i = 0 ; i < res [ 1 ] . length ; i ++ ) {
198
+ let strRes = BufferUtils . bufferToString ( res [ 1 ] [ i ] ) ;
199
+ if ( strRes === originalKey ) {
200
+ continue ;
201
+ }
202
+ data . push ( strRes ) ;
203
+ }
204
+ if ( data . length !== 0 ) {
205
+ tableData = [ ...tableData , ...data ] ;
206
+ // 如果key存在,则添加到搜索历史记录
207
+ let host = this . props . node . data . host ;
208
+ let port = this . props . node . data . port ;
209
+ KeysHistoryService . addKeysHistory ( host , port , originalKey ) ;
210
+ }
211
+ let strCursor = BufferUtils . bufferToString ( res [ 0 ] ) ;
212
+ if (
213
+ tableData . length <
214
+ REDIS_DATA_SHOW . MAX_SEARCH_DATA_SIZE_TREE &&
215
+ strCursor !== "0"
216
+ ) {
217
+ this . loadRedisDataByPattern (
218
+ tableData ,
219
+ pattern ,
220
+ strCursor ,
221
+ originalKey
222
+ ) ;
223
+ } else {
224
+ if (
225
+ tableData . length >=
226
+ REDIS_DATA_SHOW . MAX_SEARCH_DATA_SIZE_TREE
227
+ ) {
228
+ message . info (
229
+ "符合条件的数据条数太大。只显示:" +
230
+ REDIS_DATA_SHOW . MAX_SEARCH_DATA_SIZE_TREE
231
+ ) ;
232
+ }
233
+ let treeData = [ ] ;
234
+ if (
235
+ tableData !== null &&
236
+ tableData !== undefined &&
237
+ tableData . length !== 0
238
+ ) {
239
+ // 先对key进行排序
240
+ tableData = lodash . orderBy ( tableData ) ;
241
+ let rootTreeMap = new Map ( ) ;
242
+ for ( let i = 0 ; i < tableData . length ; i ++ ) {
243
+ let keyTemp = tableData [ i ] ;
244
+ let childKeyArr = keyTemp . split ( this . splitSign ) ;
245
+ let childMap = rootTreeMap . get ( childKeyArr [ 0 ] ) ;
246
+ if ( childMap === null || childMap === undefined ) {
247
+ childMap = new Map ( ) ;
248
+ }
249
+ rootTreeMap . set ( childKeyArr [ 0 ] , childMap ) ;
250
+ if ( childKeyArr . length > 1 ) {
251
+ this . keyArrToTreeMap (
252
+ childMap ,
253
+ childKeyArr . slice ( 1 , childKeyArr . length )
254
+ ) ;
255
+ } else {
256
+ rootTreeMap . set (
257
+ childKeyArr [ 0 ] + this . splitEndSign ,
258
+ undefined
259
+ ) ;
260
+ }
261
+ }
262
+ // 如果key存在,则添加到搜索历史记录
263
+ let host = this . props . node . data . host ;
264
+ let port = this . props . node . data . port ;
265
+ KeysHistoryService . addKeysHistory (
266
+ host ,
267
+ port ,
268
+ originalKey
269
+ ) ;
270
+ this . treeMapToTreeData ( rootTreeMap , treeData , "" ) ;
271
+ }
272
+ this . setState ( {
273
+ treeData : treeData ,
274
+ searchDisable : false ,
275
+ } ) ;
276
+ }
277
+ }
278
+ ) ;
279
+ }
158
280
/**
159
281
* 加载 redis key
160
282
* @param {* } pattern
@@ -178,9 +300,7 @@ class HostKeyTree extends Component {
178
300
let treeData = [ ] ;
179
301
if ( res !== null && res !== undefined && res . length !== 0 ) {
180
302
// 先对key进行排序
181
- res = lodash . orderBy (
182
- res
183
- ) ;
303
+ res = lodash . orderBy ( res ) ;
184
304
let rootTreeMap = new Map ( ) ;
185
305
for ( let i = 0 ; i < res . length ; i ++ ) {
186
306
let keyTemp = BufferUtils . bufferToString ( res [ i ] ) ;
@@ -226,7 +346,17 @@ class HostKeyTree extends Component {
226
346
* @memberof HostKeyTree
227
347
*/
228
348
searchKey ( key ) {
229
- this . loadRedisKeysByPattern ( key ) ;
349
+ if ( key === null || key === undefined || key === "" ) {
350
+ key = "*" ;
351
+ }
352
+ this . setState ( {
353
+ treeData : [ ] ,
354
+ searchDisable : true ,
355
+ } ) ;
356
+ let tableData = [ ] ;
357
+ let pattern = "*" + key + "*" ;
358
+ let cursor = "0" ;
359
+ this . loadRedisDataByPattern ( tableData , pattern , cursor , key ) ;
230
360
}
231
361
/**
232
362
* 打开 创建key 窗口
@@ -309,18 +439,20 @@ class HostKeyTree extends Component {
309
439
}
310
440
) ;
311
441
} else if ( keyType === REDIS_DATA_TYPE . HASH ) {
312
- redis . hsetBuffer ( keyBuffer , "default-member" , "default-value" ) . then (
313
- ( value ) => {
314
- this . okCreateKeyMadalSuccess ( key , keyType ) ;
315
- } ,
316
- ( err ) => {
317
- message . error ( "" + err ) ;
318
- Log . error (
319
- "HostKeyTree okCreateKeyMadal hash error" ,
320
- err
321
- ) ;
322
- }
323
- ) ;
442
+ redis
443
+ . hsetBuffer ( keyBuffer , "default-member" , "default-value" )
444
+ . then (
445
+ ( value ) => {
446
+ this . okCreateKeyMadalSuccess ( key , keyType ) ;
447
+ } ,
448
+ ( err ) => {
449
+ message . error ( "" + err ) ;
450
+ Log . error (
451
+ "HostKeyTree okCreateKeyMadal hash error" ,
452
+ err
453
+ ) ;
454
+ }
455
+ ) ;
324
456
} else if ( keyType === REDIS_DATA_TYPE . LIST ) {
325
457
redis . lpushBuffer ( keyBuffer , "default-member" ) . then (
326
458
( value ) => {
@@ -404,15 +536,15 @@ class HostKeyTree extends Component {
404
536
for ( let i = 0 ; i < res . length ; i ++ ) {
405
537
let key = res [ i ] ;
406
538
redis . del ( key ) . then (
407
- ( value ) => { } ,
539
+ ( value ) => { } ,
408
540
( err ) => {
409
541
message . error (
410
542
"del key error. key: " + key + ". " + err
411
543
) ;
412
544
Log . error (
413
545
"clickTreeRightClickMenu del key error. key: " +
414
- key +
415
- ". " ,
546
+ key +
547
+ ". " ,
416
548
err
417
549
) ;
418
550
}
0 commit comments