From d77f0e84745b1167ea66819348dd5c6c40df5fda Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Fri, 20 Jan 2017 20:05:25 +0700 Subject: [PATCH] Deleted daemon mode (You should use worker mode instead) --- README.md | 4 +- bin/console | 2 - bin/daemonise | 21 --- docs/en/README.md | 1 - docs/en/installing.md | 5 +- docs/en/workers/cron.md | 5 +- docs/en/workers/daemon.md | 23 --- docs/en/workers/worker.md | 17 +- src/PHPCensor/Command/DaemonCommand.php | 202 --------------------- src/PHPCensor/Command/DaemoniseCommand.php | 111 ----------- src/PHPCensor/Command/RebuildCommand.php | 1 - src/PHPCensor/Command/RunCommand.php | 23 +-- 12 files changed, 23 insertions(+), 392 deletions(-) delete mode 100755 bin/daemonise delete mode 100644 docs/en/workers/daemon.md delete mode 100644 src/PHPCensor/Command/DaemonCommand.php delete mode 100644 src/PHPCensor/Command/DaemoniseCommand.php diff --git a/README.md b/README.md index 3ec9faa9..84a5bf50 100644 --- a/README.md +++ b/README.md @@ -77,8 +77,8 @@ with web-server (Nginx or Apache2), MySQL (or MariaDB) database and Composer. * [Add a virtual host to your web server](docs/en/virtual_host.md), pointing to the `public` directory within your new PHP Censor directory. You'll need to set up rewrite rules to point all non-existent requests to PHP Censor; -* [Set up the PHP Censor Worker](docs/en/workers/worker.md), or you can run builds using the -[daemon](docs/en/workers/daemon.md) or [a cron-job](docs/en/workers/cron.md) to run PHP Censor builds; +* [Set up the PHP Censor Worker](docs/en/workers/worker.md), or [a cron-job](docs/en/workers/cron.md) to run PHP +Censor builds; More details about [installation](docs/en/installing.md). diff --git a/bin/console b/bin/console index d5f99b18..bfaf4dae 100755 --- a/bin/console +++ b/bin/console @@ -12,7 +12,6 @@ use PHPCensor\Command\RunCommand; use PHPCensor\Command\RebuildCommand; use PHPCensor\Command\InstallCommand; -use PHPCensor\Command\DaemonCommand; use PHPCensor\Command\PollCommand; use PHPCensor\Command\CreateAdminCommand; use PHPCensor\Command\CreateBuildCommand; @@ -34,7 +33,6 @@ $application = new Application(); $application->add(new RunCommand($loggerConfig->getFor('RunCommand'))); $application->add(new RebuildCommand($loggerConfig->getFor('RunCommand'))); $application->add(new InstallCommand); -$application->add(new DaemonCommand($loggerConfig->getFor('DaemonCommand'))); $application->add(new PollCommand($loggerConfig->getFor('PollCommand'))); $application->add(new CreateAdminCommand(Factory::getStore('User'))); $application->add(new CreateBuildCommand(Factory::getStore('Project'), new BuildService(Factory::getStore('Build')))); diff --git a/bin/daemonise b/bin/daemonise deleted file mode 100755 index a5c44011..00000000 --- a/bin/daemonise +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env php -add(new DaemoniseCommand($loggerConfig->getFor('DaemoniseCommand'))); -$application->run(); diff --git a/docs/en/README.md b/docs/en/README.md index d324b003..ab0057de 100644 --- a/docs/en/README.md +++ b/docs/en/README.md @@ -7,7 +7,6 @@ Getting Started * [Installing PHP Censor](installing.md) * [Adding a Virtual Host](virtual_host.md) * [Run builds using a worker](workers/worker.md) - * [Run builds using a daemon](workers/daemon.md) * [Run builds using cronjob](workers/cron.md) * [Adding PHP Censor Support to Your Projects](config.md) * [Setting up Logging](logging.md) diff --git a/docs/en/installing.md b/docs/en/installing.md index 0efa0cdd..70e85675 100644 --- a/docs/en/installing.md +++ b/docs/en/installing.md @@ -20,5 +20,6 @@ Installing PHP Censor Manually * Go to the PHP Censor directory: `cd /var/www/php-censor` * Install dependencies using Composer: `composer install` * Install PHP Censor itself: `./bin/console php-censor:install` -* [Add a virtual host to your web server](virtual_host.md), pointing to the `public` directory within your new PHP Censor directory. You'll need to set up rewrite rules to point all non-existent requests to PHP Censor. -* [Set up the PHP Censor Worker](workers/worker.md), or you can run builds using the [daemon](workers/daemon.md) or [a cron-job](workers/cron.md) to run PHP Censor builds. +* [Add a virtual host to your web server](virtual_host.md), pointing to the `public` directory within your new PHP +Censor directory. You'll need to set up rewrite rules to point all non-existent requests to PHP Censor. +* [Set up the PHP Censor Worker](workers/worker.md), or [a cron-job](workers/cron.md) to run PHP Censor builds. diff --git a/docs/en/workers/cron.md b/docs/en/workers/cron.md index cc128a91..d6325258 100644 --- a/docs/en/workers/cron.md +++ b/docs/en/workers/cron.md @@ -1,9 +1,8 @@ Run builds using cronjob ======================== -Running builds using cron is a quick and simple method of getting up and running with PHP Censor. It also removes the need for PHP Censor to be running all the time. - -If you want a little more control over how PHP Censor runs, you may want to [set up the daemon](workers/daemon.md) instead. +Running builds using cron is a quick and simple method of getting up and running with PHP Censor. It also removes the +need for PHP Censor to be running all the time. Setting up the Cron Job ----------------------- diff --git a/docs/en/workers/daemon.md b/docs/en/workers/daemon.md deleted file mode 100644 index cef79a71..00000000 --- a/docs/en/workers/daemon.md +++ /dev/null @@ -1,23 +0,0 @@ -Run builds using a daemon -========================= - -The PHP Censor daemon runs in the background on your server and continuously checks for new builds. Unless already running a build, the daemon should pick up and start running new builds within seconds of being created. - -The daemon is also useful if you want to run multiple PHP Censor workers in a virtualised environment (i.e. Docker) - -If you want to run PHP Censor builds on a regular schedule instead, you should [set up a cronjob](workers/cron.md). - -Starting the Daemon -------------------- - -On a Linux/Unix server, the following command will start the daemon and keep it running even when you log out of the server: - -```sh -nohup php ./daemonise php-censor:daemonise >/dev/null 2>&1 & -``` - -If you need to debug what's going on with your builds, you can also run the daemon directly using the following command, which will output the daemon's log directly to your terminal: - -```sh -php daemonise php-censor:daemonise -``` diff --git a/docs/en/workers/worker.md b/docs/en/workers/worker.md index 1270a717..4b5971d1 100644 --- a/docs/en/workers/worker.md +++ b/docs/en/workers/worker.md @@ -1,16 +1,21 @@ Run builds using a worker ========================= -The PHP Censor Worker runs in the background on your server and waits for new builds to be added to a Beanstalkd queue. Unless already running a build, the worker will pick up and start running new builds almost immediately after their creation. +The PHP Censor Worker runs in the background on your server and waits for new builds to be added to a Beanstalkd queue. +Unless already running a build, the worker will pick up and start running new builds almost immediately after their +creation. -The worker is the recommended way to run PHP Censor builds. You can run several workers all watching one queue, allowing jobs to be run simultaneously without the overhead of polling your MySQL database. +The worker is the recommended way to run PHP Censor builds. You can run several workers all watching one queue, +allowing jobs to be run simultaneously without the overhead of polling your MySQL database. -If you can't run Beanstalkd on your server, or would prefer to run builds on a regular schedule, you should consider using the [build daemon](workers/daemon.md) or [running builds via Cron](workers/cron.md). +If you can't run Beanstalkd on your server, or would prefer to run builds on a regular schedule, you should consider +using the [running builds via Cron](workers/cron.md). Pre-Requisites -------------- -* You need to install [Beanstalkd](http://kr.github.io/beanstalkd/) - On Ubuntu, this is as simple as running `apt-get install beanstalkd`. +* You need to install [Beanstalkd](http://kr.github.io/beanstalkd/) - On Ubuntu, this is as simple as running +`apt-get install beanstalkd`. * [Supervisord](http://supervisord.org/) needs to be installed and running on your server. Setting up the PHP Censor worker @@ -20,14 +25,10 @@ Setting up the PHP Censor worker Setting up the worker on a new installation of PHP Censor is as simple as entering the appropriate values for your Beanstalkd server hostname and queue name when running the PHP Censor installer. By default, the installer assumes that you'll be using beanstalkd on `localhost` and will use the queue name `php-censor-queue`. -![PHP Censor Worker Installer](https://www.phptesting.org/media/render/f48f63699a04444630352643af18b643) - ### On an existing installation On an existing installation, to set up the worker, you simply need to add the beanstalkd host and queue names directly into your `config.yml` file. You should add a `worker` key beneath the `php-censor` section, with the properties `host` and `queue` as outlined in the screenshot below: -![PHP Censor Worker Config](https://www.phptesting.org/media/render/9a88e9298670f2913f5798e68b94c9ed) - Running the PHP Censor worker ----------------------------- diff --git a/src/PHPCensor/Command/DaemonCommand.php b/src/PHPCensor/Command/DaemonCommand.php deleted file mode 100644 index f31a4b6f..00000000 --- a/src/PHPCensor/Command/DaemonCommand.php +++ /dev/null @@ -1,202 +0,0 @@ - - * @package PHPCI - * @subpackage Console - */ -class DaemonCommand extends Command -{ - - /** - * @var Logger - */ - protected $logger; - - /** - * @var string - */ - protected $pidFilePath; - - /** - * @var string - */ - protected $logFilePath; - - /** - * @var ProcessControlInterface - */ - protected $processControl; - - public function __construct(Logger $logger, ProcessControlInterface $processControl = null, $name = null) - { - parent::__construct($name); - $this->logger = $logger; - $this->processControl = $processControl ?: Factory::getInstance(); - } - - protected function configure() - { - $this - ->setName('php-censor:daemon') - ->setDescription('Initiates the daemon to run commands.') - ->addArgument( - 'state', InputArgument::REQUIRED, 'start|stop|status' - )->addOption( - 'pid-file', - 'p', - InputOption::VALUE_REQUIRED, - 'Path of the PID file', - (ROOT_DIR . 'runtime' . DIRECTORY_SEPARATOR . 'daemon' . DIRECTORY_SEPARATOR . 'daemon.pid') - )->addOption( - 'log-file', - 'l', - InputOption::VALUE_REQUIRED, - 'Path of the log file', - (ROOT_DIR . 'runtime' . DIRECTORY_SEPARATOR . 'daemon' . DIRECTORY_SEPARATOR . 'daemon.log') - ); - } - - /** - * Loops through running. - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->pidFilePath = $input->getOption('pid-file'); - $this->logFilePath = $input->getOption('log-file'); - - $state = $input->getArgument('state'); - - switch ($state) { - case 'start': - $this->startDaemon(); - break; - case 'stop': - $this->stopDaemon(); - break; - case 'status': - $this->statusDaemon($output); - break; - default: - $this->output->writeln("Not a valid choice, please use start, stop or status"); - break; - } - } - - protected function startDaemon() - { - $pid = $this->getRunningPid(); - if ($pid) { - $this->logger->notice("Daemon already started", ['pid' => $pid]); - return "alreadystarted"; - } - - $this->logger->info("Trying to start the daemon"); - - $cmd = "nohup %sdaemonise php-censor:daemonise > %s 2>&1 &"; - $command = sprintf($cmd, BIN_DIR, $this->logFilePath); - $output = $exitCode = null; - exec($command, $output, $exitCode); - - if ($exitCode !== 0) { - $this->logger->error(sprintf("daemonise exited with status %d", $exitCode)); - return "notstarted"; - } - - for ($i = 0; !($pid = $this->getRunningPid()) && $i < 5; $i++) { - sleep(1); - } - - if (!$pid) { - $this->logger->error("Could not start the daemon"); - return "notstarted"; - } - - $this->logger->notice("Daemon started", ['pid' => $pid]); - return "started"; - } - - protected function stopDaemon() - { - $pid = $this->getRunningPid(); - if (!$pid) { - $this->logger->notice("Cannot stop the daemon as it is not started"); - return "notstarted"; - } - - $this->logger->info("Trying to terminate the daemon", ['pid' => $pid]); - $this->processControl->kill($pid); - - for ($i = 0; ($pid = $this->getRunningPid()) && $i < 5; $i++) { - sleep(1); - } - - if ($pid) { - $this->logger->warning("The daemon is resiting, trying to kill it", ['pid' => $pid]); - $this->processControl->kill($pid, true); - - for ($i = 0; ($pid = $this->getRunningPid()) && $i < 5; $i++) { - sleep(1); - } - } - - if (!$pid) { - $this->logger->notice("Daemon stopped"); - return "stopped"; - } - - $this->logger->error("Could not stop the daemon"); - } - - protected function statusDaemon(OutputInterface $output) - { - $pid = $this->getRunningPid(); - if ($pid) { - $output->writeln(sprintf('The daemon is running, PID: %d', $pid)); - return "running"; - } - - $output->writeln('The daemon is not running'); - return "notrunning"; - } - - /** Check if there is a running daemon - * - * @return int|null - */ - protected function getRunningPid() - { - if (!file_exists($this->pidFilePath)) { - return; - } - - $pid = intval(trim(file_get_contents($this->pidFilePath))); - - if($this->processControl->isRunning($pid)) { - return $pid; - } - - // Not found, remove the stale PID file - unlink($this->pidFilePath); - } -} diff --git a/src/PHPCensor/Command/DaemoniseCommand.php b/src/PHPCensor/Command/DaemoniseCommand.php deleted file mode 100644 index ae96270a..00000000 --- a/src/PHPCensor/Command/DaemoniseCommand.php +++ /dev/null @@ -1,111 +0,0 @@ - -* @package PHPCI -* @subpackage Console -*/ -class DaemoniseCommand extends Command -{ - /** - * @var Logger - */ - protected $logger; - - /** - * @var OutputInterface - */ - protected $output; - - /** - * @var boolean - */ - protected $run; - - /** - * @var int - */ - protected $sleep; - - /** - * @param \Monolog\Logger $logger - * @param string $name - */ - public function __construct(Logger $logger, $name = null) - { - parent::__construct($name); - $this->logger = $logger; - } - - protected function configure() - { - $this - ->setName('php-censor:daemonise') - ->setDescription('Starts the daemon to run commands.'); - } - - /** - * Loops through running. - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $cmd = "echo %s > '%sdaemon/daemon.pid'"; - $command = sprintf($cmd, getmypid(), RUNTIME_DIR); - exec($command); - - $this->output = $output; - $this->run = true; - $this->sleep = 0; - $runner = new RunCommand($this->logger); - $runner->setMaxBuilds(1); - $runner->setDaemon(true); - - $emptyInput = new ArgvInput([]); - - while ($this->run) { - - $buildCount = 0; - - try { - $buildCount = $runner->run($emptyInput, $output); - } catch (\Exception $e) { - $output->writeln('Exception: ' . $e->getMessage() . ''); - $output->writeln('Line: ' . $e->getLine() . ' - File: ' . $e->getFile() . ''); - } - - if (0 == $buildCount && $this->sleep < 15) { - $this->sleep++; - } elseif (1 < $this->sleep) { - $this->sleep--; - } - echo '.'.(0 === $buildCount?'':'build'); - sleep($this->sleep); - } - } - - /** - * Called when log entries are made in Builder / the plugins. - * - * @see \PHPCensor\Builder::log() - */ - public function logCallback($log) - { - $this->output->writeln($log); - } -} diff --git a/src/PHPCensor/Command/RebuildCommand.php b/src/PHPCensor/Command/RebuildCommand.php index 0202d62b..08ae53f9 100644 --- a/src/PHPCensor/Command/RebuildCommand.php +++ b/src/PHPCensor/Command/RebuildCommand.php @@ -69,7 +69,6 @@ class RebuildCommand extends Command { $runner = new RunCommand($this->logger); $runner->setMaxBuilds(1); - $runner->setDaemon(false); /** @var \PHPCensor\Store\BuildStore $store */ $store = Factory::getStore('Build'); diff --git a/src/PHPCensor/Command/RunCommand.php b/src/PHPCensor/Command/RunCommand.php index 96abdb33..7f9cd748 100644 --- a/src/PHPCensor/Command/RunCommand.php +++ b/src/PHPCensor/Command/RunCommand.php @@ -24,11 +24,12 @@ use PHPCensor\BuildFactory; use PHPCensor\Model\Build; /** -* Run console command - Runs any pending builds. -* @author Dan Cryer -* @package PHPCI -* @subpackage Console -*/ + * Run console command - Runs any pending builds. + * + * @author Dan Cryer + * @package PHPCI + * @subpackage Console + */ class RunCommand extends Command { /** @@ -46,11 +47,6 @@ class RunCommand extends Command */ protected $maxBuilds = 100; - /** - * @var bool - */ - protected $isFromDaemon = false; - /** * @param \Monolog\Logger $logger * @param string $name @@ -105,7 +101,7 @@ class RunCommand extends Command $build = BuildFactory::getBuild($build); // Skip build (for now) if there's already a build running in that project: - if (!$this->isFromDaemon && in_array($build->getProjectId(), $running)) { + if (in_array($build->getProjectId(), $running)) { $this->logger->addInfo(Lang::get('skipping_build', $build->getId())); $result['items'][] = $build; @@ -147,11 +143,6 @@ class RunCommand extends Command $this->maxBuilds = (int)$numBuilds; } - public function setDaemon($fromDaemon) - { - $this->isFromDaemon = (bool)$fromDaemon; - } - protected function validateRunningBuilds() { /** @var \PHPCensor\Store\BuildStore $store */