mirror of
https://github.com/prometheus/node_exporter.git
synced 2024-12-30 07:40:09 +01:00
33f99c4fc1
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())
|
|
}
|