/** * Save or update worker * @param Worker $worker * @return Worker */ public function saveWorker(Worker $worker) { if (is_null($worker->getId())) { $query = $this->db->prepare("INSERT INTO workers (host, port, type, status) VALUES (?, ?, ?, ?)"); $query->execute([$worker->getHost(), $worker->getPort(), $worker->getType(), $worker->getStatus()]); $worker->setId($this->db->lastInsertId()); } else { $query = $this->db->prepare("UPDATE workers SET host = ?, port = ?, type = ?, status = ? WHERE id = ?"); $query->execute([$worker->getHost(), $worker->getPort(), $worker->getType(), $worker->getStatus(), $worker->getId()]); } return $worker; }
/** * Send task over RPC to worker * Mark task as in progress nad worker as busy * @param Task $task * @param Worker $worker * @return void * @author Andraz <*****@*****.**> */ public function sendTaskToWorker(Task $task, Worker $worker) { $client = $this->newRpcClient($worker->getHost(), $worker->getport()); $parameters = [$worker->getId(), $task->getId(), $task->getParameters()]; $task->setStatus('in_progress'); $this->storage->saveTask($task); $worker->setStatus('busy'); $this->storage->saveWorker($worker); $success = $client->notify('run', $parameters); if ($success) { } return $success; }