cluster.go 1.4 KB

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