status/core/boottime.go
2023-12-11 20:31:42 +00:00

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")
}