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.
51 lines
1.4 KiB
51 lines
1.4 KiB
package tasks
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/admin/config"
|
|
)
|
|
|
|
// TaskConfigSchema defines the schema for task configuration
|
|
type TaskConfigSchema struct {
|
|
config.Schema // Embed common schema functionality
|
|
TaskName string `json:"task_name"`
|
|
DisplayName string `json:"display_name"`
|
|
Description string `json:"description"`
|
|
Icon string `json:"icon"`
|
|
}
|
|
|
|
// TaskConfigSchemaProvider is an interface for providing task configuration schemas
|
|
type TaskConfigSchemaProvider interface {
|
|
GetConfigSchema() *TaskConfigSchema
|
|
}
|
|
|
|
// schemaRegistry maintains a registry of schema providers by task type
|
|
type schemaRegistry struct {
|
|
providers map[string]TaskConfigSchemaProvider
|
|
mutex sync.RWMutex
|
|
}
|
|
|
|
var globalSchemaRegistry = &schemaRegistry{
|
|
providers: make(map[string]TaskConfigSchemaProvider),
|
|
}
|
|
|
|
// RegisterTaskConfigSchema registers a schema provider for a task type
|
|
func RegisterTaskConfigSchema(taskType string, provider TaskConfigSchemaProvider) {
|
|
globalSchemaRegistry.mutex.Lock()
|
|
defer globalSchemaRegistry.mutex.Unlock()
|
|
globalSchemaRegistry.providers[taskType] = provider
|
|
}
|
|
|
|
// GetTaskConfigSchema returns the schema for the specified task type
|
|
func GetTaskConfigSchema(taskType string) *TaskConfigSchema {
|
|
globalSchemaRegistry.mutex.RLock()
|
|
provider, exists := globalSchemaRegistry.providers[taskType]
|
|
globalSchemaRegistry.mutex.RUnlock()
|
|
|
|
if !exists {
|
|
return nil
|
|
}
|
|
|
|
return provider.GetConfigSchema()
|
|
}
|