OpenXE/classes/Modules/SuperSearch/Scheduler/SuperSearchDiffIndexTask.php

98 lines
3.0 KiB
PHP
Raw Normal View History

2021-05-21 08:49:41 +02:00
<?php
namespace Xentral\Modules\SuperSearch\Scheduler;
use Xentral\Modules\SuperSearch\SuperSearchIndexer;
use Xentral\Modules\SuperSearch\SuperSearchService;
use Xentral\Modules\SuperSearch\Wrapper\CompanyConfigWrapper;
final class SuperSearchDiffIndexTask
{
/** @var SuperSearchService $service */
private $service;
/** @var SuperSearchIndexer $indexer */
private $indexer;
/** @var CompanyConfigWrapper $config */
private $config;
/**
* @param SuperSearchService $service
* @param SuperSearchIndexer $indexer
* @param CompanyConfigWrapper $config
*/
public function __construct(SuperSearchService $service, SuperSearchIndexer $indexer, CompanyConfigWrapper $config)
{
$this->service = $service;
$this->indexer = $indexer;
$this->config = $config;
}
/**
* @return void
*/
public function execute()
{
$fullIndexCronjobActive = (int)$this->config->get('supersearch_full_index_task_mutex');
// Diff-Index nur ausführen wenn Full-Index-Cronjob gerade nicht läuft
if ($fullIndexCronjobActive === 0) {
$this->updateIndexes();
}
// Full-Index läuft gerade > Zähler erhöhen
if ($fullIndexCronjobActive > 0) {
$this->config->set('supersearch_full_index_task_mutex', (string)($fullIndexCronjobActive + 1));
}
// Full-Index läuft schon sehr lange (eher ein Fehler) > Zähler zurücksetzen
if ($fullIndexCronjobActive > 3) {
$this->config->set('supersearch_full_index_task_mutex', '0');
}
}
/**
* @return void
*/
private function updateIndexes()
{
$meta = $this->indexer->getProviderMetaData();
foreach ($meta as $row) {
$indexName = $row['name'];
$indexTitle = $row['title'];
$moduleName = $row['module'];
// Sicherstellen dass die Indexe für die registrierten Provider vorhanden sind
if (!$this->service->existsIndex($indexName)) {
$this->service->createIndex($indexName, $indexTitle, $moduleName);
}
/*
* Such-Index befüllen
*/
// Diff-Index wurde schon einmal ausgeführt > Diff-Index wieder ausführen
$lastDiffIndexTime = $this->indexer->getLastDiffIndexTime($indexName);
if ($lastDiffIndexTime !== null) {
$this->indexer->updateIndexSince($indexName, $lastDiffIndexTime);
continue;
}
// Diff-Index und Full-Index wurden noch nie ausgeführt => FullIndex ausführen
$lastFullIndexTime = $this->indexer->getLastFullIndexTime($indexName);
if ($lastDiffIndexTime === null && $lastFullIndexTime === null) {
$this->indexer->updateIndexFull($indexName);
}
}
}
/**
* @return void
*/
public function cleanup()
{
// Nothing to do
}
}