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) }