summaryrefslogtreecommitdiff
path: root/internal/recordline/recordline.go
blob: 077fa351aa01a97ee8731bda2721709edcbbbe39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package recordline

import (
	"strconv"
	"strings"
)

type Fields struct {
	Uptime      uint64
	BootTime    uint64
	OS          string
	KernelName  string
	KernelMajor string
}

func Parse(line string) (Fields, bool) {
	line = strings.TrimSpace(line)
	if line == "" {
		return Fields{}, false
	}
	parts := strings.SplitN(line, ":", 3)
	if len(parts) != 3 {
		return Fields{}, false
	}
	uptime, err := strconv.ParseUint(parts[0], 10, 64)
	if err != nil {
		return Fields{}, false
	}
	bootTime, err := strconv.ParseUint(parts[1], 10, 64)
	if err != nil {
		return Fields{}, false
	}
	osStr := parts[2]
	kernelName := osStr
	if i := strings.Index(osStr, " "); i > 0 {
		kernelName = osStr[:i]
	}
	kernelMajor := kernelName + " "
	rest := osStr
	if i := strings.Index(osStr, " "); i >= 0 {
		rest = osStr[i+1:]
	}
	if j := strings.Index(rest, "."); j >= 0 {
		kernelMajor += rest[:j] + "..."
	} else {
		kernelMajor += rest + "..."
	}
	return Fields{
		Uptime:      uptime,
		BootTime:    bootTime,
		OS:          osStr,
		KernelName:  kernelName,
		KernelMajor: kernelMajor,
	}, true
}