public function testPercent() { $progress = new ProgressHelper(); $progress->start($output = $this->getOutputStream(), 50); $progress->display(); $progress->advance(); $progress->advance(); rewind($output->getStream()); $this->assertEquals($this->generateOutput(' 0/50 [>---------------------------] 0%') . $this->generateOutput(' 1/50 [>---------------------------] 2%') . $this->generateOutput(' 2/50 [=>--------------------------] 4%'), stream_get_contents($output->getStream())); }
public function testPercentNotHundredBeforeComplete() { $progress = new ProgressHelper(); $progress->start($output = $this->getOutputStream(), 200); $progress->display(); $progress->advance(199); $progress->advance(); rewind($output->getStream()); $this->assertEquals($this->generateOutput(' 0/200 [>---------------------------] 0%') . $this->generateOutput(' 199/200 [===========================>] 99%') . $this->generateOutput(' 200/200 [============================] 100%'), stream_get_contents($output->getStream())); }
public function testSetCurrentProgress() { $progress = new ProgressHelper(); $progress->start($output = $this->getOutputStream(), 50); $progress->display(); $progress->advance(); $progress->setCurrent(15); $progress->setCurrent(25); rewind($output->getStream()); $this->assertEquals($this->generateOutput(' 0/50 [>---------------------------] 0%') . $this->generateOutput(' 1/50 [>---------------------------] 2%') . $this->generateOutput(' 15/50 [========>-------------------] 30%') . $this->generateOutput(' 25/50 [==============>-------------] 50%'), stream_get_contents($output->getStream())); }
public function run() { foreach ($this->processes as $process) { /** @var $process Process **/ $process->setIdleTimeout($this->idleTimeout); $process->setTimeout($this->timeout); $process->start(); $this->printTaskInfo($process->getCommandLine()); } $progress = new ProgressHelper(); $progress->setFormat(" <fg=white;bg=cyan;options=bold>[" . get_class($this) . "]</fg=white;bg=cyan;options=bold> Processes: %current%/%max% [%bar%] %percent%%"); $progress->start($this->getOutput(), count($this->processes)); $running = $this->processes; $progress->display(); $started = microtime(true); while (true) { foreach ($running as $k => $process) { try { $process->checkTimeout(); } catch (ProcessTimedOutException $e) { } if (!$process->isRunning()) { $progress->advance(); if ($this->isPrinted) { $this->getOutput()->writeln(""); $this->printTaskInfo("Output for <fg=white;bg=magenta> " . $process->getCommandLine() . " </fg=white;bg=magenta>"); $this->getOutput()->writeln($process->getOutput(), OutputInterface::OUTPUT_RAW); if ($process->getErrorOutput()) { $this->getOutput()->writeln("<error>" . $process->getErrorOutput() . "</error>"); } } unset($running[$k]); } } if (empty($running)) { break; } usleep(1000); } $this->getOutput()->writeln(""); $taken = number_format(microtime(true) - $started, 2); $this->printTaskInfo(count($this->processes) . " processes ended in {$taken} s"); $errorMessage = ''; $exitCode = 0; foreach ($this->processes as $p) { if ($p->getExitCode() === 0) { continue; } $errorMessage .= "'" . $p->getCommandLine() . "' exited with code " . $p->getExitCode() . " \n"; $exitCode = max($exitCode, $p->getExitCode()); } return new Result($this, $exitCode, $errorMessage); }
/** * Log warning while progress helper is running. * * @param \Symfony\Component\Console\Output\OutputInterface $output * @param \Symfony\Component\Console\Helper\ProgressHelper $progress * @param $message */ private function logWarning(OutputInterface $output, ProgressHelper $progress, $message) { $progress->clear(); // get rid of padding (side effect of displaying progress bar) $output->write("\r"); $this->logger->warning($message); $progress->display(); }
/** * @param int $count The number of founded files */ public function start($count) { $this->progress->start($this->output, $count); $this->progress->display(); $this->started = microtime(true); }