12 use Symfony\Component\Console\Command\Command;
13 use Symfony\Component\Console\Input\InputArgument;
14 use Symfony\Component\Console\Input\InputInterface;
15 use Symfony\Component\Console\Input\InputOption;
16 use Symfony\Component\Console\Output\OutputInterface;
34 private $fixtureModel;
41 $this->fixtureModel = $fixtureModel;
42 parent::__construct();
50 $this->setName(
'setup:performance:generate-fixtures')
51 ->setDescription(
'Generates fixtures')
54 self::PROFILE_ARGUMENT,
55 InputArgument::REQUIRED,
56 'Path to profile configuration file' 59 self::SKIP_REINDEX_OPTION,
61 InputOption::VALUE_NONE,
71 protected function execute(InputInterface $input, OutputInterface
$output)
74 $totalStartTime = microtime(
true);
76 $fixtureModel = $this->fixtureModel;
77 $fixtureModel->loadConfig($input->getArgument(self::PROFILE_ARGUMENT));
78 $fixtureModel->initObjectManager();
79 $fixtureModel->loadFixtures();
81 $output->writeln(
'<info>Generating profile with following params:</info>');
83 foreach ($fixtureModel->getFixtures() as $fixture) {
88 $configFixture = $fixtureModel
89 ->getFixtureByName(\
Magento\Setup\Fixtures\ConfigsApplyFixture::class);
90 $configFixture && $this->executeFixture($configFixture,
$output);
93 $config = $fixtureModel->getObjectManager()->get(\
Magento\Indexer\Model\Config::class);
94 $indexerListIds =
$config->getIndexers();
97 ->create(\
Magento\Framework\Indexer\IndexerRegistry::class);
100 foreach ($indexerListIds as $indexerId) {
102 $indexersState[$indexerId[
'indexer_id']] =
$indexer->isScheduled();
106 foreach ($fixtureModel->getFixtures() as $fixture) {
107 $this->executeFixture($fixture,
$output);
110 $this->clearChangelog();
112 foreach ($indexerListIds as $indexerId) {
115 $indexer->setScheduled($indexersState[$indexerId[
'indexer_id']]);
119 $indexerFixture = $fixtureModel
120 ->getFixtureByName(\
Magento\Setup\Fixtures\IndexersStatesApplyFixture::class);
121 $indexerFixture && $this->executeFixture($indexerFixture,
$output);
123 if (!$input->getOption(self::SKIP_REINDEX_OPTION)) {
124 $fixtureModel->reindex(
$output);
127 $totalEndTime = microtime(
true);
128 $totalResultTime = $totalEndTime - $totalStartTime;
130 $output->writeln(
'<info>Total execution time: ' .
gmdate(
'H:i:s', $totalResultTime) .
'</info>');
131 }
catch (\Exception $e) {
132 $output->writeln(
'<error>' . $e->getMessage() .
'</error>');
134 return \Magento\Framework\Console\Cli::RETURN_FAILURE;
136 return \Magento\Framework\Console\Cli::RETURN_SUCCESS;
144 private function clearChangelog()
146 $viewConfig = $this->fixtureModel->getObjectManager()->create(CollectionInterface::class);
149 $resource = $this->fixtureModel->getObjectManager()->get(ResourceConnection::class);
151 foreach ($viewConfig as $view) {
153 $changeLogTableName =
$resource->getTableName($view->getChangelog()->getName());
154 if (
$resource->getConnection()->isTableExists($changeLogTableName)) {
155 $resource->getConnection()->truncateTable($changeLogTableName);
164 private function executeFixture(\
Magento\Setup\Fixtures\Fixture $fixture, OutputInterface
$output)
166 $output->write(
'<info>' . $fixture->getActionTitle() .
'... </info>');
167 $startTime = microtime(
true);
169 $endTime = microtime(
true);
170 $resultTime = $endTime - $startTime;
171 $output->writeln(
'<info> done in ' .
gmdate(
'H:i:s', $resultTime) .
'</info>');
__construct(FixtureModel $fixtureModel)
const SKIP_REINDEX_OPTION