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"
"io"
"os"
"runtime"
"strings"
"sync"
"time"
@ -316,7 +317,6 @@ func (c *Controller) command(msg *server.Message, w io.Writer) (res string, d co
}
return ""
}
okResp = okResp
switch msg.Command {
default:
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()
// case "stats":
// resp, err = c.cmdStats(nline)
// case "server":
// resp, err = c.cmdServer(nline)
case "server":
res, err = c.cmdServer(msg)
case "scan":
res, err = c.cmdScan(msg)
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)
case "keys":
res, err = c.cmdKeys(msg)
// case "aof":
// err = c.cmdAOF(nline, w)
// case "aofmd5":
// resp, err = c.cmdAOFMD5(nline)
// case "gc":
// go runtime.GC()
// case "aof":
// err = c.cmdAOF(nline, w)
// case "aofmd5":
// resp, err = c.cmdAOFMD5(nline)
case "gc":
go runtime.GC()
res = okResp()
// resp = okResp()
// case "aofshrink":
// go c.aofshrink()

View File

@ -4,9 +4,12 @@ import (
"encoding/json"
"fmt"
"runtime"
"sort"
"time"
"github.com/google/btree"
"github.com/tidwall/resp"
"github.com/tidwall/tile38/controller/server"
)
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
}
func (c *Controller) cmdServer(line string) (string, error) {
func (c *Controller) cmdServer(msg *server.Message) (res string, err error) {
start := time.Now()
if line != "" {
if len(msg.Values) != 1 {
return "", errInvalidNumberOfArguments
}
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["read_only"] = c.config.ReadOnly
data, err := json.Marshal(m)
if err != nil {
return "", err
switch msg.OutputType {
case server.JSON:
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) {
start := time.Now()