resp server

This commit is contained in:
Josh Baker 2016-03-28 15:50:18 -07:00
parent cdeb9d704b
commit b11c619650
2 changed files with 43 additions and 15 deletions

View File

@ -8,6 +8,7 @@ import (
"fmt" "fmt"
"io" "io"
"os" "os"
"runtime"
"strings" "strings"
"sync" "sync"
"time" "time"
@ -316,7 +317,6 @@ func (c *Controller) command(msg *server.Message, w io.Writer) (res string, d co
} }
return "" return ""
} }
okResp = okResp
switch msg.Command { switch msg.Command {
default: default:
err = fmt.Errorf("unknown command '%s'", msg.Values[0]) err = fmt.Errorf("unknown command '%s'", msg.Values[0])
@ -357,8 +357,8 @@ func (c *Controller) command(msg *server.Message, w io.Writer) (res string, d co
// resp = okResp() // resp = okResp()
// case "stats": // case "stats":
// resp, err = c.cmdStats(nline) // resp, err = c.cmdStats(nline)
// case "server": case "server":
// resp, err = c.cmdServer(nline) res, err = c.cmdServer(msg)
case "scan": case "scan":
res, err = c.cmdScan(msg) res, err = c.cmdScan(msg)
case "nearby": case "nearby":
@ -371,12 +371,13 @@ func (c *Controller) command(msg *server.Message, w io.Writer) (res string, d co
res, err = c.cmdGet(msg) res, err = c.cmdGet(msg)
case "keys": case "keys":
res, err = c.cmdKeys(msg) res, err = c.cmdKeys(msg)
// case "aof": // case "aof":
// err = c.cmdAOF(nline, w) // err = c.cmdAOF(nline, w)
// case "aofmd5": // case "aofmd5":
// resp, err = c.cmdAOFMD5(nline) // resp, err = c.cmdAOFMD5(nline)
// case "gc": case "gc":
// go runtime.GC() go runtime.GC()
res = okResp()
// resp = okResp() // resp = okResp()
// case "aofshrink": // case "aofshrink":
// go c.aofshrink() // go c.aofshrink()

View File

@ -4,9 +4,12 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"runtime" "runtime"
"sort"
"time" "time"
"github.com/google/btree" "github.com/google/btree"
"github.com/tidwall/resp"
"github.com/tidwall/tile38/controller/server"
) )
func (c *Controller) cmdStats(line string) (string, error) { func (c *Controller) cmdStats(line string) (string, error) {
@ -36,9 +39,9 @@ func (c *Controller) cmdStats(line string) (string, error) {
} }
return `{"ok":true,"stats":` + string(data) + `,"elapsed":"` + time.Now().Sub(start).String() + "\"}", nil return `{"ok":true,"stats":` + string(data) + `,"elapsed":"` + time.Now().Sub(start).String() + "\"}", nil
} }
func (c *Controller) cmdServer(line string) (string, error) { func (c *Controller) cmdServer(msg *server.Message) (res string, err error) {
start := time.Now() start := time.Now()
if line != "" { if len(msg.Values) != 1 {
return "", errInvalidNumberOfArguments return "", errInvalidNumberOfArguments
} }
m := make(map[string]interface{}) m := make(map[string]interface{})
@ -77,11 +80,35 @@ func (c *Controller) cmdServer(line string) (string, error) {
m["pointer_size"] = (32 << uintptr(uint64(^uintptr(0))>>63)) / 8 m["pointer_size"] = (32 << uintptr(uint64(^uintptr(0))>>63)) / 8
m["read_only"] = c.config.ReadOnly m["read_only"] = c.config.ReadOnly
data, err := json.Marshal(m) switch msg.OutputType {
if err != nil { case server.JSON:
return "", err data, err := json.Marshal(m)
if err != nil {
return "", err
}
res = `{"ok":true,"stats":` + string(data) + `,"elapsed":"` + time.Now().Sub(start).String() + "\"}"
case server.RESP:
var keys []string
for key, _ := range m {
keys = append(keys, key)
}
sort.Strings(keys)
var vals []resp.Value
for _, key := range keys {
val := m[key]
vals = append(vals, resp.StringValue(key))
vals = append(vals, resp.StringValue(fmt.Sprintf("%v", val)))
}
data, err := resp.ArrayValue(vals).MarshalRESP()
if err != nil {
return "", err
}
res = string(data)
} }
return `{"ok":true,"stats":` + string(data) + `,"elapsed":"` + time.Now().Sub(start).String() + "\"}", nil
return res, nil
} }
func (c *Controller) statsCollections(line string) (string, error) { func (c *Controller) statsCollections(line string) (string, error) {
start := time.Now() start := time.Now()