cluster.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package cluster
  2. import (
  3. "github.com/0xJacky/Nginx-UI/model"
  4. "github.com/0xJacky/Nginx-UI/query"
  5. "github.com/0xJacky/Nginx-UI/settings"
  6. "github.com/uozi-tech/cosy/logger"
  7. "gorm.io/gen/field"
  8. "net/url"
  9. "strings"
  10. )
  11. func RegisterPredefinedNodes() {
  12. if len(settings.ClusterSettings.Node) == 0 {
  13. return
  14. }
  15. q := query.Environment
  16. for _, nodeUrl := range settings.ClusterSettings.Node {
  17. func() {
  18. node, err := parseNodeUrl(nodeUrl)
  19. if err != nil {
  20. logger.Error(nodeUrl, err)
  21. return
  22. }
  23. if node.Name == "" {
  24. logger.Error(nodeUrl, "Node name is required")
  25. return
  26. }
  27. if node.URL == "" {
  28. logger.Error(nodeUrl, "Node URL is required")
  29. return
  30. }
  31. if node.Token == "" {
  32. logger.Error(nodeUrl, "Node Token is required")
  33. return
  34. }
  35. _, err = q.Where(q.URL.Eq(node.URL)).
  36. Attrs(field.Attrs(node)).
  37. FirstOrCreate()
  38. if err != nil {
  39. logger.Error(node.URL, err)
  40. }
  41. }()
  42. }
  43. }
  44. func parseNodeUrl(nodeUrl string) (env *model.Environment, err error) {
  45. u, err := url.Parse(nodeUrl)
  46. if err != nil {
  47. return
  48. }
  49. var sb strings.Builder
  50. sb.WriteString(u.Scheme)
  51. sb.WriteString("://")
  52. sb.WriteString(u.Host)
  53. sb.WriteString(u.Path)
  54. env = &model.Environment{
  55. Name: u.Query().Get("name"),
  56. URL: sb.String(),
  57. Token: u.Query().Get("node_secret"),
  58. Enabled: u.Query().Get("enabled") == "true",
  59. }
  60. return
  61. }