sysinfo.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. // +build linux
  2. package hardwareinfo
  3. import (
  4. "encoding/json"
  5. "log"
  6. "net/http"
  7. "os/exec"
  8. "strconv"
  9. "strings"
  10. )
  11. func Ifconfig(w http.ResponseWriter, r *http.Request) {
  12. cmdin := `ip link show`
  13. cmd := exec.Command("bash", "-c", cmdin)
  14. networkInterfaces, err := cmd.CombinedOutput()
  15. if err != nil {
  16. networkInterfaces = []byte{}
  17. }
  18. nic := strings.Split(string(networkInterfaces), "\n")
  19. var arr []string
  20. for _, info := range nic {
  21. thisInfo := string(info)
  22. arr = append(arr, thisInfo)
  23. }
  24. var jsonData []byte
  25. jsonData, err = json.Marshal(arr)
  26. if err != nil {
  27. log.Println(err)
  28. }
  29. sendTextResponse(w, string(jsonData))
  30. }
  31. func GetDriveStat(w http.ResponseWriter, r *http.Request) {
  32. //Get drive status using df command
  33. cmdin := `df -k | sed -e /Filesystem/d`
  34. cmd := exec.Command("bash", "-c", cmdin)
  35. dev, err := cmd.Output()
  36. if err != nil {
  37. dev = []byte{}
  38. }
  39. drives := strings.Split(string(dev), "\n")
  40. if len(drives) == 0 {
  41. sendErrorResponse(w, "Invalid disk information")
  42. return
  43. }
  44. var arr []LogicalDisk
  45. for _, driveInfo := range drives {
  46. if driveInfo == "" {
  47. continue
  48. }
  49. for strings.Contains(driveInfo, " ") {
  50. driveInfo = strings.Replace(driveInfo, " ", " ", -1)
  51. }
  52. driveInfoChunk := strings.Split(driveInfo, " ")
  53. tmp, _ := strconv.Atoi(driveInfoChunk[3])
  54. freespaceInByte := int64(tmp)
  55. LogicalDisk := LogicalDisk{
  56. DriveLetter: driveInfoChunk[5],
  57. FileSystem: driveInfoChunk[0],
  58. FreeSpace: strconv.FormatInt(freespaceInByte*1024, 10), //df show disk space in 1KB blocks
  59. }
  60. arr = append(arr, LogicalDisk)
  61. }
  62. var jsonData []byte
  63. jsonData, err = json.Marshal(arr)
  64. if err != nil {
  65. log.Println(err)
  66. }
  67. sendTextResponse(w, string(jsonData))
  68. }
  69. func GetUSB(w http.ResponseWriter, r *http.Request) {
  70. cmdin := `lsusb`
  71. cmd := exec.Command("bash", "-c", cmdin)
  72. usbd, err := cmd.CombinedOutput()
  73. if err != nil {
  74. usbd = []byte{}
  75. }
  76. usbDrives := strings.Split(string(usbd), "\n")
  77. var arr []string
  78. for _, info := range usbDrives {
  79. arr = append(arr, info)
  80. }
  81. var jsonData []byte
  82. jsonData, err = json.Marshal(arr)
  83. if err != nil {
  84. log.Println(err)
  85. }
  86. sendTextResponse(w, string(jsonData))
  87. }
  88. func GetCPUInfo(w http.ResponseWriter, r *http.Request) {
  89. cmdin := `cat /proc/cpuinfo | grep -m1 "model name"`
  90. cmd := exec.Command("bash", "-c", cmdin)
  91. hardware, err := cmd.CombinedOutput()
  92. if err != nil {
  93. hardware = []byte("??? ")
  94. }
  95. cmdin = `lscpu | grep -m1 "Model name"`
  96. cmd = exec.Command("bash", "-c", cmdin)
  97. cpuModel, err := cmd.CombinedOutput()
  98. if err != nil {
  99. cpuModel = []byte("Generic Processor")
  100. }
  101. cmdin = `lscpu | grep "CPU max MHz"`
  102. cmd = exec.Command("bash", "-c", cmdin)
  103. speed, err := cmd.CombinedOutput()
  104. if err != nil {
  105. cmdin = `cat /proc/cpuinfo | grep -m1 "cpu MHz"`
  106. cmd = exec.Command("bash", "-c", cmdin)
  107. intelSpeed, err := cmd.CombinedOutput()
  108. if err != nil {
  109. speed = []byte("??? ")
  110. }
  111. speed = intelSpeed
  112. }
  113. cmdin = `cat /proc/cpuinfo | grep -m1 "Hardware"`
  114. cmd = exec.Command("bash", "-c", cmdin)
  115. cpuhardware, err := cmd.CombinedOutput()
  116. if err != nil {
  117. } else {
  118. hardware = cpuhardware
  119. }
  120. //On ARM
  121. cmdin = `cat /proc/cpuinfo | grep -m1 "Revision"`
  122. cmd = exec.Command("bash", "-c", cmdin)
  123. revision, err := cmd.CombinedOutput()
  124. if err != nil {
  125. //On x64
  126. cmdin = `cat /proc/cpuinfo | grep -m1 "family"`
  127. cmd = exec.Command("bash", "-c", cmdin)
  128. intelrev, err := cmd.CombinedOutput()
  129. if err != nil {
  130. revision = []byte("??? ")
  131. } else {
  132. revision = intelrev
  133. }
  134. }
  135. //Get Arch
  136. cmdin = `uname --m`
  137. cmd = exec.Command("bash", "-c", cmdin)
  138. arch, err := cmd.CombinedOutput()
  139. if err != nil {
  140. arch = []byte("??? ")
  141. }
  142. CPUInfo := CPUInfo{
  143. Freq: filterGrepResults(string(speed), ":"),
  144. Hardware: filterGrepResults(string(hardware), ":"),
  145. Instruction: filterGrepResults(string(arch), ":"),
  146. Model: filterGrepResults(string(cpuModel), ":"),
  147. Revision: filterGrepResults(string(revision), ":"),
  148. }
  149. var jsonData []byte
  150. jsonData, err = json.Marshal(CPUInfo)
  151. if err != nil {
  152. log.Println(err)
  153. }
  154. sendTextResponse(w, string(jsonData))
  155. }
  156. func GetRamInfo(w http.ResponseWriter, r *http.Request) {
  157. cmd := exec.Command("grep", "MemTotal", "/proc/meminfo")
  158. out, _ := cmd.CombinedOutput()
  159. strOut := string(out)
  160. strOut = strings.ReplaceAll(strOut, "MemTotal:", "")
  161. strOut = strings.ReplaceAll(strOut, "kB", "")
  162. strOut = strings.ReplaceAll(strOut, " ", "")
  163. strOut = strings.ReplaceAll(strOut, "\n", "")
  164. ramSize, _ := strconv.ParseInt(strOut, 10, 64)
  165. ramSizeInt := ramSize * 1000
  166. var jsonData []byte
  167. jsonData, err := json.Marshal(ramSizeInt)
  168. if err != nil {
  169. log.Println(err)
  170. }
  171. sendTextResponse(w, string(jsonData))
  172. }