Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/ArchiveProcessor.php38
-rw-r--r--core/Plugin/Archiver.php21
-rw-r--r--tests/PHPUnit/Core/ArchiveProcessingTest.php31
3 files changed, 40 insertions, 50 deletions
diff --git a/core/ArchiveProcessor.php b/core/ArchiveProcessor.php
index 7b1ca233f3..212f1c06ef 100644
--- a/core/ArchiveProcessor.php
+++ b/core/ArchiveProcessor.php
@@ -157,11 +157,22 @@ class ArchiveProcessor
*/
private $segment = null;
+ /**
+ * @var Archive
+ */
+ protected $archive = null;
+
public function __construct(Period $period, Site $site, Segment $segment)
{
$this->period = $period;
$this->site = $site;
$this->segment = $segment;
+
+ // If we are aggregating multiple reports: prepare the Archive object needed for aggregate* methods
+ if(!$this->isDayArchive()) {
+ $subPeriods = $this->getPeriod()->getSubperiods();
+ $this->archive = Archive::factory($this->getSegment(), $subPeriods, array($this->getSite()->getId()));
+ }
}
/**
@@ -401,7 +412,7 @@ class ArchiveProcessor
*
* @return int|bool Datetime timestamp, or false if must look at any archive available
*/
- public function getMinTimeArchiveProcessed()
+ protected function getMinTimeArchiveProcessed()
{
$endDateTimestamp = self::determineIfArchivePermanent($this->getDateEnd());
$isArchiveTemporary = ($endDateTimestamp === false);
@@ -486,11 +497,11 @@ class ArchiveProcessor
{
$archivers = $this->getPluginArchivers();
- foreach($archivers as $archiverClass) {
+ foreach($archivers as $pluginName => $archiverClass) {
/** @var Archiver $archiver */
$archiver = new $archiverClass( $this );
- if($archiver->shouldArchive()) {
+ if($this->shouldProcessReportsForPlugin($pluginName)) {
if($this->isDayArchive()) {
$archiver->aggregateDayReport();
} else {
@@ -578,7 +589,7 @@ class ArchiveProcessor
* @param string $pluginName
* @return bool
*/
- public function shouldProcessReportsForPlugin($pluginName)
+ protected function shouldProcessReportsForPlugin($pluginName)
{
if (Rules::shouldProcessReportsAllPlugins($this->getSegment(), $this->getPeriod()->getLabel())) {
return true;
@@ -647,11 +658,6 @@ class ArchiveProcessor
);
/**
- * @var Archive
- */
- protected $archive = null;
-
- /**
* Sums records for every subperiod of the current period and inserts the result as the record
* for this period.
*
@@ -688,10 +694,9 @@ class ArchiveProcessor
if (!is_array($recordNames)) {
$recordNames = array($recordNames);
}
- $this->initArchive();
$nameToCount = array();
foreach ($recordNames as $recordName) {
- $table = $this->getRecordDataTableSum($recordName, $invalidSummedColumnNameToRenamedName, $columnAggregationOperations);
+ $table = $this->aggregateDataTableRecord($recordName, $invalidSummedColumnNameToRenamedName, $columnAggregationOperations);
$nameToCount[$recordName]['level0'] = $table->getRowsCount();
$nameToCount[$recordName]['recursive'] = $table->getRowsCountRecursive();
@@ -727,7 +732,6 @@ class ArchiveProcessor
if (!is_array($columns)) {
$columns = array($columns);
}
- $this->initArchive();
$data = $this->archive->getNumeric($columns);
$operationForColumn = $this->getOperationForColumns($columns, $operationToApply);
$results = $this->aggregateDataArray($data, $operationForColumn);
@@ -747,14 +751,6 @@ class ArchiveProcessor
return $results;
}
- protected function initArchive()
- {
- if (empty($this->archive)) {
- $subPeriods = $this->getPeriod()->getSubperiods();
- $this->archive = Archive::factory($this->getSegment(), $subPeriods, array($this->getSite()->getId()));
- }
- }
-
/**
* This method selects all DataTables that have the name $name over the period.
* All these DataTables are then added together, and the resulting DataTable is returned.
@@ -764,7 +760,7 @@ class ArchiveProcessor
* @param array $columnAggregationOperations Operations for aggregating columns, @see Row::sumRow()
* @return DataTable
*/
- protected function getRecordDataTableSum($name, $invalidSummedColumnNameToRenamedName, $columnAggregationOperations = null)
+ protected function aggregateDataTableRecord($name, $invalidSummedColumnNameToRenamedName, $columnAggregationOperations = null)
{
$table = new DataTable();
if (!empty($columnAggregationOperations)) {
diff --git a/core/Plugin/Archiver.php b/core/Plugin/Archiver.php
index 21ab1fed4d..1e603127a5 100644
--- a/core/Plugin/Archiver.php
+++ b/core/Plugin/Archiver.php
@@ -48,6 +48,9 @@ use Piwik\Config as PiwikConfig;
*/
abstract class Archiver
{
+ /**
+ * @var \Piwik\ArchiveProcessor
+ */
protected $processor;
/**
@@ -74,28 +77,12 @@ abstract class Archiver
*/
abstract public function aggregateMultipleReports();
- // todo: review this concept, each plugin should somehow maintain the list of report names they generate
- /**
- * Returns true if the current plugin should be archived or not.
- *
- * @return bool
- */
- public function shouldArchive()
- {
- $className = get_class($this);
- $pluginName = str_replace(array("Piwik\\Plugins\\", "\\Archiver"), "", $className);
- if (strpos($pluginName, "\\") !== false) {
- throw new \Exception("unexpected plugin name $pluginName in shouldArchive()");
- }
- return $this->getProcessor()->shouldProcessReportsForPlugin($pluginName);
- }
-
/**
* @return \Piwik\ArchiveProcessor
*/
protected function getProcessor()
{
- return $this->processor;
+ return $this->processor->getDateEnd();
}
/**
diff --git a/tests/PHPUnit/Core/ArchiveProcessingTest.php b/tests/PHPUnit/Core/ArchiveProcessingTest.php
index e1bb90adb0..9124981b0f 100644
--- a/tests/PHPUnit/Core/ArchiveProcessingTest.php
+++ b/tests/PHPUnit/Core/ArchiveProcessingTest.php
@@ -22,6 +22,13 @@ use Piwik\Segment;
use Piwik\SettingsServer;
use Piwik\Site;
+class ArchiveProcessorTest extends ArchiveProcessor {
+ public function public_getMinTimeArchiveProcessed()
+ {
+ return $this->getMinTimeArchiveProcessed();
+ }
+}
+
class ArchiveProcessingTest extends DatabaseTestCase
{
public function setUp()
@@ -61,7 +68,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
* @param string $periodLabel
* @param string $dateLabel
* @param string $siteTimezone
- * @return ArchiveProcessor
+ * @return ArchiveProcessorTest
*/
private function _createArchiveProcessor($periodLabel, $dateLabel, $siteTimezone)
{
@@ -70,7 +77,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
$period = Period::factory($periodLabel, $date);
$segment = new Segment('', $site->getId());
- return new ArchiveProcessor($period, $site, $segment);
+ return new \ArchiveProcessorTest($period, $site, $segment);
}
/**
@@ -94,7 +101,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
$timeout = Rules::getTodayArchiveTimeToLive();
$this->assertTrue($timeout >= 10);
$dateMinArchived = $now - $timeout;
- $this->compareTimestamps($dateMinArchived, $archiveProcessor->getMinTimeArchiveProcessed());
+ $this->compareTimestamps($dateMinArchived, $archiveProcessor->public_getMinTimeArchiveProcessed());
$this->assertTrue($archiveProcessor->isArchiveTemporary());
}
@@ -116,7 +123,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
// min finished timestamp considered when looking at archive timestamp
$dateMinArchived = Date::factory('2010-01-02')->getTimestamp();
- $this->assertEquals($archiveProcessor->getMinTimeArchiveProcessed() + 1, $dateMinArchived);
+ $this->assertEquals($archiveProcessor->public_getMinTimeArchiveProcessed() + 1, $dateMinArchived);
$this->assertEquals('2010-01-01 00:00:00', $archiveProcessor->getDateStart()->getDateStartUTC());
$this->assertEquals('2010-01-01 23:59:59', $archiveProcessor->getDateEnd()->getDateEndUTC());
@@ -133,7 +140,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
$archiveProcessor = $this->_createArchiveProcessor('day', '2010-01-01', $timezone);
// min finished timestamp considered when looking at archive timestamp
$dateMinArchived = Date::factory('2010-01-01 18:30:00');
- $this->assertEquals($archiveProcessor->getMinTimeArchiveProcessed() + 1, $dateMinArchived->getTimestamp());
+ $this->assertEquals($archiveProcessor->public_getMinTimeArchiveProcessed() + 1, $dateMinArchived->getTimestamp());
$this->assertEquals('2009-12-31 18:30:00', $archiveProcessor->getDateStart()->getDateStartUTC());
$this->assertEquals('2010-01-01 18:29:59', $archiveProcessor->getDateEnd()->getDateEndUTC());
@@ -150,7 +157,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
$archiveProcessor = $this->_createArchiveProcessor('month', '2010-01-02', $timezone);
// min finished timestamp considered when looking at archive timestamp
$dateMinArchived = Date::factory('2010-02-01 05:30:00');
- $this->assertEquals($archiveProcessor->getMinTimeArchiveProcessed() + 1, $dateMinArchived->getTimestamp());
+ $this->assertEquals($archiveProcessor->public_getMinTimeArchiveProcessed() + 1, $dateMinArchived->getTimestamp());
$this->assertEquals('2010-01-01 05:30:00', $archiveProcessor->getDateStart()->getDateStartUTC());
$this->assertEquals('2010-02-01 05:29:59', $archiveProcessor->getDateEnd()->getDateEndUTC());
@@ -175,7 +182,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
// we look at anything processed within the time to live range
$dateMinArchived = $now - Rules::getTodayArchiveTimeToLive();
- $this->compareTimestamps($dateMinArchived, $archiveProcessor->getMinTimeArchiveProcessed() );
+ $this->compareTimestamps($dateMinArchived, $archiveProcessor->public_getMinTimeArchiveProcessed() );
$this->assertTrue($archiveProcessor->isArchiveTemporary());
// when browsers don't trigger archives, we force ArchiveProcessor
@@ -187,7 +194,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
if (!Common::isPhpCliMode()) {
$dateMinArchived = 0;
}
- $this->compareTimestamps($archiveProcessor->getMinTimeArchiveProcessed(), $dateMinArchived);
+ $this->compareTimestamps($archiveProcessor->public_getMinTimeArchiveProcessed(), $dateMinArchived);
$this->assertEquals(date('Y-m-d', $timestamp) . ' 01:00:00', $archiveProcessor->getDateStart()->getDateStartUTC());
$this->assertEquals(date('Y-m-d', $timestamp + 86400) . ' 00:59:59', $archiveProcessor->getDateEnd()->getDateEndUTC());
@@ -216,7 +223,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
// we look at anything processed within the time to live range
$dateMinArchived = $now - Rules::getTodayArchiveTimeToLive();
- $minTimeArchivedProcessed = $archiveProcessor->getMinTimeArchiveProcessed();
+ $minTimeArchivedProcessed = $archiveProcessor->public_getMinTimeArchiveProcessed();
$this->compareTimestamps($dateMinArchived, $minTimeArchivedProcessed);
$this->assertTrue($archiveProcessor->isArchiveTemporary());
@@ -229,7 +236,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
if (!Common::isPhpCliMode()) {
$dateMinArchived = 0;
}
- $this->compareTimestamps($dateMinArchived, $archiveProcessor->getMinTimeArchiveProcessed());
+ $this->compareTimestamps($dateMinArchived, $archiveProcessor->public_getMinTimeArchiveProcessed());
// this test varies with DST
$this->assertTrue($archiveProcessor->getDateStart()->getDateStartUTC() == date('Y-m-d', $timestamp - 86400) . ' 22:00:00' ||
@@ -262,7 +269,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
// we look at anything processed within the time to live range
$dateMinArchived = $now - Rules::getTodayArchiveTimeToLive();
- $this->compareTimestamps($dateMinArchived, $archiveProcessor->getMinTimeArchiveProcessed() );
+ $this->compareTimestamps($dateMinArchived, $archiveProcessor->public_getMinTimeArchiveProcessed() );
$this->assertTrue($archiveProcessor->isArchiveTemporary());
// when browsers don't trigger archives, we force ArchiveProcessor
@@ -274,7 +281,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
if (!Common::isPhpCliMode()) {
$dateMinArchived = 0;
}
- $this->compareTimestamps($dateMinArchived, $archiveProcessor->getMinTimeArchiveProcessed());
+ $this->compareTimestamps($dateMinArchived, $archiveProcessor->public_getMinTimeArchiveProcessed());
// this test varies with DST
$this->assertTrue($archiveProcessor->getDateStart()->getDateStartUTC() == date('Y-m-d', $timestamp) . ' 04:00:00' ||