...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package sysfs
18
19 import (
20 "path/filepath"
21 "strings"
22
23 "github.com/prometheus/procfs/internal/util"
24 )
25
26
27 type ClockSource struct {
28 Name string
29 Available []string
30 Current string
31 }
32
33
34
35 func (fs FS) ClockSources() ([]ClockSource, error) {
36
37 clocksourcePaths, err := filepath.Glob(fs.sys.Path("devices/system/clocksource/clocksource[0-9]*"))
38 if err != nil {
39 return nil, err
40 }
41
42 clocksources := make([]ClockSource, len(clocksourcePaths))
43 for i, clocksourcePath := range clocksourcePaths {
44 clocksourceName := strings.TrimPrefix(filepath.Base(clocksourcePath), "clocksource")
45
46 clocksource, err := parseClocksource(clocksourcePath)
47 if err != nil {
48 return nil, err
49 }
50 clocksource.Name = clocksourceName
51 clocksources[i] = *clocksource
52 }
53
54 return clocksources, nil
55 }
56
57 func parseClocksource(clocksourcePath string) (*ClockSource, error) {
58
59 stringFiles := []string{
60 "available_clocksource",
61 "current_clocksource",
62 }
63 stringOut := make([]string, len(stringFiles))
64 var err error
65
66 for i, f := range stringFiles {
67 stringOut[i], err = util.SysReadFile(filepath.Join(clocksourcePath, f))
68 if err != nil {
69 return &ClockSource{}, err
70 }
71 }
72
73 return &ClockSource{
74 Available: strings.Fields(stringOut[0]),
75 Current: stringOut[1],
76 }, nil
77 }
78
View as plain text