From d0dba57facf099b75a9bdf972e0bd45a0f29145e Mon Sep 17 00:00:00 2001 From: sgiehl <stefan@piwik.org> Date: Sun, 20 Nov 2016 20:23:22 +0100 Subject: [PATCH] Respect new shouldRunWithoutVisits method of plugin archivers in CronArchiver --- core/ArchiveProcessor/Loader.php | 2 +- core/ArchiveProcessor/PluginsArchiver.php | 20 +++++++++++++++++-- core/CronArchive.php | 7 +++++-- core/Plugin/Archiver.php | 2 +- .../ArchiveProcessor/PluginsArchiverTest.php | 2 +- .../Integration/ArchiveWithNoVisitsTest.php | 2 +- 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/core/ArchiveProcessor/Loader.php b/core/ArchiveProcessor/Loader.php index 4079f6923f..e6c5015aab 100644 --- a/core/ArchiveProcessor/Loader.php +++ b/core/ArchiveProcessor/Loader.php @@ -73,7 +73,7 @@ class Loader list($visits, $visitsConverted) = $this->prepareCoreMetricsArchive($visits, $visitsConverted); list($idArchive, $visits) = $this->prepareAllPluginsArchive($visits, $visitsConverted); - if ($this->isThereSomeVisits($visits)) { + if ($this->isThereSomeVisits($visits) || PluginsArchiver::doesAnyPluginArchiveWithoutVisits()) { return $idArchive; } return false; diff --git a/core/ArchiveProcessor/PluginsArchiver.php b/core/ArchiveProcessor/PluginsArchiver.php index ae0198b58b..bcfeb9cc8b 100644 --- a/core/ArchiveProcessor/PluginsArchiver.php +++ b/core/ArchiveProcessor/PluginsArchiver.php @@ -101,7 +101,7 @@ class PluginsArchiver $this->archiveProcessor->setNumberOfVisits($visits, $visitsConverted); - $archivers = $this->getPluginArchivers(); + $archivers = static::getPluginArchivers(); foreach ($archivers as $pluginName => $archiverClass) { // We clean up below all tables created during this function call (and recursive calls) @@ -166,12 +166,28 @@ class PluginsArchiver return $this->archiveWriter->getIdArchive(); } + /** + * Returns if any plugin archiver archives without visits + */ + public static function doesAnyPluginArchiveWithoutVisits() + { + $archivers = static::getPluginArchivers(); + + foreach ($archivers as $pluginName => $archiverClass) { + if ($archiverClass::shouldRunWithoutVisits()) { + return true; + } + } + + return false; + } + /** * Loads Archiver class from any plugin that defines one. * * @return \Piwik\Plugin\Archiver[] */ - protected function getPluginArchivers() + protected static function getPluginArchivers() { if (empty(static::$archivers)) { $pluginNames = \Piwik\Plugin\Manager::getInstance()->getActivatedPlugins(); diff --git a/core/CronArchive.php b/core/CronArchive.php index bac5aabcda..cc8a1de71c 100644 --- a/core/CronArchive.php +++ b/core/CronArchive.php @@ -9,6 +9,7 @@ namespace Piwik; use Exception; +use Piwik\ArchiveProcessor\PluginsArchiver; use Piwik\ArchiveProcessor\Rules; use Piwik\Archiver\Request; use Piwik\Container\StaticContainer; @@ -816,9 +817,11 @@ class CronArchive $this->requests++; $this->processed++; + $shouldArchiveWithoutVisits = PluginsArchiver::doesAnyPluginArchiveWithoutVisits(); + // If there is no visit today and we don't need to process this website, we can skip remaining archives if ( - 0 == $visitsToday + 0 == $visitsToday && !$shouldArchiveWithoutVisits && !$shouldArchivePeriods ) { $this->logger->info("Skipped website id $idSite, no visit today, " . $timerWebsite->__toString()); @@ -827,7 +830,7 @@ class CronArchive return false; } - if (0 == $visitsLastDays + if (0 == $visitsLastDays && !$shouldArchiveWithoutVisits && !$shouldArchivePeriods && $this->shouldArchiveAllSites ) { diff --git a/core/Plugin/Archiver.php b/core/Plugin/Archiver.php index c9a083c809..366ffbc325 100644 --- a/core/Plugin/Archiver.php +++ b/core/Plugin/Archiver.php @@ -147,7 +147,7 @@ abstract class Archiver * * @return bool */ - public function shouldRunWithoutVisits() + public static function shouldRunWithoutVisits() { return false; } diff --git a/tests/PHPUnit/Integration/ArchiveProcessor/PluginsArchiverTest.php b/tests/PHPUnit/Integration/ArchiveProcessor/PluginsArchiverTest.php index eaadfefe45..3c22fd934c 100644 --- a/tests/PHPUnit/Integration/ArchiveProcessor/PluginsArchiverTest.php +++ b/tests/PHPUnit/Integration/ArchiveProcessor/PluginsArchiverTest.php @@ -37,7 +37,7 @@ class CustomArchiver extends Archiver class CustomPluginsArchiver extends PluginsArchiver { - protected function getPluginArchivers() + protected static function getPluginArchivers() { return array( 'MyPluginName' => 'Piwik\Tests\Integration\Archive\CustomArchiver' diff --git a/tests/PHPUnit/Integration/ArchiveWithNoVisitsTest.php b/tests/PHPUnit/Integration/ArchiveWithNoVisitsTest.php index fcc86c9ba6..e0f9157de0 100644 --- a/tests/PHPUnit/Integration/ArchiveWithNoVisitsTest.php +++ b/tests/PHPUnit/Integration/ArchiveWithNoVisitsTest.php @@ -32,7 +32,7 @@ class ArchiveWithNoVisitsTest_MockArchiver extends Archiver self::$methodsCalled[] = 'aggregateMultipleReports'; } - public function shouldRunWithoutVisits() + public static function shouldRunWithoutVisits() { return self::$runWithoutVisits; } -- GitLab