fixtureModel = $fixtureModel; parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('setup:performance:generate-fixtures') ->setDescription('Generates fixtures') ->setDefinition([ new InputArgument( self::PROFILE_ARGUMENT, InputArgument::REQUIRED, 'Path to profile configuration file' ), new InputOption( self::SKIP_REINDEX_OPTION, 's', InputOption::VALUE_NONE, 'Skip reindex' ) ]); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { try { $totalStartTime = microtime(true); $fixtureModel = $this->fixtureModel; $fixtureModel->loadConfig($input->getArgument(self::PROFILE_ARGUMENT)); $fixtureModel->initObjectManager(); $fixtureModel->loadFixtures(); $output->writeln('Generating profile with following params:'); foreach ($fixtureModel->getFixtures() as $fixture) { $fixture->printInfo($output); } /** @var \Magento\Setup\Fixtures\ConfigsApplyFixture $configFixture */ $configFixture = $fixtureModel ->getFixtureByName(\Magento\Setup\Fixtures\ConfigsApplyFixture::class); $configFixture && $this->executeFixture($configFixture, $output); /** @var $config \Magento\Indexer\Model\Config */ $config = $fixtureModel->getObjectManager()->get(\Magento\Indexer\Model\Config::class); $indexerListIds = $config->getIndexers(); /** @var $indexerRegistry \Magento\Framework\Indexer\IndexerRegistry */ $indexerRegistry = $fixtureModel->getObjectManager() ->create(\Magento\Framework\Indexer\IndexerRegistry::class); $indexersState = []; foreach ($indexerListIds as $indexerId) { $indexer = $indexerRegistry->get($indexerId['indexer_id']); $indexersState[$indexerId['indexer_id']] = $indexer->isScheduled(); $indexer->setScheduled(true); } foreach ($fixtureModel->getFixtures() as $fixture) { $this->executeFixture($fixture, $output); } $this->clearChangelog(); foreach ($indexerListIds as $indexerId) { /** @var $indexer \Magento\Indexer\Model\Indexer */ $indexer = $indexerRegistry->get($indexerId['indexer_id']); $indexer->setScheduled($indexersState[$indexerId['indexer_id']]); } /** @var \Magento\Setup\Fixtures\IndexersStatesApplyFixture $indexerFixture */ $indexerFixture = $fixtureModel ->getFixtureByName(\Magento\Setup\Fixtures\IndexersStatesApplyFixture::class); $indexerFixture && $this->executeFixture($indexerFixture, $output); if (!$input->getOption(self::SKIP_REINDEX_OPTION)) { $fixtureModel->reindex($output); } $totalEndTime = microtime(true); $totalResultTime = $totalEndTime - $totalStartTime; $output->writeln('Total execution time: ' . gmdate('H:i:s', $totalResultTime) . ''); } catch (\Exception $e) { $output->writeln('' . $e->getMessage() . ''); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } /** * Clear changelog after generation * * @return void */ private function clearChangelog() { $viewConfig = $this->fixtureModel->getObjectManager()->create(CollectionInterface::class); /* @var ResourceConnection $resource */ $resource = $this->fixtureModel->getObjectManager()->get(ResourceConnection::class); foreach ($viewConfig as $view) { /* @var \Magento\Framework\Mview\ViewInterface $view */ $changeLogTableName = $resource->getTableName($view->getChangelog()->getName()); if ($resource->getConnection()->isTableExists($changeLogTableName)) { $resource->getConnection()->truncateTable($changeLogTableName); } } } /** * @param \Magento\Setup\Fixtures\Fixture $fixture * @param OutputInterface $output */ private function executeFixture(\Magento\Setup\Fixtures\Fixture $fixture, OutputInterface $output) { $output->write('' . $fixture->getActionTitle() . '... '); $startTime = microtime(true); $fixture->execute($output); $endTime = microtime(true); $resultTime = $endTime - $startTime; $output->writeln(' done in ' . gmdate('H:i:s', $resultTime) . ''); } }