package test

import (
    "fmt"
    humanize "github.com/dustin/go-humanize"
    "github.com/mackerelio/go-osstat/cpu"
    "github.com/mackerelio/go-osstat/memory"
    "github.com/minio/minio/pkg/disk"
    "os"
    "runtime"
    "testing"
    "time"
)

func TestGetArch(t *testing.T) {
    fmt.Println("os:", runtime.GOOS)
    fmt.Println("threads:", runtime.GOMAXPROCS(0))

    memoryStat, err := memory.Get()
    if err != nil {
        fmt.Fprintf(os.Stderr, "%s\n", err)
        return
    }
    fmt.Println("memory total:", humanize.Bytes(memoryStat.Total))
    fmt.Println("memory used:", humanize.Bytes(memoryStat.Used))
    fmt.Println("memory cached:", humanize.Bytes(memoryStat.Cached))
    fmt.Println("memory free:", humanize.Bytes(memoryStat.Free))

    before, err := cpu.Get()
    if err != nil {
        fmt.Println(err)
    }
    time.Sleep(time.Duration(1) * time.Second)
    after, err := cpu.Get()
    if err != nil {
        fmt.Println(err)
    }
    total := float64(after.Total - before.Total)
    fmt.Printf("cpu user: %f %%\n", float64(after.User-before.User)/total*100)
    fmt.Printf("cpu system: %f %%\n", float64(after.System-before.System)/total*100)
    fmt.Printf("cpu idle: %f %%\n", float64(after.Idle-before.Idle)/total*100)

    err = diskUsage(".")

    if err != nil {
        fmt.Println(err)
    }
}

func diskUsage(path string) error {
    di, err := disk.GetInfo(path)
    if err != nil {
        return err
    }
    percentage := (float64(di.Total-di.Free) / float64(di.Total)) * 100
    fmt.Printf("%s of %s disk space used (%0.2f%%)\n",
        humanize.Bytes(di.Total-di.Free),
        humanize.Bytes(di.Total),
        percentage,
    )
    return nil
}
