internal/host/host.go
// Copyright 2021 Jeffrey H. Johnson <trnsz@pobox.com>// Copyright 2018 psgo authors//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License. // Package host extracts data from the host, such as the system's boot time// or the tick rate of the system clock.package host import ( "bufio" "fmt" "os" "strconv" "strings") // BootTime parses /proc/uptime returns the boot time in seconds since the// Epoch, 1970-01-01 00:00:00 +0000 (UTC).Function `BootTime` has 5 return statements (exceeds 4 allowed).func BootTime() (int64, error) { if bootTime != nil { return *bootTime, nil } f, err := os.Open("/proc/stat") if err != nil { return 0, err } btimeStr := "" scanner := bufio.NewScanner(f) for scanner.Scan() { fields := strings.Fields(scanner.Text()) if len(fields) < 2 { continue } if fields[0] == "btime" { btimeStr = fields[1] } } if btimeStr == "" { return 0, fmt.Errorf("couldn't extract boot time from /proc/stat") } btimeSec, err := strconv.ParseInt(btimeStr, 10, 64) if err != nil { return 0, fmt.Errorf( "error parsing boot time from /proc/stat: %w", err, ) } bootTime = &btimeSec return btimeSec, nil}