package main import ( "code.cloudfoundry.org/bytefmt" "github.com/juju/gnuflag" "log" "strings" "time" ) type Params struct { duration time.Duration threadsCount int blocksize uint64 parallel bool bs, cluster, user, keyring, config, pool, mode, define string } func Route() Params { params := Params{} gnuflag.DurationVar(¶ms.duration, "duration", 30, "Time limit for each test in seconds") gnuflag.DurationVar(¶ms.duration, "d", 30, "Time limit for each test in seconds") gnuflag.StringVar(¶ms.bs, "blocksize", "4K", "Block size in format KB = K = KiB = 1024 MB = M = MiB = 1024 * K GB = G = GiB = 1024 * M TB = T = TiB = 1024 * G") gnuflag.StringVar(¶ms.bs, "s", "4K", "Block size in format KB = K = KiB = 1024 MB = M = MiB = 1024 * K GB = G = GiB = 1024 * M TB = T = TiB = 1024 * G") gnuflag.StringVar(¶ms.user, "user", "admin", "Ceph user (cephx)") gnuflag.StringVar(¶ms.user, "u", "client.admin", "Ceph user (cephx)") gnuflag.StringVar(¶ms.cluster, "cluster", "ceph", "Ceph cluster name") gnuflag.StringVar(¶ms.cluster, "n", "ceph", "Ceph cluster name") gnuflag.StringVar(¶ms.keyring, "keyring", "/etc/ceph/ceph.client.admin.keyring", "Ceph user keyring") gnuflag.StringVar(¶ms.keyring, "k", "/etc/ceph/ceph.client.admin.keyring", "Ceph user keyring") gnuflag.StringVar(¶ms.config, "config", "/etc/ceph/ceph.conf", "Ceph config") gnuflag.StringVar(¶ms.config, "c", "/etc/ceph/ceph.conf", "Ceph config") gnuflag.StringVar(¶ms.pool, "pool", "bench", "Ceph pool") gnuflag.StringVar(¶ms.pool, "p", "bench", "Ceph pool") gnuflag.StringVar(¶ms.mode, "mode", "osd", "Mode osd or host") gnuflag.StringVar(¶ms.mode, "m", "osd", "Mode osd or host") gnuflag.StringVar(¶ms.define, "define", "", "Define specifically osd or host. osd.X or ceph-host-X") gnuflag.IntVar(¶ms.threadsCount, "threads", 1, "Threads count") gnuflag.IntVar(¶ms.threadsCount, "t", 1, "Threads count on each osd") gnuflag.BoolVar(¶ms.parallel, "parallel", false, "Do test all osd in parallel mode") gnuflag.Parse(true) var err error if params.mode == "osd" && len(params.define) != 0 { if i := strings.HasPrefix(params.define, "osd."); i != true { log.Fatalln("Define correct osd in format osd.X") } } params.blocksize, err = bytefmt.ToBytes(params.bs) if err != nil { log.Println("Can't convert defined block size. 4K block size will be used\n") params.blocksize = 4096 } return params }