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;
$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')));
- }
}
/**
* 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,
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)
])) {
$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);
+ }
+ }
}