environment.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package cluster
  2. import (
  3. "github.com/0xJacky/Nginx-UI/api"
  4. "github.com/0xJacky/Nginx-UI/internal/analytic"
  5. "github.com/0xJacky/Nginx-UI/internal/cluster"
  6. "github.com/0xJacky/Nginx-UI/model"
  7. "github.com/0xJacky/Nginx-UI/query"
  8. "github.com/0xJacky/Nginx-UI/settings"
  9. "github.com/gin-gonic/gin"
  10. "github.com/spf13/cast"
  11. "github.com/uozi-tech/cosy"
  12. "gorm.io/gorm"
  13. "net/http"
  14. )
  15. func GetEnvironment(c *gin.Context) {
  16. id := cast.ToInt(c.Param("id"))
  17. envQuery := query.Environment
  18. env, err := envQuery.FirstByID(id)
  19. if err != nil {
  20. api.ErrHandler(c, err)
  21. return
  22. }
  23. c.JSON(http.StatusOK, analytic.GetNode(env))
  24. }
  25. func GetEnvironmentList(c *gin.Context) {
  26. core := cosy.Core[model.Environment](c).
  27. SetFussy("name")
  28. // fix for sqlite
  29. if c.Query("enabled") != "" {
  30. core.GormScope(func(tx *gorm.DB) *gorm.DB {
  31. return tx.Where("enabled = ?", cast.ToInt(cast.ToBool(c.Query("enabled"))))
  32. })
  33. }
  34. core.SetTransformer(func(m *model.Environment) any {
  35. return analytic.GetNode(m)
  36. }).PagingList()
  37. }
  38. func AddEnvironment(c *gin.Context) {
  39. cosy.Core[model.Environment](c).SetValidRules(gin.H{
  40. "name": "required",
  41. "url": "required,url",
  42. "token": "required",
  43. "enabled": "omitempty,boolean",
  44. }).ExecutedHook(func(c *cosy.Ctx[model.Environment]) {
  45. go analytic.RestartRetrieveNodesStatus()
  46. }).Create()
  47. }
  48. func EditEnvironment(c *gin.Context) {
  49. cosy.Core[model.Environment](c).SetValidRules(gin.H{
  50. "name": "required",
  51. "url": "required,url",
  52. "token": "required",
  53. "enabled": "omitempty,boolean",
  54. }).ExecutedHook(func(c *cosy.Ctx[model.Environment]) {
  55. go analytic.RestartRetrieveNodesStatus()
  56. }).Modify()
  57. }
  58. func DeleteEnvironment(c *gin.Context) {
  59. id := cast.ToInt(c.Param("id"))
  60. envQuery := query.Environment
  61. env, err := envQuery.FirstByID(id)
  62. if err != nil {
  63. api.ErrHandler(c, err)
  64. return
  65. }
  66. err = envQuery.DeleteByID(env.ID)
  67. if err != nil {
  68. api.ErrHandler(c, err)
  69. return
  70. }
  71. go analytic.RestartRetrieveNodesStatus()
  72. c.JSON(http.StatusNoContent, nil)
  73. }
  74. func LoadEnvironmentFromSettings(c *gin.Context) {
  75. err := settings.ReloadCluster()
  76. if err != nil {
  77. api.ErrHandler(c, err)
  78. return
  79. }
  80. cluster.RegisterPredefinedNodes()
  81. go analytic.RestartRetrieveNodesStatus()
  82. c.JSON(http.StatusOK, gin.H{
  83. "message": "ok",
  84. })
  85. }