environment.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package service
  2. import (
  3. "crypto/tls"
  4. "encoding/json"
  5. "github.com/0xJacky/Nginx-UI/server/internal/logger"
  6. "github.com/0xJacky/Nginx-UI/server/model"
  7. "github.com/0xJacky/Nginx-UI/server/query"
  8. "io"
  9. "net/http"
  10. "net/url"
  11. "time"
  12. )
  13. type Environment struct {
  14. *model.Environment
  15. Status bool `json:"status"`
  16. NodeInfo
  17. }
  18. func RetrieveEnvironmentList() (envs []*Environment, err error) {
  19. envQuery := query.Environment
  20. data, err := envQuery.Find()
  21. if err != nil {
  22. return
  23. }
  24. for _, v := range data {
  25. t := &Environment{
  26. Environment: v,
  27. }
  28. node, status := t.GetNode()
  29. t.Status = status
  30. t.NodeInfo = node
  31. envs = append(envs, t)
  32. }
  33. return
  34. }
  35. type NodeInfo struct {
  36. RequestNodeSecret string `json:"request_node_secret"`
  37. NodeRuntimeInfo RuntimeInfo `json:"node_runtime_info"`
  38. Version string `json:"version"`
  39. CPUNum int `json:"cpu_num"`
  40. MemoryTotal string `json:"memory_total"`
  41. DiskTotal string `json:"disk_total"`
  42. ResponseAt time.Time `json:"response_at"`
  43. }
  44. func (env *Environment) GetNode() (node NodeInfo, status bool) {
  45. u, err := url.JoinPath(env.URL, "/api/node")
  46. if err != nil {
  47. logger.Error(err)
  48. return
  49. }
  50. client := http.Client{
  51. Transport: &http.Transport{
  52. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  53. },
  54. }
  55. req, err := http.NewRequest("GET", u, nil)
  56. req.Header.Set("X-Node-Secret", env.Token)
  57. resp, err := client.Do(req)
  58. if err != nil {
  59. logger.Error(err)
  60. return
  61. }
  62. defer resp.Body.Close()
  63. bytes, _ := io.ReadAll(resp.Body)
  64. if resp.StatusCode != 200 {
  65. logger.Error(string(bytes))
  66. return
  67. }
  68. logger.Debug(string(bytes))
  69. err = json.Unmarshal(bytes, &node)
  70. if err != nil {
  71. logger.Error(err)
  72. return
  73. }
  74. node.ResponseAt = time.Now()
  75. status = true
  76. return
  77. }