storage/cli/cli.go

92 lines
2.4 KiB
Go
Executable File

package main
import (
"bufio"
"fmt"
"log"
"os"
"strings"
"time"
"gitea.inhome.blapointe.com/local/args"
"gitea.inhome.blapointe.com/local/storage"
)
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 del list]", "get")
as.Append(args.STRING, "k", "key", "key")
as.Append(args.STRING, "v", "value", "value")
as.Append(args.STRING, "ns", "namespace", "")
as.Append(args.STRING, "min", "min key to list", "---")
as.Append(args.STRING, "max", "max key to list", "}}}")
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
ns := strings.Split(as.Get("ns").GetString(), " ")
c, err = db.List(ns, as.Get("min").GetString(), as.Get("max").GetString())
d := strings.Join(c, "\n\t")
b = []byte(fmt.Sprintf("%s", d))
case "get":
ns := strings.Split(as.Get("ns").GetString(), " ")
b, err = db.Get(as.Get("k").GetString(), ns...)
case "set":
ns := strings.Split(as.Get("ns").GetString(), " ")
err = db.Set(as.Get("k").GetString(), []byte(as.Get("v").GetString()), ns...)
case "del":
ns := strings.Split(as.Get("ns").GetString(), " ")
err = db.Set(as.Get("k").GetString(), nil, ns...)
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", stop.Sub(start), err, s[1])
fmt.Printf("%s", 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: %v", stop.Sub(start), err, len(b))
fmt.Printf("%s", b)
}