environment.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. ResponseAt time.Time `json:"response_at"`
  42. }
  43. func (env *Environment) GetNode() (node NodeInfo, status bool) {
  44. u, err := url.JoinPath(env.URL, "/api/node")
  45. if err != nil {
  46. logger.Error(err)
  47. return
  48. }
  49. client := http.Client{
  50. Transport: &http.Transport{
  51. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  52. },
  53. }
  54. req, err := http.NewRequest("GET", u, nil)
  55. req.Header.Set("X-Node-Secret", env.Token)
  56. resp, err := client.Do(req)
  57. if err != nil {
  58. logger.Error(err)
  59. return
  60. }
  61. defer resp.Body.Close()
  62. bytes, _ := io.ReadAll(resp.Body)
  63. if resp.StatusCode != 200 {
  64. logger.Error(string(bytes))
  65. return
  66. }
  67. logger.Debug(string(bytes))
  68. err = json.Unmarshal(bytes, &node)
  69. if err != nil {
  70. logger.Error(err)
  71. return
  72. }
  73. node.ResponseAt = time.Now()
  74. status = true
  75. return
  76. }