Use ProgressBar in populate commande when available.
This commit is contained in:
parent
7f28be3c4e
commit
6bb2def21e
|
@ -11,6 +11,7 @@ use FOS\ElasticaBundle\IndexManager;
|
|||
use FOS\ElasticaBundle\Provider\ProviderRegistry;
|
||||
use FOS\ElasticaBundle\Resetter;
|
||||
use FOS\ElasticaBundle\Provider\ProviderInterface;
|
||||
use Symfony\Component\Console\Helper\ProgressBar;
|
||||
|
||||
/**
|
||||
* Populate the search index
|
||||
|
@ -109,20 +110,34 @@ class PopulateCommand extends ContainerAwareCommand
|
|||
*/
|
||||
private function populateIndex(OutputInterface $output, $index, $reset, $options)
|
||||
{
|
||||
|
||||
/** @var $providers ProviderInterface[] */
|
||||
$providers = $this->providerRegistry->getIndexProviders($index);
|
||||
|
||||
if ($reset) {
|
||||
$output->writeln(sprintf('<info>Resetting</info> <comment>%s</comment>', $index));
|
||||
$this->resetter->resetIndex($index, true);
|
||||
}
|
||||
|
||||
/** @var $providers ProviderInterface[] */
|
||||
$providers = $this->providerRegistry->getIndexProviders($index);
|
||||
|
||||
foreach ($providers as $type => $provider) {
|
||||
$loggerClosure = function($message) use ($output, $index, $type) {
|
||||
$output->writeln(sprintf('<info>Populating</info> %s/%s, %s', $index, $type, $message));
|
||||
};
|
||||
if (class_exists('Symfony\Component\Console\Helper\ProgressBar')) {
|
||||
$output->writeln(sprintf('<info>Populating</info> %s/%s', $index, $type));
|
||||
$progressBar = new ProgressBar($output, $provider->getTotalObjects());
|
||||
$progressBar->setFormat('debug');
|
||||
$progressBar->start();
|
||||
$loggerClosure = function($number) use ($progressBar) {
|
||||
$progressBar->advance($number);
|
||||
};
|
||||
} else {
|
||||
$loggerClosure = function($message) use ($output, $index, $type) {
|
||||
$output->writeln(sprintf('<info>Populating</info> %s/%s, %s', $index, $type, $message));
|
||||
};
|
||||
}
|
||||
|
||||
$options['progress-bar'] = true;
|
||||
$provider->populate($loggerClosure, $options);
|
||||
|
||||
if (isset($progressBar)) $progressBar->finish();
|
||||
}
|
||||
|
||||
$output->writeln(sprintf('<info>Refreshing</info> <comment>%s</comment>', $index));
|
||||
|
|
|
@ -7,6 +7,7 @@ use Elastica\Exception\Bulk\ResponseException as BulkResponseException;
|
|||
use FOS\ElasticaBundle\Persister\ObjectPersisterInterface;
|
||||
use FOS\ElasticaBundle\Provider\AbstractProvider as BaseAbstractProvider;
|
||||
use FOS\ElasticaBundle\Provider\IndexableInterface;
|
||||
use Symfony\Component\Console\Helper\ProgressBar;
|
||||
|
||||
abstract class AbstractProvider extends BaseAbstractProvider
|
||||
{
|
||||
|
@ -53,6 +54,7 @@ abstract class AbstractProvider extends BaseAbstractProvider
|
|||
$sleep = isset($options['sleep']) ? intval($options['sleep']) : 0;
|
||||
$batchSize = isset($options['batch-size']) ? intval($options['batch-size']) : $this->options['batch_size'];
|
||||
$ignoreErrors = isset($options['ignore-errors']) ? $options['ignore-errors'] : $this->options['ignore_errors'];
|
||||
$progressBar = isset($options['progress-bar']) ? boolval($options['progress-bar']) : false;
|
||||
$manager = $this->managerRegistry->getManagerForClass($this->objectClass);
|
||||
|
||||
for (; $offset < $nbObjects; $offset += $batchSize) {
|
||||
|
@ -94,12 +96,14 @@ abstract class AbstractProvider extends BaseAbstractProvider
|
|||
|
||||
usleep($sleep);
|
||||
|
||||
if ($loggerClosure) {
|
||||
if ($loggerClosure && !$progressBar) {
|
||||
$stepCount = $stepNbObjects + $offset;
|
||||
$percentComplete = 100 * $stepCount / $nbObjects;
|
||||
$timeDifference = microtime(true) - $stepStartTime;
|
||||
$objectsPerSecond = $timeDifference ? ($stepNbObjects / $timeDifference) : $stepNbObjects;
|
||||
$loggerClosure(sprintf('%0.1f%% (%d/%d), %d objects/s %s', $percentComplete, $stepCount, $nbObjects, $objectsPerSecond, $this->getMemoryUsage()));
|
||||
} else if ($loggerClosure && $progressBar) {
|
||||
$loggerClosure($stepNbObjects);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -108,6 +112,14 @@ abstract class AbstractProvider extends BaseAbstractProvider
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|mixed
|
||||
*/
|
||||
public function getTotalObjects()
|
||||
{
|
||||
return $this->countObjects($this->createQueryBuilder());
|
||||
}
|
||||
|
||||
/**
|
||||
* Counts objects that would be indexed using the query builder.
|
||||
*
|
||||
|
|
|
@ -20,6 +20,7 @@ class Provider extends AbstractProvider
|
|||
$nbObjects = $queryClass::create()->count();
|
||||
$offset = isset($options['offset']) ? intval($options['offset']) : 0;
|
||||
$sleep = isset($options['sleep']) ? intval($options['sleep']) : 0;
|
||||
$progressBar = isset($options['progress-bar']) ? boolval($options['progress-bar']) : false;
|
||||
$batchSize = isset($options['batch-size']) ? intval($options['batch-size']) : $this->options['batch_size'];
|
||||
|
||||
for (; $offset < $nbObjects; $offset += $batchSize) {
|
||||
|
@ -46,11 +47,13 @@ class Provider extends AbstractProvider
|
|||
|
||||
usleep($sleep);
|
||||
|
||||
if ($loggerClosure) {
|
||||
if ($loggerClosure && !$progressBar) {
|
||||
$stepCount = $stepNbObjects + $offset;
|
||||
$percentComplete = 100 * $stepCount / $nbObjects;
|
||||
$objectsPerSecond = $stepNbObjects / (microtime(true) - $stepStartTime);
|
||||
$loggerClosure(sprintf('%0.1f%% (%d/%d), %d objects/s %s', $percentComplete, $stepCount, $nbObjects, $objectsPerSecond, $this->getMemoryUsage()));
|
||||
} else if ($loggerClosure && $progressBar) {
|
||||
$loggerClosure($stepNbObjects);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue