diff --git a/src/Core/Worker.php b/src/Core/Worker.php index cee1c65521..d7133c0b7a 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -846,7 +846,7 @@ class Worker private static function activeWorkers() { $stamp = (float)microtime(true); - $count = DBA::count('process', ['command' => 'Worker.php']); + $count = DI::process()->countCommand('Worker.php'); self::$db_duration += (microtime(true) - $stamp); self::$db_duration_count += (microtime(true) - $stamp); return $count; diff --git a/src/Core/Worker/Entity/Process.php b/src/Core/Worker/Entity/Process.php index 57e3853382..7161f9ca46 100644 --- a/src/Core/Worker/Entity/Process.php +++ b/src/Core/Worker/Entity/Process.php @@ -30,17 +30,4 @@ class Process extends BaseEntity $this->command = $command; $this->created = $created; } - - /** - * Returns a new Process with the given PID - * - * @param int $pid - * - * @return $this - * @throws \Exception - */ - public function withPid(int $pid): Process - { - return new static($pid, $this->command, new DateTime('now', new \DateTimeZone('URC'))); - } } diff --git a/src/Core/Worker/Factory/Process.php b/src/Core/Worker/Factory/Process.php index 38985983b2..1b66906899 100644 --- a/src/Core/Worker/Factory/Process.php +++ b/src/Core/Worker/Factory/Process.php @@ -20,16 +20,13 @@ class Process extends BaseFactory implements ICanCreateFromTableRow /** * Creates a new process entry for a given PID * - * @param int $pid + * @param int $pid + * @param string $command * * @return Entity\Process */ - public function create(int $pid): Entity\Process + public function create(int $pid, string $command): Entity\Process { - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); - - $command = basename($trace[0]['file']); - return $this->createFromTableRow([ 'pid' => $pid, 'command' => $command, diff --git a/src/Core/Worker/Repository/Process.php b/src/Core/Worker/Repository/Process.php index 8fe1d709b0..d14121b973 100644 --- a/src/Core/Worker/Repository/Process.php +++ b/src/Core/Worker/Repository/Process.php @@ -59,11 +59,16 @@ class Process extends BaseRepository try { $this->db->transaction(); - $newProcess = $this->factory->create($pid); + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + $last = $trace[count($trace) - 1]; + + $command = strtolower(basename($last['file'])); + + $newProcess = $this->factory->create($pid, $command); if (!$this->db->exists('process', ['pid' => $pid])) { if (!$this->db->insert(static::$table_name, [ - 'pid' => $newProcess->pid, + 'pid' => $newProcess->pid, 'command' => $newProcess->command, 'created' => $newProcess->created->format(DateTimeFormat::MYSQL) ])) { @@ -115,4 +120,22 @@ class Process extends BaseRepository $this->db->commit(); } } + + /** + * Returns the number of processes with a given command + * + * @param string $command + * + * @return int Number of processes + * + * @throws ProcessPersistenceException + */ + public function countCommand(string $command): int + { + try { + return $this->count(['command' => strtolower($command)]); + } catch (\Exception $exception) { + throw new ProcessPersistenceException('Cannot count ', $exception); + } + } }