perf: support json format viewing for stream values #65
fix: the 'reset' parameter in 'GetKeyDetail' isn't taking effect
This commit is contained in:
parent
fea87662de
commit
cc436ad86f
|
@ -2,6 +2,7 @@ package services
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/redis/go-redis/v9"
|
||||
|
@ -647,7 +648,11 @@ func (b *browserService) GetKeyDetail(param types.KeyDetailParam) (resp types.JS
|
|||
cursor = 0
|
||||
loadVal, subErr = client.LRange(ctx, key, 0, -1).Result()
|
||||
} else {
|
||||
cursor, _ = getEntryCursor()
|
||||
if param.Reset {
|
||||
cursor = 0
|
||||
} else {
|
||||
cursor, _ = getEntryCursor()
|
||||
}
|
||||
scanSize := int64(Preferences().GetScanSize())
|
||||
loadVal, subErr = client.LRange(ctx, key, int64(cursor), int64(cursor)+scanSize-1).Result()
|
||||
cursor = cursor + uint64(scanSize)
|
||||
|
@ -710,7 +715,11 @@ func (b *browserService) GetKeyDetail(param types.KeyDetailParam) (resp types.JS
|
|||
}
|
||||
}
|
||||
} else {
|
||||
cursor, _ = getEntryCursor()
|
||||
if param.Reset {
|
||||
cursor = 0
|
||||
} else {
|
||||
cursor, _ = getEntryCursor()
|
||||
}
|
||||
loadedVal, cursor, subErr = client.HScan(ctx, key, cursor, matchPattern, scanSize).Result()
|
||||
if subErr != nil {
|
||||
return nil, false, subErr
|
||||
|
@ -768,7 +777,11 @@ func (b *browserService) GetKeyDetail(param types.KeyDetailParam) (resp types.JS
|
|||
}
|
||||
}
|
||||
} else {
|
||||
cursor, _ = getEntryCursor()
|
||||
if param.Reset {
|
||||
cursor = 0
|
||||
} else {
|
||||
cursor, _ = getEntryCursor()
|
||||
}
|
||||
loadedKey, cursor, subErr = client.SScan(ctx, key, cursor, param.MatchPattern, scanSize).Result()
|
||||
items = make([]types.SetEntryItem, len(loadedKey))
|
||||
for i, val := range loadedKey {
|
||||
|
@ -824,7 +837,11 @@ func (b *browserService) GetKeyDetail(param types.KeyDetailParam) (resp types.JS
|
|||
}
|
||||
}
|
||||
} else {
|
||||
cursor, _ = getEntryCursor()
|
||||
if param.Reset {
|
||||
cursor = 0
|
||||
} else {
|
||||
cursor, _ = getEntryCursor()
|
||||
}
|
||||
loadedVal, cursor, err = client.ZScan(ctx, key, cursor, param.MatchPattern, scanSize).Result()
|
||||
loadedLen := len(loadedVal)
|
||||
items = make([]types.ZSetEntryItem, loadedLen/2)
|
||||
|
@ -855,7 +872,6 @@ func (b *browserService) GetKeyDetail(param types.KeyDetailParam) (resp types.JS
|
|||
case "stream":
|
||||
loadStreamHandle := func() ([]types.StreamEntryItem, bool, error) {
|
||||
var msgs []redis.XMessage
|
||||
var items []types.StreamEntryItem
|
||||
var last string
|
||||
if param.Full {
|
||||
// load all
|
||||
|
@ -863,7 +879,11 @@ func (b *browserService) GetKeyDetail(param types.KeyDetailParam) (resp types.JS
|
|||
msgs, err = client.XRevRange(ctx, key, "+", "-").Result()
|
||||
} else {
|
||||
scanSize := int64(Preferences().GetScanSize())
|
||||
_, last = getEntryCursor()
|
||||
if param.Reset {
|
||||
last = ""
|
||||
} else {
|
||||
_, last = getEntryCursor()
|
||||
}
|
||||
if len(last) <= 0 {
|
||||
last = "+"
|
||||
}
|
||||
|
@ -882,11 +902,15 @@ func (b *browserService) GetKeyDetail(param types.KeyDetailParam) (resp types.JS
|
|||
}
|
||||
}
|
||||
setEntryXLast(last)
|
||||
for _, msg := range msgs {
|
||||
items = append(items, types.StreamEntryItem{
|
||||
ID: msg.ID,
|
||||
Value: msg.Values,
|
||||
})
|
||||
items := make([]types.StreamEntryItem, len(msgs))
|
||||
for i, msg := range msgs {
|
||||
items[i].ID = msg.ID
|
||||
items[i].Value = msg.Values
|
||||
if vb, merr := json.Marshal(msg.Values); merr != nil {
|
||||
items[i].DisplayValue = "{}"
|
||||
} else {
|
||||
items[i].DisplayValue, _, _ = strutil.ConvertTo(string(vb), types.DECODE_NONE, types.FORMAT_JSON)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return items, false, err
|
||||
|
|
|
@ -23,6 +23,7 @@ type ZSetEntryItem struct {
|
|||
}
|
||||
|
||||
type StreamEntryItem struct {
|
||||
ID string `json:"id"`
|
||||
Value map[string]any `json:"value"`
|
||||
ID string `json:"id"`
|
||||
Value map[string]any `json:"v"`
|
||||
DisplayValue string `json:"dv,omitempty"`
|
||||
}
|
||||
|
|
|
@ -83,26 +83,26 @@ const idColumn = reactive({
|
|||
const valueColumn = reactive({
|
||||
key: 'value',
|
||||
title: i18n.t('common.value'),
|
||||
align: 'center',
|
||||
align: 'left',
|
||||
titleAlign: 'center',
|
||||
resizable: true,
|
||||
// ellipsis: {
|
||||
// tooltip: true,
|
||||
// },
|
||||
filterOptionValue: null,
|
||||
filter(value, row) {
|
||||
filter: (value, row) => {
|
||||
const v = value.toString()
|
||||
if (filterType.value === 1) {
|
||||
// filter key
|
||||
return some(keys(row.value), (key) => includes(key, v))
|
||||
return some(keys(row.v), (key) => includes(key, v))
|
||||
} else {
|
||||
// filter value
|
||||
return some(values(row.value), (val) => includes(val, v))
|
||||
return some(values(row.v), (val) => includes(val, v))
|
||||
}
|
||||
},
|
||||
// sorter: (row1, row2) => row1.value - row2.value,
|
||||
// ellipsis: {
|
||||
// tooltip: true
|
||||
// },
|
||||
render: (row) => {
|
||||
return h(NCode, { language: 'json', wordWrap: true }, { default: () => JSON.stringify(row.value) })
|
||||
return h(NCode, { language: 'json', wordWrap: true, code: row.dv })
|
||||
},
|
||||
})
|
||||
const actionColumn = {
|
||||
|
@ -136,23 +136,10 @@ const actionColumn = {
|
|||
})
|
||||
},
|
||||
}
|
||||
const columns = reactive([idColumn, valueColumn, actionColumn])
|
||||
|
||||
const tableData = computed(() => {
|
||||
const data = []
|
||||
if (!isEmpty(props.value)) {
|
||||
for (const elem of props.value) {
|
||||
data.push({
|
||||
id: elem.id,
|
||||
value: elem.value,
|
||||
})
|
||||
}
|
||||
}
|
||||
return data
|
||||
})
|
||||
const columns = computed(() => [idColumn, valueColumn, actionColumn])
|
||||
|
||||
const entries = computed(() => {
|
||||
const len = size(tableData.value)
|
||||
const len = size(props.value)
|
||||
return `${len} / ${Math.max(len, props.length)}`
|
||||
})
|
||||
|
||||
|
@ -253,7 +240,7 @@ defineExpose({
|
|||
:bordered="false"
|
||||
:bottom-bordered="false"
|
||||
:columns="columns"
|
||||
:data="tableData"
|
||||
:data="props.value"
|
||||
:loading="props.loading"
|
||||
:single-column="true"
|
||||
:single-line="false"
|
||||
|
|
Loading…
Reference in New Issue