You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.4 KiB
95 lines
2.4 KiB
package base
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/admin/config"
|
|
"github.com/seaweedfs/seaweedfs/weed/worker/types"
|
|
)
|
|
|
|
// TaskDefinition encapsulates everything needed to define a complete task type
|
|
type TaskDefinition struct {
|
|
// Basic task information
|
|
Type types.TaskType
|
|
Name string
|
|
DisplayName string
|
|
Description string
|
|
Icon string
|
|
Capabilities []string
|
|
|
|
// Task configuration
|
|
Config TaskConfig
|
|
ConfigSpec ConfigSpec
|
|
|
|
// Task creation
|
|
CreateTask func(params types.TaskParams) (types.TaskInterface, error)
|
|
|
|
// Detection logic
|
|
DetectionFunc func(metrics []*types.VolumeHealthMetrics, info *types.ClusterInfo, config TaskConfig) ([]*types.TaskDetectionResult, error)
|
|
ScanInterval time.Duration
|
|
|
|
// Scheduling logic
|
|
SchedulingFunc func(task *types.Task, running []*types.Task, workers []*types.Worker, config TaskConfig) bool
|
|
MaxConcurrent int
|
|
RepeatInterval time.Duration
|
|
}
|
|
|
|
// TaskConfig provides a simple configuration interface
|
|
type TaskConfig interface {
|
|
IsEnabled() bool
|
|
SetEnabled(bool)
|
|
Validate() error
|
|
ToMap() map[string]interface{}
|
|
FromMap(map[string]interface{}) error
|
|
}
|
|
|
|
// ConfigSpec defines the configuration schema
|
|
type ConfigSpec struct {
|
|
Fields []*config.Field
|
|
}
|
|
|
|
// BaseConfig provides common configuration fields
|
|
type BaseConfig struct {
|
|
Enabled bool `json:"enabled"`
|
|
ScanIntervalSeconds int `json:"scan_interval_seconds"`
|
|
MaxConcurrent int `json:"max_concurrent"`
|
|
}
|
|
|
|
// IsEnabled returns whether the task is enabled
|
|
func (c *BaseConfig) IsEnabled() bool {
|
|
return c.Enabled
|
|
}
|
|
|
|
// SetEnabled sets whether the task is enabled
|
|
func (c *BaseConfig) SetEnabled(enabled bool) {
|
|
c.Enabled = enabled
|
|
}
|
|
|
|
// Validate validates the base configuration
|
|
func (c *BaseConfig) Validate() error {
|
|
// Common validation logic
|
|
return nil
|
|
}
|
|
|
|
// ToMap converts config to map
|
|
func (c *BaseConfig) ToMap() map[string]interface{} {
|
|
return map[string]interface{}{
|
|
"enabled": c.Enabled,
|
|
"scan_interval_seconds": c.ScanIntervalSeconds,
|
|
"max_concurrent": c.MaxConcurrent,
|
|
}
|
|
}
|
|
|
|
// FromMap loads config from map
|
|
func (c *BaseConfig) FromMap(data map[string]interface{}) error {
|
|
if enabled, ok := data["enabled"].(bool); ok {
|
|
c.Enabled = enabled
|
|
}
|
|
if interval, ok := data["scan_interval_seconds"].(int); ok {
|
|
c.ScanIntervalSeconds = interval
|
|
}
|
|
if concurrent, ok := data["max_concurrent"].(int); ok {
|
|
c.MaxConcurrent = concurrent
|
|
}
|
|
return nil
|
|
}
|