package main import ( "code.cloudfoundry.org/bytefmt" "github.com/juju/gnuflag" "log" "strings" "time" ) func Route() Params { params := Params{} gnuflag.DurationVar(¶ms.duration, "duration", 30*time.Second, "Time limit for each test in seconds") gnuflag.DurationVar(¶ms.duration, "d", 30*time.Second, "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.os, "objectsize", "4M", "Object 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.os, "o", "4M", "Object 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.define, "define", "", "Define specifically osd or host. osd.X or ceph-host-X") gnuflag.Uint64Var(¶ms.threadsCount, "threads", 1, "Threads count") gnuflag.Uint64Var(¶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) 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") } } blocksize, err := bytefmt.ToBytes(params.bs) params.blocksize = blocksize if err != nil { log.Println("Can't convert defined block size. 4K block size will be used") params.blocksize = 4096 } objsize, err := bytefmt.ToBytes(params.os) params.objectsize = objsize if err != nil { log.Println("Can't convert defined block size. 4K block size will be used") params.objectsize = 4194304 } if params.blocksize > params.objectsize { log.Fatalf("Current block size: %v\nCurrent object size: %v\nObject must be bigger or equal than block size", params.blocksize, params.objectsize) } if params.objectsize/params.blocksize < 2 { log.Printf("Current block size: %v\nCurrent object size: %v\nOffset always will be 0", params.blocksize, params.objectsize) } return params }