Newer
Older
// "fmt"
"github.com/prometheus/procfs"
log "github.com/sirupsen/logrus"
type system struct {
// procfs handle
pfs procfs.FS
// NewSystem() Initalizes OS specific interfaces
// Linux:
// - Access to procfs
func NewSystem() (System, error) {
newProcFS, err := procfs.NewFS("/proc")
if err != nil {
return nil, err
}
return &system{
pfs: newProcFS,
}, nil
func (sys *system) SetHostname(hostname *string) error {
// TODO: potentially some safety checks?
return syscall.Sethostname([]byte(*hostname))
func (sys *system) GetFreeMemory() uint64 {
memInfo, err := sys.pfs.Meminfo()
if err != nil {
// TODO: better error handling is required
log.Error("GetTotalMemory ", err)
return 0
}
return *memInfo.MemFree
func (sys *system) GetTotalMemory() uint64 {
memInfo, err := sys.pfs.Meminfo()
if err != nil {
// TODO: better error handling is required
log.Error("GetTotalMemory ", err)
return 0
}
return *memInfo.MemTotal
func (sys *system) GetUsedMemory() uint64 {
memInfo, err := sys.pfs.Meminfo()
if err != nil {
// TODO: better error handling is required
log.Error("GetTotalMemory ", err)
return 0
}
return *memInfo.MemTotal - *memInfo.MemFree
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
func (sys *system) GetSoftwareVersion() (string, error) {
var returnString string
var osID string
var osVersion string
// open corresponding file with OS version in it
// seems to be /etc/os-release on Linux
osVersionFile, err := os.Open("/etc/os-release")
if err != nil {
return "", err
}
fileRdr := bufio.NewScanner((osVersionFile))
fileRdr.Split(bufio.ScanLines)
// go line by line and look for
// ID and VERSION_ID entries
// this version may result in empty or incomplete information
// TODO: better error handling while parsing the file.
for fileRdr.Scan() {
strElement := strings.FieldsFunc(fileRdr.Text(), func(r rune) bool {
if r == '=' {
return true
} else if r == '"' {
return true
}
return false
})
if strElement[0] == "ID" {
osID = strElement[1]
}
if strElement[0] == "VERSION_ID" {
osVersion = strElement[1]
}
}
returnString = osID + ":" + osVersion
return returnString, nil
Malte Bauch
committed
func (sys *system) GetMotd() (string, error) {
motdMessage, err := os.ReadFile("/etc/motd")
if err == nil {
return string(motdMessage), nil
}
cmd := exec.Command("run-parts", "/etc/update-motd.d/")
motdMessage, err = cmd.Output()
Malte Bauch
committed
if err != nil {
return "", err
}
return string(motdMessage), nil
}
func (sys *system) SetMotd(message string) error {
return os.WriteFile("/etc/motd", []byte(message), 0644)
}