qishibo/AnotherRedisDesktopManager · error

e.message

Error message

e.message

What it means

SlowLog.vue fetches entries with client.call('SLOWLOG', 'GET', ...) and a rejection shows the raw e.message while resetting isScanning. SLOWLOG is NOT in the app's writeCMD list, so readonly mode does not block it - the failure is server-side or transport-level: command disabled by ACL/proxy/managed Redis, or the connection dropped.

Source

Thrown at src/components/SlowLog.vue:107

        node.callBuffer('SLOWLOG', 'GET', this.scanMax).then((reply) => {
          for (const item of reply) {
            const line = {
              id: item[0],
              timestring: this.toLocalTime(item[1] * 1000),
              cost: (item[2] / 1000).toFixed(3),
              cmd: item[3].join(' '),
              source: item[4],
              name: item[5],
            };

            lines.push(line);
          }

          this.cmdList = lines;
          this.isScanning = false;
        }).catch((e) => {
          this.isScanning = false;
          this.$message.error(e.message);
        });
      });
    },
    initConfig() {
      this.client.call('CONFIG', 'GET', 'slowlog-log-slower-than').then((reply) => {
        this.slowerThan = reply[1];
      }).catch((e) => {});
      this.client.call('CONFIG', 'GET', 'slowlog-max-len').then((reply) => {
        this.maxLen = reply[1];
      }).catch((e) => {});
    },
    toLocalTime(timestamp) {
      const d = new Date(timestamp);
      const h = `${d.getHours()}`.padStart(2, 0);
      const m = `${d.getMinutes()}`.padStart(2, 0);
      const s = `${d.getSeconds()}`.padStart(2, 0);

      const Y = d.getFullYear();

View on GitHub (pinned to c149855106)

Solutions

  1. Read the exact e.message: 'unknown command' means the server/proxy lacks SLOWLOG; 'NOPERM' means an ACL grant is missing.
  2. Verify directly with redis-cli: 'SLOWLOG GET 10' as the same user.
  3. If the provider blocks SLOWLOG, use the provider's monitoring/logs instead of the tab.
Defensive patterns

Strategy: try-catch

Validate before calling

// optional capability probe before opening the tab
async function slowlogAvailable(client) {
  try { await client.call('slowlog', 'len'); return true; }
  catch { return false; }
}

Type guard

const isCommandRestricted = (e) => /unknown command|NOPERM|not allowed/i.test(e.message);

Try / catch

this.client.call('SLOWLOG', 'GET', count).then(/* render */).catch((e) => {
  this.isScanning = false;
  if (isCommandRestricted(e)) {
    this.$message.error('SLOWLOG is not available for this connection (ACL/managed Redis)');
  } else {
    this.$message.error(e.message);
  }
});

Prevention

When it happens

Trigger: ACL user without @admin/@slowlog privileges; managed Redis or a proxy that does not expose SLOWLOG; connection lost while opening the slow-log tab; very restricted whitelisted command set on the server.

Common situations: Managed offerings with limited command surfaces; ACL accounts provisioned for the GUI with minimal grants; clicking the slow-log tab right after a network change.

Related errors


AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22). Data as JSON: /api/errors/b4cf2acecb7b2463. Report an issue: GitHub.