aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/elastic/gosigar/sigar_format.go
blob: ac56c9873c52a907fd8cf9f37614bd4743364800 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// 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)
}