123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- // Copyright (c) 2012 VMware, Inc.
- package sigar
- 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)
- }
|