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:
authordiosmosis <diosmosis@users.noreply.github.com>2019-06-26 05:43:22 +0300
committerMatthieu Aubry <mattab@users.noreply.github.com>2019-06-26 05:43:22 +0300
commitb107e19aa77e6c6869f7f22d0cd3e3b69712c651 (patch)
tree8226084e0019f57334a9b5df640d9adc7b9c301f /plugins/UserId
parentae3c89377939dd0223687ae7d3be4124a38c3d5e (diff)
Use ranking query on userid reports. (#14551)
* Use ranking query on userid reports. * Fix test ordering on travis. * Use existing userid row limit config option and deal w/ ranking query summary row which is not treated as datatable summary row. * update system test * another test update * Add order by to get test to pass.
Diffstat (limited to 'plugins/UserId')
-rw-r--r--plugins/UserId/Archiver.php48
1 files changed, 44 insertions, 4 deletions
diff --git a/plugins/UserId/Archiver.php b/plugins/UserId/Archiver.php
index 584f364d3c..b5a5f908b0 100644
--- a/plugins/UserId/Archiver.php
+++ b/plugins/UserId/Archiver.php
@@ -10,7 +10,8 @@ namespace Piwik\Plugins\UserId;
use Piwik\Config;
use Piwik\DataArray;
use Piwik\DataTable;
-use Piwik\Metrics;
+use Piwik\Metrics as PiwikMetrics;
+use Piwik\RankingQuery;
/**
* Archiver that aggregates metrics per user ID (user_id field).
@@ -77,11 +78,24 @@ class Archiver extends \Piwik\Plugin\Archiver
$userIdFieldName = self::USER_ID_FIELD;
$visitorIdFieldName = self::VISITOR_ID_FIELD;
+ $rankingQueryLimit = $this->getRankingQueryLimit();
+
+ $rankingQuery = false;
+ if ($rankingQueryLimit > 0) {
+ $rankingQuery = new RankingQuery($rankingQueryLimit);
+ $rankingQuery->setOthersLabel(DataTable::LABEL_SUMMARY_ROW);
+ $rankingQuery->addLabelColumn($userIdFieldName);
+ $rankingQuery->addLabelColumn($visitorIdFieldName);
+ }
+
/** @var \Zend_Db_Statement $query */
$query = $this->getLogAggregator()->queryVisitsByDimension(
array(self::USER_ID_FIELD),
"log_visit.$userIdFieldName IS NOT NULL AND log_visit.$userIdFieldName != ''",
- array("LOWER(HEX($visitorIdFieldName)) as $visitorIdFieldName")
+ array("LOWER(HEX($visitorIdFieldName)) as $visitorIdFieldName"),
+ $metrics = false,
+ $rankingQuery,
+ self::USER_ID_FIELD . ' ASC'
);
if ($query === false) {
@@ -89,7 +103,7 @@ class Archiver extends \Piwik\Plugin\Archiver
}
$rowsCount = 0;
- while ($row = $query->fetch()) {
+ foreach ($query as $row) {
$rowsCount++;
$this->arrays->sumMetricsVisits($row[$userIdFieldName], $row);
$this->rememberVisitorId($row);
@@ -105,8 +119,23 @@ class Archiver extends \Piwik\Plugin\Archiver
{
/** @var DataTable $dataTable */
$dataTable = $this->arrays->asDataTable();
+
+ // deal w/ ranking query summary row
+ $rankingQuerySummaryRow = $dataTable->getRowFromLabel(DataTable::LABEL_SUMMARY_ROW);
+ if ($rankingQuerySummaryRow) {
+ $rankingQuerySummaryRowId = $dataTable->getRowIdFromLabel(DataTable::LABEL_SUMMARY_ROW);
+ $dataTable->deleteRow($rankingQuerySummaryRowId);
+
+ $actualSummaryRow = $dataTable->getRowFromId(DataTable::ID_SUMMARY_ROW);
+ if ($actualSummaryRow) {
+ $actualSummaryRow->sumRow($rankingQuerySummaryRow);
+ } else {
+ $dataTable->addSummaryRow($rankingQuerySummaryRow);
+ }
+ }
+
$this->setVisitorIds($dataTable);
- $report = $dataTable->getSerialized($this->maximumRowsInDataTableLevelZero, null, Metrics::INDEX_NB_VISITS);
+ $report = $dataTable->getSerialized($this->maximumRowsInDataTableLevelZero, null, PiwikMetrics::INDEX_NB_VISITS);
$this->getProcessor()->insertBlobRecord(self::USERID_ARCHIVE_RECORD, $report);
}
@@ -137,4 +166,15 @@ class Archiver extends \Piwik\Plugin\Archiver
}
}
+ private function getRankingQueryLimit()
+ {
+ $configGeneral = Config::getInstance()->General;
+ $configLimit = $configGeneral['archiving_ranking_query_row_limit'];
+ $limit = $configLimit == 0 ? 0 : max(
+ $configLimit,
+ $this->maximumRowsInDataTableLevelZero
+ );
+ return $limit;
+ }
+
} \ No newline at end of file