From 41e5ecfad2bf28f764d83f39669b50fd42cc855d Mon Sep 17 00:00:00 2001 From: tiny-craft <137850705+tiny-craft@users.noreply.github.com> Date: Mon, 17 Jul 2023 17:17:52 +0800 Subject: [PATCH] feat: add key filter for database scan --- backend/services/connection_service.go | 12 +-- frontend/src/App.vue | 2 + .../components/dialogs/KeyFilterDialog.vue | 91 +++++++++++++++++++ .../src/components/sidebar/BrowserTree.vue | 48 +++++++++- frontend/src/langs/en.json | 7 +- frontend/src/langs/zh-cn.json | 6 +- frontend/src/stores/connections.js | 55 ++++++++++- frontend/src/stores/dialog.js | 27 ++++++ 8 files changed, 235 insertions(+), 13 deletions(-) create mode 100644 frontend/src/components/dialogs/KeyFilterDialog.vue diff --git a/backend/services/connection_service.go b/backend/services/connection_service.go index 86d6ad5..41c332c 100644 --- a/backend/services/connection_service.go +++ b/backend/services/connection_service.go @@ -179,7 +179,7 @@ func (c *connectionService) OpenConnection(name string) (resp types.JSResp) { return } - // get total database + // get total databases config, err := rdb.ConfigGet(ctx, "databases").Result() if err != nil { resp.Msg = err.Error() @@ -347,12 +347,12 @@ func (c *connectionService) ServerInfo(name string) (resp types.JSResp) { // OpenDatabase open select database, and list all keys // @param path contain connection name and db name -func (c *connectionService) OpenDatabase(connName string, db int) (resp types.JSResp) { - return c.ScanKeys(connName, db, "*") +func (c *connectionService) OpenDatabase(connName string, db int, match string) (resp types.JSResp) { + return c.ScanKeys(connName, db, match) } -// ScanKeys scan all keys below prefix -func (c *connectionService) ScanKeys(connName string, db int, prefix string) (resp types.JSResp) { +// ScanKeys scan all keys +func (c *connectionService) ScanKeys(connName string, db int, match string) (resp types.JSResp) { rdb, ctx, err := c.getRedisClient(connName, db) if err != nil { resp.Msg = err.Error() @@ -364,7 +364,7 @@ func (c *connectionService) ScanKeys(connName string, db int, prefix string) (re var cursor uint64 for { var loadedKey []string - loadedKey, cursor, err = rdb.Scan(ctx, cursor, prefix, 10000).Result() + loadedKey, cursor, err = rdb.Scan(ctx, cursor, match, 10000).Result() if err != nil { resp.Msg = err.Error() return diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 22643e7..5832723 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -17,6 +17,7 @@ import usePreferencesStore from './stores/preferences.js' import useConnectionStore from './stores/connections.js' import { useI18n } from 'vue-i18n' import { darkTheme, lightTheme, useOsTheme } from 'naive-ui' +import KeyFilterDialog from './components/dialogs/KeyFilterDialog.vue' hljs.registerLanguage('json', json) hljs.registerLanguage('plaintext', plaintext) @@ -95,6 +96,7 @@ const theme = computed(() => { + diff --git a/frontend/src/components/dialogs/KeyFilterDialog.vue b/frontend/src/components/dialogs/KeyFilterDialog.vue new file mode 100644 index 0000000..d6a84b5 --- /dev/null +++ b/frontend/src/components/dialogs/KeyFilterDialog.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/frontend/src/components/sidebar/BrowserTree.vue b/frontend/src/components/sidebar/BrowserTree.vue index 44699bd..013c716 100644 --- a/frontend/src/components/sidebar/BrowserTree.vue +++ b/frontend/src/components/sidebar/BrowserTree.vue @@ -1,10 +1,10 @@