diff --git a/manager/models/scheduler.go b/manager/models/scheduler.go index 91784e607..f3eb819a9 100644 --- a/manager/models/scheduler.go +++ b/manager/models/scheduler.go @@ -26,6 +26,7 @@ const ( type Scheduler struct { BaseModel + Config JSONMap `gorm:"column:config;comment:configuration" json:"config"` Hostname string `gorm:"column:host_name;type:varchar(256);index:uk_scheduler,unique;not null;comment:hostname" json:"host_name"` IDC string `gorm:"column:idc;type:varchar(1024);comment:internet data center" json:"idc"` Location string `gorm:"column:location;type:varchar(1024);comment:location" json:"location"` diff --git a/manager/service/scheduler.go b/manager/service/scheduler.go index d89f1b8c2..3733c87a0 100644 --- a/manager/service/scheduler.go +++ b/manager/service/scheduler.go @@ -21,6 +21,7 @@ import ( "d7y.io/dragonfly/v2/manager/models" "d7y.io/dragonfly/v2/manager/types" + "d7y.io/dragonfly/v2/pkg/structure" ) func (s *service) CreateScheduler(ctx context.Context, json types.CreateSchedulerRequest) (*models.Scheduler, error) { @@ -39,6 +40,15 @@ func (s *service) CreateScheduler(ctx context.Context, json types.CreateSchedule SchedulerClusterID: json.SchedulerClusterID, } + if json.Config != nil { + config, err := structure.StructToMap(json.Config) + if err != nil { + return nil, err + } + + scheduler.Config = config + } + if err := s.db.WithContext(ctx).Create(&scheduler).Error; err != nil { return nil, err } @@ -60,8 +70,20 @@ func (s *service) DestroyScheduler(ctx context.Context, id uint) error { } func (s *service) UpdateScheduler(ctx context.Context, id uint, json types.UpdateSchedulerRequest) (*models.Scheduler, error) { + var ( + config map[string]any + err error + ) + if json.Config != nil { + config, err = structure.StructToMap(json.Config) + if err != nil { + return nil, err + } + } + scheduler := models.Scheduler{} if err := s.db.WithContext(ctx).First(&scheduler, id).Updates(models.Scheduler{ + Config: config, IDC: json.IDC, Location: json.Location, IP: json.IP, diff --git a/manager/types/scheduler.go b/manager/types/scheduler.go index 270a00c74..55884fe02 100644 --- a/manager/types/scheduler.go +++ b/manager/types/scheduler.go @@ -16,28 +16,32 @@ package types +import "time" + type SchedulerParams struct { ID uint `uri:"id" binding:"required"` } type CreateSchedulerRequest struct { - Hostname string `json:"host_name" binding:"required"` - IDC string `json:"idc" binding:"omitempty"` - Location string `json:"location" binding:"omitempty"` - IP string `json:"ip" binding:"required"` - Port int32 `json:"port" binding:"required"` - Features []string `json:"features" binding:"omitempty"` - SchedulerClusterID uint `json:"scheduler_cluster_id" binding:"required"` + Config *SchedulerConfig `json:"config" binding:"omitempty"` + Hostname string `json:"host_name" binding:"required"` + IDC string `json:"idc" binding:"omitempty"` + Location string `json:"location" binding:"omitempty"` + IP string `json:"ip" binding:"required"` + Port int32 `json:"port" binding:"required"` + Features []string `json:"features" binding:"omitempty"` + SchedulerClusterID uint `json:"scheduler_cluster_id" binding:"required"` } type UpdateSchedulerRequest struct { - IDC string `json:"idc" binding:"omitempty"` - Location string `json:"location" binding:"omitempty"` - IP string `json:"ip" binding:"omitempty"` - Port int32 `json:"port" binding:"omitempty"` - SchedulerID uint `json:"scheduler_id" binding:"omitempty"` - Features []string `json:"features" binding:"omitempty"` - SchedulerClusterID uint `json:"scheduler_cluster_id" binding:"omitempty"` + Config *SchedulerConfig `json:"config" binding:"omitempty"` + IDC string `json:"idc" binding:"omitempty"` + Location string `json:"location" binding:"omitempty"` + IP string `json:"ip" binding:"omitempty"` + Port int32 `json:"port" binding:"omitempty"` + SchedulerID uint `json:"scheduler_id" binding:"omitempty"` + Features []string `json:"features" binding:"omitempty"` + SchedulerClusterID uint `json:"scheduler_cluster_id" binding:"omitempty"` } type GetSchedulersQuery struct { @@ -50,3 +54,7 @@ type GetSchedulersQuery struct { State string `form:"state" binding:"omitempty,oneof=active inactive"` SchedulerClusterID uint `form:"scheduler_cluster_id" binding:"omitempty"` } + +type SchedulerConfig struct { + ManagerKeepAliveInterval time.Duration `json:"manager_keep_alive_interval" binding:"required"` +}