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--config/environment/test.php2
-rw-r--r--core/CliMulti/Process.php16
-rw-r--r--core/CliMulti/RequestCommand.php2
-rw-r--r--core/CronArchive.php12
-rw-r--r--plugins/CoreConsole/tests/System/ArchiveCronTest.php36
-rw-r--r--tests/PHPUnit/Integration/CronArchiveTest.php32
6 files changed, 71 insertions, 29 deletions
diff --git a/config/environment/test.php b/config/environment/test.php
index 63af43d95b..e6cbbd62f0 100644
--- a/config/environment/test.php
+++ b/config/environment/test.php
@@ -134,4 +134,6 @@ return array(
file_put_contents($outputFile, json_encode($outputContents));
})),
)),
+
+ 'test.vars.forceCliMultiViaCurl' => false,
);
diff --git a/core/CliMulti/Process.php b/core/CliMulti/Process.php
index ad1d30cd56..8133da8878 100644
--- a/core/CliMulti/Process.php
+++ b/core/CliMulti/Process.php
@@ -8,6 +8,7 @@
namespace Piwik\CliMulti;
use Piwik\CliMulti;
+use Piwik\Container\StaticContainer;
use Piwik\Filesystem;
use Piwik\SettingsServer;
@@ -45,6 +46,15 @@ class Process
$this->markAsNotStarted();
}
+ private static function isForcingAsyncProcessMode()
+ {
+ try {
+ return (bool) StaticContainer::get('test.vars.forceCliMultiViaCurl');
+ } catch (\Exception $ex) {
+ return false;
+ }
+ }
+
public function getPid()
{
return $this->pid;
@@ -178,6 +188,12 @@ class Process
public static function isSupported()
{
+ if (defined('PIWIK_TEST_MODE')
+ && self::isForcingAsyncProcessMode()
+ ) {
+ return false;
+ }
+
if (SettingsServer::isWindows()) {
return false;
}
diff --git a/core/CliMulti/RequestCommand.php b/core/CliMulti/RequestCommand.php
index f2e07dcb94..8dbd8d9ed0 100644
--- a/core/CliMulti/RequestCommand.php
+++ b/core/CliMulti/RequestCommand.php
@@ -103,6 +103,8 @@ class RequestCommand extends ConsoleCommand
Url::setHost($hostname);
$query = $input->getArgument('url-query');
+ $_SERVER['QUERY_STRING'] = $query;
+
$query = UrlHelper::getArrayFromQueryString($query); // NOTE: this method can create the StaticContainer now
foreach ($query as $name => $value) {
$_GET[$name] = urldecode($value);
diff --git a/core/CronArchive.php b/core/CronArchive.php
index da8236b355..57e6ea259d 100644
--- a/core/CronArchive.php
+++ b/core/CronArchive.php
@@ -212,6 +212,11 @@ class CronArchive
private $cliMultiRequestParser;
/**
+ * @var bool|mixed
+ */
+ private $supportsAsync;
+
+ /**
* Constructor.
*
* @param string|null $processNewSegmentsFrom When to archive new segments from. See [General] process_new_segments_from
@@ -235,7 +240,8 @@ class CronArchive
$this->rawLogDao = new RawLogDao();
- $this->cliMultiRequestParser = new RequestParser($this->makeCliMulti()->supportsAsync());
+ $this->supportsAsync = $this->makeCliMulti()->supportsAsync();
+ $this->cliMultiRequestParser = new RequestParser($this->supportsAsync);
$this->archiveFilter = new ArchiveFilter();
}
@@ -654,7 +660,7 @@ class CronArchive
{
$request = "?module=API&method=CoreAdminHome.archiveReports&idSite=$idSite&period=$period&date=" . $date . "&format=json";
if ($segment) {
- $request .= '&segment=' . urlencode(urlencode($segment));
+ $request .= '&segment=' . urlencode($segment);
}
if (!empty($plugin)) {
$request .= "&plugin=" . $plugin;
@@ -696,7 +702,7 @@ class CronArchive
if (empty($response)) {
$message .= "The response was empty. This usually means a server error. A solution to this error is generally to increase the value of 'memory_limit' in your php.ini file. ";
- if($this->makeCliMulti()->supportsAsync()) {
+ if($this->supportsAsync) {
$message .= " For more information and the error message please check in your PHP CLI error log file. As this core:archive command triggers PHP processes over the CLI, you can find where PHP CLI logs are stored by running this command: php -i | grep error_log";
} else {
$message .= " For more information and the error message please check your web server's error Log file. As this core:archive command triggers PHP processes over HTTP, you can find the error message in your Matomo's web server error logs. ";
diff --git a/plugins/CoreConsole/tests/System/ArchiveCronTest.php b/plugins/CoreConsole/tests/System/ArchiveCronTest.php
index 034b58906a..7886614f95 100644
--- a/plugins/CoreConsole/tests/System/ArchiveCronTest.php
+++ b/plugins/CoreConsole/tests/System/ArchiveCronTest.php
@@ -9,6 +9,7 @@ namespace Piwik\Plugins\CoreConsole\tests\System;
use Piwik\CronArchive;
use Piwik\Plugins\SegmentEditor\API;
+use Piwik\Tests\Framework\TestingEnvironmentVariables;
use Psr\Container\ContainerInterface;
use Piwik\Archive\ArchiveInvalidator;
use Piwik\Common;
@@ -178,17 +179,18 @@ class ArchiveCronTest extends SystemTestCase
// empty the list so nothing is invalidated during core:archive (so we only archive ExamplePlugin and not all plugins)
$invalidator->forgetRememberedArchivedReportsToInvalidate(1, Date::factory('2007-04-05'));
- $output = $this->runArchivePhpCron();
-
- Option::delete(CronArchive::OPTION_ARCHIVING_FINISHED_TS); // clear so segment re-archive logic runs on this run
- Option::delete(CronArchive::CRON_INVALIDATION_TIME_OPTION_NAME);
- $output = $this->runArchivePhpCron(); // have to run twice since we manually invalidate above
+ $this->runArchivePhpCron();
// add new segment w/ edited created/edit time so it will not trigger segment re-archiving, then track a visit
- // so the segments will be archived w/ other invalidation
- self::addNewSegmentToPast();
- self::trackVisitsForToday();
- $output = $this->runArchivePhpCron();
+ // so the segments will be archived w/ other invalidation. this also runs core:archive forcing CURL requests.
+ try {
+ self::forceCurlCliMulti();
+ self::addNewSegmentToPast();
+ self::trackVisitsForToday();
+ $output = $this->runArchivePhpCron();
+ } finally {
+ self::undoForceCurlCliMulti();
+ }
$expectedInvalidations = [];
$invalidationEntries = $this->getInvalidatedArchiveTableEntries();
@@ -230,7 +232,7 @@ class ArchiveCronTest extends SystemTestCase
$invalidator = StaticContainer::get(ArchiveInvalidator::class);
$invalidator->markArchivesAsInvalidated([1], ['2007-04-05'], 'day', new Segment('', [1]), false, false, 'ExamplePlugin.ExamplePlugin_example_metric2');
- $output = $this->runArchivePhpCron(['-vvv' => null]);
+ $output = $this->runArchivePhpCron();
Option::delete(CronArchive::OPTION_ARCHIVING_FINISHED_TS); // clear so segment re-archive logic runs on this run
Option::delete(CronArchive::CRON_INVALIDATION_TIME_OPTION_NAME);
@@ -358,6 +360,20 @@ class ArchiveCronTest extends SystemTestCase
{
return Db::fetchAll("SELECT idinvalidation, idarchive, idsite, date1, date2, period, name, status FROM " . Common::prefixTable('archive_invalidations'));
}
+
+ private static function undoForceCurlCliMulti()
+ {
+ $testVars = new TestingEnvironmentVariables();
+ $testVars->forceCliMultiViaCurl = 0;
+ $testVars->save();
+ }
+
+ private static function forceCurlCliMulti()
+ {
+ $testVars = new TestingEnvironmentVariables();
+ $testVars->forceCliMultiViaCurl = 1;
+ $testVars->save();
+ }
}
ArchiveCronTest::$fixture = new ManySitesImportedLogs();
diff --git a/tests/PHPUnit/Integration/CronArchiveTest.php b/tests/PHPUnit/Integration/CronArchiveTest.php
index 4d1f489553..041e2e8355 100644
--- a/tests/PHPUnit/Integration/CronArchiveTest.php
+++ b/tests/PHPUnit/Integration/CronArchiveTest.php
@@ -700,31 +700,31 @@ Done invalidating
Processing invalidation: [idinvalidation = 5, idsite = 1, period = day(2019-12-12 - 2019-12-12), name = donee0512c03f7c20af6ef96a8d792c6bb9f, segment = actions>=2].
Processing invalidation: [idinvalidation = 14, idsite = 1, period = day(2019-12-11 - 2019-12-11), name = donee0512c03f7c20af6ef96a8d792c6bb9f, segment = actions>=2].
Processing invalidation: [idinvalidation = 17, idsite = 1, period = day(2019-12-10 - 2019-12-10), name = donee0512c03f7c20af6ef96a8d792c6bb9f, segment = actions>=2].
-Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=day&date=2019-12-12&format=json&segment=actions%253E%253D2&trigger=archivephp
-Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=day&date=2019-12-11&format=json&segment=actions%253E%253D2&trigger=archivephp
-Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=day&date=2019-12-10&format=json&segment=actions%253E%253D2&trigger=archivephp
-Archived website id 1, period = day, date = 2019-12-12, segment = 'actions%3E%3D2', 0 visits found. Time elapsed: %fs
-Archived website id 1, period = day, date = 2019-12-11, segment = 'actions%3E%3D2', 0 visits found. Time elapsed: %fs
-Archived website id 1, period = day, date = 2019-12-10, segment = 'actions%3E%3D2', 0 visits found. Time elapsed: %fs
+Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=day&date=2019-12-12&format=json&segment=actions%3E%3D2&trigger=archivephp
+Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=day&date=2019-12-11&format=json&segment=actions%3E%3D2&trigger=archivephp
+Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=day&date=2019-12-10&format=json&segment=actions%3E%3D2&trigger=archivephp
+Archived website id 1, period = day, date = 2019-12-12, segment = 'actions>=2', 0 visits found. Time elapsed: %fs
+Archived website id 1, period = day, date = 2019-12-11, segment = 'actions>=2', 0 visits found. Time elapsed: %fs
+Archived website id 1, period = day, date = 2019-12-10, segment = 'actions>=2', 0 visits found. Time elapsed: %fs
Processing invalidation: [idinvalidation = 6, idsite = 1, period = week(2019-12-09 - 2019-12-15), name = donee0512c03f7c20af6ef96a8d792c6bb9f, segment = actions>=2].
Processing invalidation: [idinvalidation = 22, idsite = 1, period = day(2019-12-02 - 2019-12-02), name = donee0512c03f7c20af6ef96a8d792c6bb9f, segment = actions>=2].
No next invalidated archive.
-Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=week&date=2019-12-09&format=json&segment=actions%253E%253D2&trigger=archivephp
-Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=day&date=2019-12-02&format=json&segment=actions%253E%253D2&trigger=archivephp
-Archived website id 1, period = week, date = 2019-12-09, segment = 'actions%3E%3D2', 0 visits found. Time elapsed: %fs
-Archived website id 1, period = day, date = 2019-12-02, segment = 'actions%3E%3D2', 0 visits found. Time elapsed: %fs
+Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=week&date=2019-12-09&format=json&segment=actions%3E%3D2&trigger=archivephp
+Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=day&date=2019-12-02&format=json&segment=actions%3E%3D2&trigger=archivephp
+Archived website id 1, period = week, date = 2019-12-09, segment = 'actions>=2', 0 visits found. Time elapsed: %fs
+Archived website id 1, period = day, date = 2019-12-02, segment = 'actions>=2', 0 visits found. Time elapsed: %fs
Processing invalidation: [idinvalidation = 23, idsite = 1, period = week(2019-12-02 - 2019-12-08), name = donee0512c03f7c20af6ef96a8d792c6bb9f, segment = actions>=2].
No next invalidated archive.
-Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=week&date=2019-12-02&format=json&segment=actions%253E%253D2&trigger=archivephp
-Archived website id 1, period = week, date = 2019-12-02, segment = 'actions%3E%3D2', 0 visits found. Time elapsed: %fs
+Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=week&date=2019-12-02&format=json&segment=actions%3E%3D2&trigger=archivephp
+Archived website id 1, period = week, date = 2019-12-02, segment = 'actions>=2', 0 visits found. Time elapsed: %fs
Processing invalidation: [idinvalidation = 7, idsite = 1, period = month(2019-12-01 - 2019-12-31), name = donee0512c03f7c20af6ef96a8d792c6bb9f, segment = actions>=2].
No next invalidated archive.
-Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=month&date=2019-12-01&format=json&segment=actions%253E%253D2&trigger=archivephp
-Archived website id 1, period = month, date = 2019-12-01, segment = 'actions%3E%3D2', 0 visits found. Time elapsed: %fs
+Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=month&date=2019-12-01&format=json&segment=actions%3E%3D2&trigger=archivephp
+Archived website id 1, period = month, date = 2019-12-01, segment = 'actions>=2', 0 visits found. Time elapsed: %fs
Processing invalidation: [idinvalidation = 8, idsite = 1, period = year(2019-01-01 - 2019-12-31), name = donee0512c03f7c20af6ef96a8d792c6bb9f, segment = actions>=2].
No next invalidated archive.
-Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=year&date=2019-01-01&format=json&segment=actions%253E%253D2&trigger=archivephp
-Archived website id 1, period = year, date = 2019-01-01, segment = 'actions%3E%3D2', 0 visits found. Time elapsed: %fs
+Starting archiving for ?module=API&method=CoreAdminHome.archiveReports&idSite=1&period=year&date=2019-01-01&format=json&segment=actions%3E%3D2&trigger=archivephp
+Archived website id 1, period = year, date = 2019-01-01, segment = 'actions>=2', 0 visits found. Time elapsed: %fs
No next invalidated archive.
Finished archiving for site 1, 8 API requests, Time elapsed: %fs [1 / 1 done]
No more sites left to archive, stopping.