pkg.re/essentialkaos/ek.v11@v12.41.0+incompatible/system/info_darwin.go (about) 1 // Package system provides methods for working with system data (metrics/users) 2 package system 3 4 // ////////////////////////////////////////////////////////////////////////////////// // 5 // // 6 // Copyright (c) 2022 ESSENTIAL KAOS // 7 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 8 // // 9 // ////////////////////////////////////////////////////////////////////////////////// // 10 11 import ( 12 "errors" 13 "os/exec" 14 "strings" 15 "syscall" 16 ) 17 18 // ////////////////////////////////////////////////////////////////////////////////// // 19 20 // GetSystemInfo returns system info 21 func GetSystemInfo() (*SystemInfo, error) { 22 hostname, err := syscall.Sysctl("kern.hostname") 23 24 if err != nil || hostname == "" { 25 return nil, errors.New("Can't read hostname info") 26 } 27 28 os, err := syscall.Sysctl("kern.ostype") 29 30 if err != nil || os == "" { 31 return nil, errors.New("Can't read os info") 32 } 33 34 kernel, err := syscall.Sysctl("kern.osrelease") 35 36 if err != nil || kernel == "" { 37 return nil, errors.New("Can't read kernel info") 38 } 39 40 arch, err := syscall.Sysctl("kern.version") 41 42 if err != nil || arch == "" { 43 return nil, errors.New("Can't read arch info") 44 } 45 46 return &SystemInfo{ 47 Hostname: hostname, 48 OS: os, 49 Distribution: DARWIN_OSX, 50 Version: getMacOSVersion(), 51 Kernel: kernel, 52 Arch: getMacOSArch(arch), 53 ArchBits: 64, 54 }, nil 55 } 56 57 // ////////////////////////////////////////////////////////////////////////////////// // 58 59 func getMacOSArch(archInfo string) string { 60 switch { 61 case strings.Contains(archInfo, "X86_64"): 62 return "x86_64" 63 case strings.Contains(archInfo, "ARM64"): 64 return "arm64" 65 } 66 67 return "unknown" 68 } 69 70 func getMacOSVersion() string { 71 cmd := exec.Command("sw_vers", "-productVersion") 72 73 versionData, err := cmd.Output() 74 75 if err != nil { 76 return "" 77 } 78 79 return strings.Trim(string(versionData), "\r\n") 80 }