sysinfo.go 4.9 KB

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