41 lines
704 B
Go
41 lines
704 B
Go
/// Get system boot time
|
|
/// should fail on not-linux
|
|
|
|
package core
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type Time = time.Time
|
|
|
|
func GetBootTime() (Time, error) {
|
|
file, err := os.Open("/proc/stat")
|
|
if err != nil {
|
|
return Time{}, err
|
|
}
|
|
|
|
scanner := bufio.NewScanner(file)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
s_btime := "btime "
|
|
if strings.HasPrefix(line, s_btime) {
|
|
btime, err := strconv.ParseInt(line[len(s_btime):], 10, 64)
|
|
if err != nil {
|
|
return Time{}, err
|
|
}
|
|
return time.Unix(btime, 0), nil
|
|
}
|
|
}
|
|
|
|
if err := scanner.Err(); err != nil {
|
|
return Time{}, err
|
|
}
|
|
|
|
return Time{}, fmt.Errorf("btime (boot time) not found in /proc/stat")
|
|
}
|