github.com/elastic/gosigar@v0.14.3/sigar_format.go (about)

     1  // Copyright (c) 2012 VMware, Inc.
     2  
     3  package gosigar
     4  
     5  import (
     6  	"bufio"
     7  	"bytes"
     8  	"fmt"
     9  	"strconv"
    10  	"time"
    11  )
    12  
    13  // Go version of apr_strfsize
    14  func FormatSize(size uint64) string {
    15  	ord := []string{"K", "M", "G", "T", "P", "E"}
    16  	o := 0
    17  	buf := new(bytes.Buffer)
    18  	w := bufio.NewWriter(buf)
    19  
    20  	if size < 973 {
    21  		fmt.Fprintf(w, "%3d ", size)
    22  		w.Flush()
    23  		return buf.String()
    24  	}
    25  
    26  	for {
    27  		remain := size & 1023
    28  		size >>= 10
    29  
    30  		if size >= 973 {
    31  			o++
    32  			continue
    33  		}
    34  
    35  		if size < 9 || (size == 9 && remain < 973) {
    36  			remain = ((remain * 5) + 256) / 512
    37  			if remain >= 10 {
    38  				size++
    39  				remain = 0
    40  			}
    41  
    42  			fmt.Fprintf(w, "%d.%d%s", size, remain, ord[o])
    43  			break
    44  		}
    45  
    46  		if remain >= 512 {
    47  			size++
    48  		}
    49  
    50  		fmt.Fprintf(w, "%3d%s", size, ord[o])
    51  		break
    52  	}
    53  
    54  	w.Flush()
    55  	return buf.String()
    56  }
    57  
    58  func FormatPercent(percent float64) string {
    59  	return strconv.FormatFloat(percent, 'f', -1, 64) + "%"
    60  }
    61  
    62  func (self *FileSystemUsage) UsePercent() float64 {
    63  	b_used := (self.Total - self.Free) / 1024
    64  	b_avail := self.Avail / 1024
    65  	utotal := b_used + b_avail
    66  	used := b_used
    67  
    68  	if utotal != 0 {
    69  		u100 := used * 100
    70  		pct := u100 / utotal
    71  		if u100%utotal != 0 {
    72  			pct += 1
    73  		}
    74  		return (float64(pct) / float64(100)) * 100.0
    75  	}
    76  
    77  	return 0.0
    78  }
    79  
    80  func (self *Uptime) Format() string {
    81  	buf := new(bytes.Buffer)
    82  	w := bufio.NewWriter(buf)
    83  	uptime := uint64(self.Length)
    84  
    85  	days := uptime / (60 * 60 * 24)
    86  
    87  	if days != 0 {
    88  		s := ""
    89  		if days > 1 {
    90  			s = "s"
    91  		}
    92  		fmt.Fprintf(w, "%d day%s, ", days, s)
    93  	}
    94  
    95  	minutes := uptime / 60
    96  	hours := minutes / 60
    97  	hours %= 24
    98  	minutes %= 60
    99  
   100  	fmt.Fprintf(w, "%2d:%02d", hours, minutes)
   101  
   102  	w.Flush()
   103  	return buf.String()
   104  }
   105  
   106  func (self *ProcTime) FormatStartTime() string {
   107  	if self.StartTime == 0 {
   108  		return "00:00"
   109  	}
   110  	start := time.Unix(int64(self.StartTime)/1000, 0)
   111  	format := "Jan02"
   112  	if time.Since(start).Seconds() < (60 * 60 * 24) {
   113  		format = "15:04"
   114  	}
   115  	return start.Format(format)
   116  }
   117  
   118  func (self *ProcTime) FormatTotal() string {
   119  	t := self.Total / 1000
   120  	ss := t % 60
   121  	t /= 60
   122  	mm := t % 60
   123  	t /= 60
   124  	hh := t % 24
   125  	return fmt.Sprintf("%02d:%02d:%02d", hh, mm, ss)
   126  }