storage/cli/main.go

79 lines
1.8 KiB
Go
Executable File

package main
import (
"bufio"
"fmt"
"local/args"
"local/storage"
"log"
"os"
"strings"
"time"
)
func main() {
as := args.NewArgSet()
as.Append(args.STRING, "addr", "addr of store", "localhost:8102")
as.Append(args.STRING, "db", "type of store", "dynomite")
as.Append(args.STRING, "user", "user of store", "")
as.Append(args.STRING, "pass", "pass of store", "")
as.Append(args.STRING, "do", "[get set]", "get")
as.Append(args.STRING, "k", "key", "key")
as.Append(args.STRING, "v", "value", "value")
if err := as.Parse(); err != nil {
panic(err)
}
db, err := storage.New(
storage.TypeFromString(as.Get("db").GetString()),
as.Get("addr").GetString(),
as.Get("user").GetString(),
as.Get("pass").GetString(),
)
if err != nil {
panic(err)
}
start := time.Now()
var b []byte
switch strings.ToLower(as.Get("do").GetString()) {
case "list":
var c []string
c, err = db.List(nil, as.Get("k").GetString())
b = []byte(fmt.Sprintf("%v", c))
case "get":
b, err = db.Get(as.Get("k").GetString())
case "set":
err = db.Set(as.Get("k").GetString(), []byte(as.Get("v").GetString()))
case "cli":
reader := bufio.NewReader(os.Stdin)
for {
fmt.Print("> ")
line, err := reader.ReadString('\n')
if err != nil {
panic(err)
}
s := strings.Split(line, " ")
s[len(s)-1] = strings.TrimSpace(s[len(s)-1])
for len(s) < 3 {
s = append(s, "")
}
start := time.Now()
switch strings.ToLower(s[0]) {
case "get":
b, err := db.Get(s[1])
stop := time.Now()
log.Printf("(%v) %v: %s => %s", stop.Sub(start), err, s[1], b)
case "set":
err := db.Set(s[1], []byte(s[2]))
stop := time.Now()
log.Printf("(%v) %v: %s", stop.Sub(start), err, s[1])
}
}
default:
log.Fatal("-do not in [get set]")
}
stop := time.Now()
log.Printf("(%v) %v: %s", stop.Sub(start), err, b)
}