1package internal
2
3import (
4 "syscall"
5)
6
7type SystemInfo struct {
8 OS string
9 Hostname string
10 Username string
11 KernelRelease string
12 KernelName string
13 MachineArch string
14 Shell string
15 Uptime Uptime
16 Terminal string
17 MemTotal int
18 MemFree int
19 MemAvailable int
20 DesktopInfo DesktopInfo
21 Locale string
22}
23
24func GetSysinfo() (SystemInfo, error) {
25 var sysinfo SystemInfo
26 var uname syscall.Utsname
27 if err := syscall.Uname(&uname); err != nil {
28 return sysinfo, err
29 }
30 passwd, err := GetPasswd()
31 if err != nil {
32 return sysinfo, err
33 }
34 hostname, err := GetNodename(uname)
35 if err != nil {
36 return sysinfo, err
37 }
38 osRelease, err := GetOsRelease()
39 if err != nil {
40 return sysinfo, err
41 }
42 username, err := GetUsername()
43 if err != nil {
44 return sysinfo, err
45 }
46 kversion, err := GetKernelRelease(uname)
47 if err != nil {
48 return sysinfo, err
49 }
50 kname, err := GetKernelName(uname)
51 if err != nil {
52 return sysinfo, err
53 }
54 march, err := GetMachineArch(uname)
55 if err != nil {
56 return sysinfo, err
57 }
58 shell, err := GetShell(username, passwd)
59 if err != nil {
60 return sysinfo, err
61 }
62 up, err := GetUptime()
63 if err != nil {
64 return sysinfo, err
65 }
66 terminal, err := GetTerminal()
67 if err != nil {
68 return sysinfo, err
69 }
70 meminfo, err := GetMemoryInfo()
71 if err != nil {
72 return sysinfo, err
73 }
74 sysinfo.OS = osRelease["PRETTY_NAME"]
75 sysinfo.Hostname = hostname
76 sysinfo.Username = username
77 sysinfo.KernelRelease = kversion
78 sysinfo.KernelName = kname
79 sysinfo.MachineArch = march
80 sysinfo.Shell = shell
81 sysinfo.Uptime = up
82 sysinfo.Terminal = terminal
83 sysinfo.MemTotal = meminfo["MemTotal"]
84 sysinfo.MemFree = meminfo["MemFree"]
85 sysinfo.MemAvailable = meminfo["MemAvailable"]
86 sysinfo.DesktopInfo = GetDesktopInfo()
87 sysinfo.Locale = GetLocale()
88 return sysinfo, nil
89}