package main import ( "code.cloudfoundry.org/bytefmt" "fmt" "github.com/juju/gnuflag" "log" "os" "time" ) func route() params { params := params{} var showversion bool const version = 1.3 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. Example: osd.X, ceph-host-X") gnuflag.StringVar(¶ms.rdefine, "rdefine", "", "Rdefine specifically osd or host in Posix Regex (replaces define). Example: osd.X, ceph-host-X, osd.[0-9]1?$, ceph-host-[1-2]~hdd") 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.BoolVar(¶ms.disablecheck, "disablepoolsizecheck", false, "Do test all osd in parallel mode") gnuflag.StringVar(¶ms.cpuprofile, "cpuprofile", "", "Name of cpuprofile") gnuflag.StringVar(¶ms.memprofile, "memprofile", "", "Name of memprofile") gnuflag.BoolVar(&showversion, "version", false, "Show sversion") gnuflag.BoolVar(&showversion, "v", false, "Show version") gnuflag.Parse(true) if showversion { fmt.Printf("go-bench version v%v\n", version) os.Exit(0) } 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 }