forked from cerc-io/plugeth
127 lines
2.0 KiB
Go
127 lines
2.0 KiB
Go
|
// Copyright (c) 2012 VMware, Inc.
|
||
|
|
||
|
package gosigar
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// Go version of apr_strfsize
|
||
|
func FormatSize(size uint64) string {
|
||
|
ord := []string{"K", "M", "G", "T", "P", "E"}
|
||
|
o := 0
|
||
|
buf := new(bytes.Buffer)
|
||
|
w := bufio.NewWriter(buf)
|
||
|
|
||
|
if size < 973 {
|
||
|
fmt.Fprintf(w, "%3d ", size)
|
||
|
w.Flush()
|
||
|
return buf.String()
|
||
|
}
|
||
|
|
||
|
for {
|
||
|
remain := size & 1023
|
||
|
size >>= 10
|
||
|
|
||
|
if size >= 973 {
|
||
|
o++
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if size < 9 || (size == 9 && remain < 973) {
|
||
|
remain = ((remain * 5) + 256) / 512
|
||
|
if remain >= 10 {
|
||
|
size++
|
||
|
remain = 0
|
||
|
}
|
||
|
|
||
|
fmt.Fprintf(w, "%d.%d%s", size, remain, ord[o])
|
||
|
break
|
||
|
}
|
||
|
|
||
|
if remain >= 512 {
|
||
|
size++
|
||
|
}
|
||
|
|
||
|
fmt.Fprintf(w, "%3d%s", size, ord[o])
|
||
|
break
|
||
|
}
|
||
|
|
||
|
w.Flush()
|
||
|
return buf.String()
|
||
|
}
|
||
|
|
||
|
func FormatPercent(percent float64) string {
|
||
|
return strconv.FormatFloat(percent, 'f', -1, 64) + "%"
|
||
|
}
|
||
|
|
||
|
func (self *FileSystemUsage) UsePercent() float64 {
|
||
|
b_used := (self.Total - self.Free) / 1024
|
||
|
b_avail := self.Avail / 1024
|
||
|
utotal := b_used + b_avail
|
||
|
used := b_used
|
||
|
|
||
|
if utotal != 0 {
|
||
|
u100 := used * 100
|
||
|
pct := u100 / utotal
|
||
|
if u100%utotal != 0 {
|
||
|
pct += 1
|
||
|
}
|
||
|
return (float64(pct) / float64(100)) * 100.0
|
||
|
}
|
||
|
|
||
|
return 0.0
|
||
|
}
|
||
|
|
||
|
func (self *Uptime) Format() string {
|
||
|
buf := new(bytes.Buffer)
|
||
|
w := bufio.NewWriter(buf)
|
||
|
uptime := uint64(self.Length)
|
||
|
|
||
|
days := uptime / (60 * 60 * 24)
|
||
|
|
||
|
if days != 0 {
|
||
|
s := ""
|
||
|
if days > 1 {
|
||
|
s = "s"
|
||
|
}
|
||
|
fmt.Fprintf(w, "%d day%s, ", days, s)
|
||
|
}
|
||
|
|
||
|
minutes := uptime / 60
|
||
|
hours := minutes / 60
|
||
|
hours %= 24
|
||
|
minutes %= 60
|
||
|
|
||
|
fmt.Fprintf(w, "%2d:%02d", hours, minutes)
|
||
|
|
||
|
w.Flush()
|
||
|
return buf.String()
|
||
|
}
|
||
|
|
||
|
func (self *ProcTime) FormatStartTime() string {
|
||
|
if self.StartTime == 0 {
|
||
|
return "00:00"
|
||
|
}
|
||
|
start := time.Unix(int64(self.StartTime)/1000, 0)
|
||
|
format := "Jan02"
|
||
|
if time.Since(start).Seconds() < (60 * 60 * 24) {
|
||
|
format = "15:04"
|
||
|
}
|
||
|
return start.Format(format)
|
||
|
}
|
||
|
|
||
|
func (self *ProcTime) FormatTotal() string {
|
||
|
t := self.Total / 1000
|
||
|
ss := t % 60
|
||
|
t /= 60
|
||
|
mm := t % 60
|
||
|
t /= 60
|
||
|
hh := t % 24
|
||
|
return fmt.Sprintf("%02d:%02d:%02d", hh, mm, ss)
|
||
|
}
|