dispatchExecution method

Future<WorkerExecutionResult> dispatchExecution(
  1. WorkerExecutionRequest request
)

Dispatches an execution request to an available worker supporting the required capability.

Implementation

Future<WorkerExecutionResult> dispatchExecution(
    WorkerExecutionRequest request) async {
  _logger.info(
      'Dispatching task "${request.taskType}" (${request.taskId}) requiring capability: ${request.requiredCapability.id}');

  // Find suitable healthy worker
  final candidate = _workers.values.firstWhere(
    (w) =>
        w.workerInfo.healthStatus == WorkerHealthStatus.healthy &&
        w.workerInfo.capabilities.contains(request.requiredCapability),
    orElse: () => throw StateError(
      'No available healthy worker found supporting capability "${request.requiredCapability.id}".',
    ),
  );

  final result = await candidate.executeTask(request);
  _executionHistory.add(result);

  _logger.info(
      'Task "${request.taskId}" completed on worker "${candidate.workerInfo.workerId}" with status: ${result.status.label}');
  return result;
}