Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/magento/module-indexer/Console/Command/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/magento/module-indexer/Console/Command/IndexerReindexCommand.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Indexer\Console\Command;

use Magento\Framework\App\ObjectManager;
use Magento\Framework\App\ObjectManagerFactory;
use Magento\Framework\Console\Cli;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Indexer\Config\DependencyInfoProvider;
use Magento\Framework\Indexer\ConfigInterface;
use Magento\Framework\Indexer\IndexerInterface;
use Magento\Framework\Indexer\IndexerRegistry;
use Magento\Framework\Indexer\StateInterface;
use Magento\Indexer\Model\Processor\MakeSharedIndexValid;
use Psr\Log\LoggerInterface;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

/**
 * Command to run indexers
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class IndexerReindexCommand extends AbstractIndexerManageCommand
{
    /**
     * @var array
     */
    private $sharedIndexesComplete = [];

    /**
     * @var ConfigInterface
     */
    private $config;

    /**
     * @var IndexerRegistry
     */
    private $indexerRegistry;

    /**
     * @var DependencyInfoProvider|null
     */
    private $dependencyInfoProvider;

    /**
     * @var MakeSharedIndexValid|null
     */
    private $makeSharedValid;

    /**
     * @var LoggerInterface
     */
    private $logger;

    /**
     * @param ObjectManagerFactory $objectManagerFactory
     * @param IndexerRegistry|null $indexerRegistry
     * @param DependencyInfoProvider|null $dependencyInfoProvider
     * @param MakeSharedIndexValid|null $makeSharedValid
     * @param LoggerInterface|null $logger
     */
    public function __construct(
        ObjectManagerFactory $objectManagerFactory,
        IndexerRegistry $indexerRegistry = null,
        DependencyInfoProvider $dependencyInfoProvider = null,
        MakeSharedIndexValid $makeSharedValid = null,
        ?LoggerInterface $logger = null
    ) {
        $this->indexerRegistry = $indexerRegistry;
        $this->dependencyInfoProvider = $dependencyInfoProvider;
        $this->makeSharedValid = $makeSharedValid;
        $this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class);
        parent::__construct($objectManagerFactory);
    }

    /**
     * @inheritdoc
     */
    protected function configure()
    {
        $this->setName('indexer:reindex')
            ->setDescription('Reindexes Data')
            ->setDefinition($this->getInputList());

        parent::configure();
    }

    /**
     * @inheritdoc
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $returnValue = Cli::RETURN_SUCCESS;
        foreach ($this->getIndexers($input) as $indexer) {
            try {
                $this->validateIndexerStatus($indexer);

                $output->write($indexer->getTitle() . ' index ');

                $startTime = new \DateTimeImmutable();
                $indexerConfig = $this->getConfig()->getIndexer($indexer->getId());
                $sharedIndex = $indexerConfig['shared_index'] ?? null;

                // Skip indexers having shared index that was already complete
                if (!in_array($sharedIndex, $this->sharedIndexesComplete)) {
                    $indexer->reindexAll();
                    if (!empty($sharedIndex) && $this->getMakeSharedValid()->execute($sharedIndex)) {
                        $this->sharedIndexesComplete[] = $sharedIndex;
                    }
                }
                $endTime = new \DateTimeImmutable();
                $interval = $startTime->diff($endTime);
                $days = $interval->format('%d');
                $hours = $days > 0 ? $days * 24 + $interval->format('%H') : $interval->format('%H');
                $minutes = $interval->format('%I');
                $seconds = $interval->format('%S');

                $output->writeln(
                    __('has been rebuilt successfully in %1:%2:%3', $hours, $minutes, $seconds)
                );
            } catch (\Throwable $e) {
                $output->writeln('process error during indexation process:');
                $output->writeln($e->getMessage());

                $output->writeln($e->getTraceAsString(), OutputInterface::VERBOSITY_DEBUG);
                $returnValue = Cli::RETURN_FAILURE;

                $this->logger->critical($e->getMessage());
            }
        }

        return $returnValue;
    }

    /**
     * @inheritdoc
     *
     * Returns the ordered list of specified indexers and related indexers.
     */
    protected function getIndexers(InputInterface $input)
    {
        $indexers = parent::getIndexers($input);
        $allIndexers = $this->getAllIndexers();
        if (!array_diff_key($allIndexers, $indexers)) {
            return $indexers;
        }

        $relatedIndexers = [];
        $dependentIndexers = [];

        foreach ($indexers as $indexer) {
            $relatedIndexers[] = $this->getRelatedIndexerIds($indexer->getId());
            $dependentIndexers[] = $this->getDependentIndexerIds($indexer->getId());
        }

        $relatedIndexers = array_unique(array_merge([], ...$relatedIndexers));
        $dependentIndexers = array_merge([], ...$dependentIndexers);

        $invalidRelatedIndexers = [];
        foreach ($relatedIndexers as $relatedIndexer) {
            if ($allIndexers[$relatedIndexer]->isInvalid()) {
                $invalidRelatedIndexers[] = $relatedIndexer;
            }
        }

        return array_intersect_key(
            $allIndexers,
            array_flip(
                array_unique(
                    array_merge(
                        array_keys($indexers),
                        $invalidRelatedIndexers,
                        $dependentIndexers
                    )
                )
            )
        );
    }

    /**
     * Return all indexer Ids on which the current indexer depends (directly or indirectly).
     *
     * @param string $indexerId
     * @return array
     */
    private function getRelatedIndexerIds(string $indexerId): array
    {
        $relatedIndexerIds = [];
        foreach ($this->getDependencyInfoProvider()->getIndexerIdsToRunBefore($indexerId) as $relatedIndexerId) {
            $relatedIndexerIds[] = [$relatedIndexerId];
            $relatedIndexerIds[] = $this->getRelatedIndexerIds($relatedIndexerId);
        }
        $relatedIndexerIds = array_unique(array_merge([], ...$relatedIndexerIds));

        return $relatedIndexerIds;
    }

    /**
     * Return all indexer Ids which depend on the current indexer (directly or indirectly).
     *
     * @param string $indexerId
     * @return array
     */
    private function getDependentIndexerIds(string $indexerId): array
    {
        $dependentIndexerIds = [];
        foreach (array_keys($this->getConfig()->getIndexers()) as $id) {
            $dependencies = $this->getDependencyInfoProvider()->getIndexerIdsToRunBefore($id);
            if (array_search($indexerId, $dependencies) !== false) {
                $dependentIndexerIds[] = [$id];
                $dependentIndexerIds[] = $this->getDependentIndexerIds($id);
            }
        }
        $dependentIndexerIds = array_unique(array_merge([], ...$dependentIndexerIds));

        return $dependentIndexerIds;
    }

    /**
     * Validate that indexer is not locked
     *
     * @param IndexerInterface $indexer
     * @return void
     * @throws LocalizedException
     */
    private function validateIndexerStatus(IndexerInterface $indexer)
    {
        if ($indexer->getStatus() == StateInterface::STATUS_WORKING) {
            throw new LocalizedException(
                __(
                    '%1 index is locked by another reindex process. Skipping.',
                    $indexer->getTitle()
                )
            );
        }
    }

    /**
     * Get config
     *
     * @return ConfigInterface
     * @deprecated 100.1.0 We don't recommend this approach anymore
     * @see Add a new optional parameter to the constructor at the end of the arguments list instead
     * and fetch the dependency using Magento\Framework\App\ObjectManager::getInstance() in the constructor body
     */
    private function getConfig()
    {
        if (!$this->config) {
            $this->config = $this->getObjectManager()->get(ConfigInterface::class);
        }
        return $this->config;
    }

    /**
     * Get dependency info provider
     *
     * @return DependencyInfoProvider
     * @deprecated 100.2.0 We don't recommend this approach anymore
     * @see Add a new optional parameter to the constructor at the end of the arguments list instead
     * and fetch the dependency using Magento\Framework\App\ObjectManager::getInstance() in the constructor body
     */
    private function getDependencyInfoProvider()
    {
        if (!$this->dependencyInfoProvider) {
            $this->dependencyInfoProvider = $this->getObjectManager()->get(DependencyInfoProvider::class);
        }
        return $this->dependencyInfoProvider;
    }

    /**
     * Get MakeSharedIndexValid processor.
     *
     * @return MakeSharedIndexValid
     */
    private function getMakeSharedValid(): MakeSharedIndexValid
    {
        if (!$this->makeSharedValid) {
            $this->makeSharedValid = $this->getObjectManager()->get(MakeSharedIndexValid::class);
        }

        return $this->makeSharedValid;
    }
}

Spamworldpro Mini