aboutsummaryrefslogtreecommitdiff
path: root/weed/worker/tasks/registry.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/worker/tasks/registry.go')
-rw-r--r--weed/worker/tasks/registry.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/weed/worker/tasks/registry.go b/weed/worker/tasks/registry.go
index 626a54a14..77d9a8d0b 100644
--- a/weed/worker/tasks/registry.go
+++ b/weed/worker/tasks/registry.go
@@ -146,3 +146,62 @@ func (r *TaskRegistry) GetAll() map[types.TaskType]types.TaskFactory {
}
return result
}
+
+// InitializeDynamicTaskTypes sets up the dynamic task type functions
+// This should be called after all tasks have been registered
+func InitializeDynamicTaskTypes() {
+ // Set up the function variables in the types package
+ types.GetAvailableTaskTypes = func() []types.TaskType {
+ typesRegistry := GetGlobalTypesRegistry()
+ var taskTypes []types.TaskType
+ for taskType := range typesRegistry.GetAllDetectors() {
+ taskTypes = append(taskTypes, taskType)
+ }
+ return taskTypes
+ }
+
+ types.IsTaskTypeAvailable = func(taskType types.TaskType) bool {
+ typesRegistry := GetGlobalTypesRegistry()
+ detectors := typesRegistry.GetAllDetectors()
+ _, exists := detectors[taskType]
+ return exists
+ }
+
+ types.GetTaskType = func(name string) (types.TaskType, bool) {
+ taskType := types.TaskType(name)
+ if types.IsTaskTypeAvailable(taskType) {
+ return taskType, true
+ }
+ return "", false
+ }
+
+ glog.V(1).Infof("Initialized dynamic task type functions")
+}
+
+// GetAllRegisteredTaskTypes returns all currently registered task types
+func GetAllRegisteredTaskTypes() []types.TaskType {
+ if types.GetAvailableTaskTypes != nil {
+ return types.GetAvailableTaskTypes()
+ }
+
+ // Fallback: get directly from registry
+ typesRegistry := GetGlobalTypesRegistry()
+ var taskTypes []types.TaskType
+ for taskType := range typesRegistry.GetAllDetectors() {
+ taskTypes = append(taskTypes, taskType)
+ }
+ return taskTypes
+}
+
+// IsTaskTypeRegistered checks if a task type is currently registered
+func IsTaskTypeRegistered(taskType types.TaskType) bool {
+ if types.IsTaskTypeAvailable != nil {
+ return types.IsTaskTypeAvailable(taskType)
+ }
+
+ // Fallback: check directly in registry
+ typesRegistry := GetGlobalTypesRegistry()
+ detectors := typesRegistry.GetAllDetectors()
+ _, exists := detectors[taskType]
+ return exists
+}