mirror of
				https://github.com/prometheus/node_exporter.git
				synced 2025-08-20 18:33:52 -07:00 
			
		
		
		
	Uses godep to vendor dependencies. Godeps is not necessary during build, golang's new vendor support is used instead.
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package procfs
 | |
| 
 | |
| import (
 | |
| 	"bufio"
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| // Stat represents kernel/system statistics.
 | |
| type Stat struct {
 | |
| 	// Boot time in seconds since the Epoch.
 | |
| 	BootTime int64
 | |
| }
 | |
| 
 | |
| // NewStat returns kernel/system statistics read from /proc/stat.
 | |
| func NewStat() (Stat, error) {
 | |
| 	fs, err := NewFS(DefaultMountPoint)
 | |
| 	if err != nil {
 | |
| 		return Stat{}, err
 | |
| 	}
 | |
| 
 | |
| 	return fs.NewStat()
 | |
| }
 | |
| 
 | |
| // NewStat returns an information about current kernel/system statistics.
 | |
| func (fs FS) NewStat() (Stat, error) {
 | |
| 	f, err := os.Open(fs.Path("stat"))
 | |
| 	if err != nil {
 | |
| 		return Stat{}, err
 | |
| 	}
 | |
| 	defer f.Close()
 | |
| 
 | |
| 	s := bufio.NewScanner(f)
 | |
| 	for s.Scan() {
 | |
| 		line := s.Text()
 | |
| 		if !strings.HasPrefix(line, "btime") {
 | |
| 			continue
 | |
| 		}
 | |
| 		fields := strings.Fields(line)
 | |
| 		if len(fields) != 2 {
 | |
| 			return Stat{}, fmt.Errorf("couldn't parse %s line %s", f.Name(), line)
 | |
| 		}
 | |
| 		i, err := strconv.ParseInt(fields[1], 10, 32)
 | |
| 		if err != nil {
 | |
| 			return Stat{}, fmt.Errorf("couldn't parse %s: %s", fields[1], err)
 | |
| 		}
 | |
| 		return Stat{BootTime: i}, nil
 | |
| 	}
 | |
| 	if err := s.Err(); err != nil {
 | |
| 		return Stat{}, fmt.Errorf("couldn't parse %s: %s", f.Name(), err)
 | |
| 	}
 | |
| 
 | |
| 	return Stat{}, fmt.Errorf("couldn't parse %s, missing btime", f.Name())
 | |
| }
 |