Go CLI: fix show variable (#16370)

### What problem does this PR solve?

```
RAGFlow(api/default)> show var 'mail.port';
+-----------+-----------+--------------+-------+
| data_type | name      | setting_type | value |
+-----------+-----------+--------------+-------+
| integer   | mail.port | config       | 30    |
+-----------+-----------+--------------+-------+
```

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)

---------

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
This commit is contained in:
Jin Hai
2026-06-26 13:51:56 +08:00
committed by GitHub
parent 65afaa1292
commit 8bc27d8df1
9 changed files with 133 additions and 7 deletions

View File

@@ -975,9 +975,11 @@ func (c *CLI) AdminShowVariable(cmd *Command) (ResponseIf, error) {
return nil, fmt.Errorf("var_name not provided")
}
payload := map[string]interface{}{"var_name": varName}
encodedVarName := common.EncodeToBase64(varName)
resp, err := c.AdminServerClient.Request("GET", "/admin/variables", "admin", nil, payload)
endPoint := fmt.Sprintf("/admin/variables/%s", encodedVarName)
resp, err := c.AdminServerClient.Request("GET", endPoint, "admin", nil, nil)
if err != nil {
return nil, fmt.Errorf("failed to show variable: %w", err)
}

View File

@@ -330,6 +330,8 @@ func (c *CLI) ExecuteUserCommand(cmd *Command) (ResponseIf, error) {
return c.APISetAPIKeyCommand(cmd)
case "api_set_variable":
return c.APISetVariableCommand(cmd)
case "api_show_variable":
return c.APIShowVariableCommand(cmd)
case "api_unset_api_key":
return c.APIUnsetAPIKeyCommand(cmd)
case "api_show_version":

View File

@@ -1146,6 +1146,51 @@ func (c *CLI) APISetVariableCommand(cmd *Command) (ResponseIf, error) {
return &result, nil
}
// APIShowVariableCommand displays variable value
func (c *CLI) APIShowVariableCommand(cmd *Command) (ResponseIf, error) {
if c.Config.CLIMode != APIMode {
return nil, fmt.Errorf("this command is only allowed in USER mode")
}
httpClient := c.APIServerClientMap[c.Config.APIClientConfig.CurrentAPIServer]
if httpClient.APIKey == nil && httpClient.LoginToken == nil {
return nil, fmt.Errorf("API key not set. Please login first")
}
varName, ok := cmd.Params["var_name"].(string)
if !ok {
return nil, fmt.Errorf("var_name not provided")
}
EncodedVarName := common.EncodeToBase64(varName)
endPoint := fmt.Sprintf("/system/variables/%s", EncodedVarName)
resp, err := httpClient.Request("GET", endPoint, "web", nil, nil)
if err != nil {
return nil, fmt.Errorf("failed to get variable: %w", err)
}
if resp.StatusCode != 200 {
return nil, fmt.Errorf("failed to get variable: HTTP %d, body: %s", resp.StatusCode, string(resp.Body))
}
var result CommonResponse
if err = json.Unmarshal(resp.Body, &result); err != nil {
return nil, fmt.Errorf("show variable failed: invalid JSON (%w)", err)
}
if result.Code != 0 {
return nil, fmt.Errorf("%s", result.Message)
}
normalizeVariableRows(result.Data)
result.Duration = resp.Duration
return &result, nil
}
// APIShowAPIKeyCommand displays the current API key
func (c *CLI) APIShowAPIKeyCommand(cmd *Command) (ResponseIf, error) {
if c.Config.CLIMode != APIMode {

View File

@@ -522,7 +522,7 @@ func (p *Parser) parseAPIShowCommands() (*Command, error) {
case TokenCurrent:
return p.parseAPIShowCurrent()
case TokenVar:
return p.parseShowVariable()
return p.parseAPIShowVariable()
case TokenProvider:
return p.parseAPIShowProviderCommands()
case TokenModel:
@@ -572,17 +572,17 @@ func (p *Parser) parseAPIShowCurrent() (*Command, error) {
return NewCommand("api_show_current"), nil
}
func (p *Parser) parseShowVariable() (*Command, error) {
func (p *Parser) parseAPIShowVariable() (*Command, error) {
p.nextToken() // consume VAR
varName, err := p.parseIdentifier()
varName, err := p.parseQuotedString()
if err != nil {
return nil, err
}
p.nextToken()
cmd := NewCommand("show_variable")
cmd := NewCommand("api_show_variable")
cmd.Params["var_name"] = varName
p.nextToken()
// Semicolon is optional
if p.curToken.Type == TokenSemicolon {
p.nextToken()