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