environment.go 1.8 KB

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