semantic
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
# [DEF:TaskManagerModule:Module]
|
||||
# [DEF:TaskManager:Module]
|
||||
# @TIER: CRITICAL
|
||||
# @COMPLEXITY: 5
|
||||
# @SEMANTICS: task, manager, lifecycle, execution, state
|
||||
# @PURPOSE: Manages the lifecycle of tasks, including their creation, execution, and state tracking. It uses a thread pool to run plugins asynchronously.
|
||||
@@ -7,8 +8,8 @@
|
||||
# @POST: Orchestrates task execution and persistence.
|
||||
# @SIDE_EFFECT: Spawns worker threads and flushes logs to DB.
|
||||
# @DATA_CONTRACT: Input[plugin_id, params] -> Model[Task, LogEntry]
|
||||
# @RELATION: [DEPENDS_ON] ->[backend.src.core.plugin_loader]
|
||||
# @RELATION: [DEPENDS_ON] ->[backend.src.core.task_manager.persistence]
|
||||
# @RELATION: [DEPENDS_ON] ->[PluginLoader:Class]
|
||||
# @RELATION: [DEPENDS_ON] ->[TaskPersistenceModule:Module]
|
||||
# @INVARIANT: Task IDs are unique.
|
||||
# @CONSTRAINT: Must use belief_scope for logging.
|
||||
# @TEST_CONTRACT: TaskManagerModule -> {
|
||||
@@ -38,26 +39,19 @@ from ..logger import logger, belief_scope, should_log_task_level
|
||||
# [/SECTION]
|
||||
|
||||
# [DEF:TaskManager:Class]
|
||||
# @TIER: CRITICAL
|
||||
# @COMPLEXITY: 5
|
||||
# @SEMANTICS: task, manager, lifecycle, execution, state
|
||||
# @PURPOSE: Manages the lifecycle of tasks, including their creation, execution, and state tracking.
|
||||
# @LAYER: Core
|
||||
# @RELATION: [DEPENDS_ON] ->[TaskPersistenceService:Class]
|
||||
# @RELATION: [DEPENDS_ON] ->[TaskLogPersistenceService:Class]
|
||||
# @RELATION: [DEPENDS_ON] ->[PluginLoader:Class]
|
||||
# @INVARIANT: Task IDs are unique within the registry.
|
||||
# @INVARIANT: Each task has exactly one status at any time.
|
||||
# @INVARIANT: Log entries are never deleted after being added to a task.
|
||||
#
|
||||
# @TEST_CONTRACT: TaskManagerModel ->
|
||||
# {
|
||||
# required_fields: {plugin_loader: PluginLoader},
|
||||
# invariants: [
|
||||
# "Tasks are persisted immediately upon creation",
|
||||
# "Running tasks use a thread pool or asyncio event loop based on executor type",
|
||||
# "Log flushing runs on a background thread"
|
||||
# ]
|
||||
# }
|
||||
# @TEST_FIXTURE: valid_manager -> {"plugin_loader": "MockPluginLoader()"}
|
||||
# @TEST_EDGE: create_task_invalid_plugin -> raises ValueError
|
||||
# @TEST_EDGE: create_task_invalid_params -> raises ValueError
|
||||
# @TEST_INVARIANT: lifecycle_management -> verifies: [valid_manager]
|
||||
# @SIDE_EFFECT: Spawns worker threads, flushes logs to database, and mutates task states.
|
||||
# @DATA_CONTRACT: Input[plugin_id, params] -> Output[Task]
|
||||
class TaskManager:
|
||||
"""
|
||||
Manages the lifecycle of tasks, including their creation, execution, and state tracking.
|
||||
@@ -99,7 +93,7 @@ class TaskManager:
|
||||
# Load persisted tasks on startup
|
||||
self.load_persisted_tasks()
|
||||
# [/DEF:__init__:Function]
|
||||
|
||||
|
||||
# [DEF:_flusher_loop:Function]
|
||||
# @COMPLEXITY: 3
|
||||
# @PURPOSE: Background thread that periodically flushes log buffer to database.
|
||||
@@ -111,7 +105,7 @@ class TaskManager:
|
||||
self._flush_logs()
|
||||
self._flusher_stop_event.wait(self.LOG_FLUSH_INTERVAL)
|
||||
# [/DEF:_flusher_loop:Function]
|
||||
|
||||
|
||||
# [DEF:_flush_logs:Function]
|
||||
# @COMPLEXITY: 3
|
||||
# @PURPOSE: Flush all buffered logs to the database.
|
||||
@@ -138,7 +132,7 @@ class TaskManager:
|
||||
self._log_buffer[task_id] = []
|
||||
self._log_buffer[task_id].extend(logs)
|
||||
# [/DEF:_flush_logs:Function]
|
||||
|
||||
|
||||
# [DEF:_flush_task_logs:Function]
|
||||
# @COMPLEXITY: 3
|
||||
# @PURPOSE: Flush logs for a specific task immediately.
|
||||
@@ -644,6 +638,5 @@ class TaskManager:
|
||||
logger.info(f"Cleared {len(tasks_to_remove)} tasks.")
|
||||
return len(tasks_to_remove)
|
||||
# [/DEF:clear_tasks:Function]
|
||||
|
||||
# [/DEF:TaskManager:Class]
|
||||
# [/DEF:TaskManagerModule:Module]
|
||||
# [/DEF:TaskManager:Module]
|
||||
|
||||
Reference in New Issue
Block a user