Update cli to minio-io/cli

This commit is contained in:
Harshavardhana 2015-04-02 12:48:22 -07:00
parent 7a117bb6c5
commit 92136d49fd
5 changed files with 86 additions and 11 deletions

4
Godeps/Godeps.json generated
View file

@ -23,8 +23,8 @@
},
{
"ImportPath": "github.com/minio-io/cli",
"Comment": "1.2.0-99-g1ee5c11",
"Rev": "1ee5c115af7856a16f133e2f2d3d9f91895c2ddb"
"Comment": "1.2.0-100-g6d6f8d3",
"Rev": "6d6f8d3cc162bfcb60379888e2f37d73ff6a6253"
},
{
"ImportPath": "github.com/minio-io/erasure",

View file

@ -3,12 +3,13 @@ package cli
import (
"fmt"
"io"
"io/ioutil"
"os"
"strings"
"time"
"io/ioutil"
"text/tabwriter"
"text/template"
"time"
)
// App is the main structure of a cli application. It is recomended that
@ -44,6 +45,8 @@ type App struct {
CommandNotFound func(context *Context, command string)
// Compilation date
Compiled time.Time
// ExtraInfo pass additional info as a key value map
ExtraInfo map[string]string
// List of all authors who contributed
Authors []Author
// Name of Author (Note: Use App.Authors, this is deprecated)

View file

@ -14,9 +14,12 @@ USAGE:
VERSION:
{{.Version}}
AUTHOR(S):
{{range .Authors}}{{ . }} {{end}}
BUILD:
{{.Compiled}}
{{range $key, $value := .ExtraInfo}}
{{ $key }}:
{{ $value }}
{{ end }}
COMMANDS:
{{range .Commands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}}
{{end}}{{if .Flags}}

View file

@ -10,10 +10,9 @@ cat > $CONST_FILE <<EOF
package main
const (
gitCommitHash = "__GIT_COMMIT_HASH__"
minioGitCommitHash = "__GIT_COMMIT_HASH__"
)
EOF
commit_id=$(git log --format="%H" -n 1)
sed -i "s/__GIT_COMMIT_HASH__/$commit_id/" $CONST_FILE

74
main.go
View file

@ -17,7 +17,12 @@
package main
import (
"fmt"
"os"
"os/user"
"runtime"
"strconv"
"strings"
"time"
"github.com/minio-io/cli"
@ -26,6 +31,8 @@ import (
"github.com/minio-io/minio/pkg/utils/log"
)
var globalDebugFlag = false
var flags = []cli.Flag{
cli.StringFlag{
Name: "domain,d",
@ -59,6 +66,18 @@ var flags = []cli.Flag{
Value: "donut",
Usage: "valid entries: file,inmemory,donut",
},
cli.BoolFlag{
Name: "debug",
Usage: "print debug information",
},
}
func init() {
// Check for the environment early on and gracefuly report.
_, err := user.Current()
if err != nil {
log.Fatalf("minio: Unable to obtain user's home directory. \nError: %s\n", err)
}
}
func getDriverType(input string) server.DriverType {
@ -117,20 +136,71 @@ func runCmd(c *cli.Context) {
server.Start(serverConfigs)
}
// Convert bytes to human readable string. Like a 2 MB, 64.2 KB, 52 B
func formatBytes(i int64) (result string) {
switch {
case i > (1024 * 1024 * 1024 * 1024):
result = fmt.Sprintf("%.02f TB", float64(i)/1024/1024/1024/1024)
case i > (1024 * 1024 * 1024):
result = fmt.Sprintf("%.02f GB", float64(i)/1024/1024/1024)
case i > (1024 * 1024):
result = fmt.Sprintf("%.02f MB", float64(i)/1024/1024)
case i > 1024:
result = fmt.Sprintf("%.02f KB", float64(i)/1024)
default:
result = fmt.Sprintf("%d B", i)
}
result = strings.Trim(result, " ")
return
}
// Tries to get os/arch/platform specific information
// Returns a map of current os/arch/platform/memstats
func getSystemData() map[string]string {
host, err := os.Hostname()
if err != nil {
host = ""
}
memstats := &runtime.MemStats{}
runtime.ReadMemStats(memstats)
mem := fmt.Sprintf("Used: %s | Allocated: %s | Used-Heap: %s | Allocated-Heap: %s",
formatBytes(int64(memstats.Alloc)),
formatBytes(int64(memstats.TotalAlloc)),
formatBytes(int64(memstats.HeapAlloc)),
formatBytes(int64(memstats.HeapSys)))
platform := fmt.Sprintf("Host: %s | OS: %s | Arch: %s",
host,
runtime.GOOS,
runtime.GOARCH)
goruntime := fmt.Sprintf("Version: %s | CPUs: %s", runtime.Version(), strconv.Itoa(runtime.NumCPU()))
return map[string]string{
"PLATFORM": platform,
"RUNTIME": goruntime,
"MEM": mem,
}
}
func main() {
// set up iodine
iodine.SetGlobalState("minio.git", gitCommitHash)
iodine.SetGlobalState("minio.git", minioGitCommitHash)
iodine.SetGlobalState("minio.starttime", time.Now().Format(time.RFC3339))
// set up app
app := cli.NewApp()
app.Name = "minio"
app.Version = gitCommitHash
app.Version = minioGitCommitHash
app.Author = "Minio.io"
app.Usage = "Minimalist Object Storage"
app.EnableBashCompletion = true
app.Flags = flags
app.Action = runCmd
app.Before = func(c *cli.Context) error {
globalDebugFlag = c.GlobalBool("debug")
if globalDebugFlag {
app.ExtraInfo = getSystemData()
}
return nil
}
err := app.Run(os.Args)
if err != nil {
log.Error.Println(err)