X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCore%2FProcess.php;h=447d312d44d3e20bc152d85d1f761c52b5a2c55f;hb=56a77f5275ba8566a37d690ade0e929c88b828e2;hp=a7f8de2866dab66328b1d7a59fb5cd9dfb58a6eb;hpb=c1dbb256561ecdb19fe0541628b1ec0f06d95dfa;p=friendica.git diff --git a/src/Core/Process.php b/src/Core/Process.php index a7f8de2866..447d312d44 100644 --- a/src/Core/Process.php +++ b/src/Core/Process.php @@ -1,9 +1,29 @@ . + * + */ namespace Friendica\Core; use Friendica\App; -use Friendica\Core\Config\IConfiguration; +use Friendica\Core\Config\IConfig; +use Friendica\Model; use Psr\Log\LoggerInterface; /** @@ -15,7 +35,7 @@ use Psr\Log\LoggerInterface; * - Using an process-id per node * - Using memory locks for multi-node locking (redis, memcached, ..) */ -final class Process +class Process { /** * @var LoggerInterface @@ -28,7 +48,7 @@ final class Process private $mode; /** - * @var IConfiguration + * @var IConfig */ private $config; @@ -37,16 +57,63 @@ final class Process */ private $basePath; - public function __construct(LoggerInterface $logger, App\Mode $mode, IConfiguration $config, string $basepath) + /** @var Model\Process */ + private $processModel; + + /** + * The Process ID of this process + * + * @var int + */ + private $pid; + + public function __construct(LoggerInterface $logger, App\Mode $mode, IConfig $config, Model\Process $processModel, string $basepath, int $pid) { - $this->logger = $logger; - $this->mode = $mode; - $this->config = $config; + $this->logger = $logger; + $this->mode = $mode; + $this->config = $config; $this->basePath = $basepath; + $this->processModel = $processModel; + $this->pid = $pid; + } + + /** + * Set the process id + * + * @param integer $pid + * @return void + */ + public function setPid(int $pid) + { + $this->pid = $pid; + } + + /** + * Log active processes into the "process" table + */ + public function start() + { + $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); + + $command = basename($trace[0]['file']); + + $this->processModel->deleteInactive(); + $this->processModel->insert($command, $this->pid); + } + + /** + * Remove the active process from the "process" table + * + * @return bool + * @throws \Exception + */ + public function end() + { + return $this->processModel->deleteByPid($this->pid); } /** - * @brief Checks if the maximum number of database processes is reached + * Checks if the maximum number of database processes is reached * * @return bool Is the limit reached? */ @@ -86,7 +153,7 @@ final class Process } /** - * @brief Checks if the minimal memory is reached + * Checks if the minimal memory is reached * * @return bool Is the memory limit reached? */ @@ -123,14 +190,14 @@ final class Process $reached = ($free < $min_memory); if ($reached) { - $this->logger->debug('Minimal memory reached.', ['free' => $free, 'memtotal' => $meminfo['MemTotal'], 'limit' => $min_memory]); + $this->logger->warning('Minimal memory reached.', ['free' => $free, 'memtotal' => $meminfo['MemTotal'], 'limit' => $min_memory]); } return $reached; } /** - * @brief Checks if the maximum load is reached + * Checks if the maximum load is reached * * @return bool Is the load reached? */ @@ -153,7 +220,7 @@ final class Process $load = System::currentLoad(); if ($load) { if (intval($load) > $maxsysload) { - $this->logger->info('system load for process too high.', ['load' => $load, 'process' => $process, 'maxsysload' => $maxsysload]); + $this->logger->warning('system load for process too high.', ['load' => $load, 'process' => $process, 'maxsysload' => $maxsysload]); return true; } } @@ -169,6 +236,7 @@ final class Process public function run($command, $args) { if (!function_exists('proc_open')) { + $this->logger->warning('"proc_open" not available - quitting'); return; } @@ -186,6 +254,7 @@ final class Process } if ($this->isMinMemoryReached()) { + $this->logger->warning('Memory limit reached - quitting'); return; } @@ -195,9 +264,11 @@ final class Process $resource = proc_open($cmdline . ' &', [], $foo, $this->basePath); } if (!is_resource($resource)) { - $this->logger->debug('We got no resource for command.', ['cmd' => $cmdline]); + $this->logger->warning('We got no resource for command.', ['command' => $cmdline]); return; } proc_close($resource); + + $this->logger->info('Executed "proc_open"', ['command' => $cmdline, 'callstack' => System::callstack(10)]); } }