Skip to content
Extraits de code Groupes Projets
Valider d578a737 rédigé par Stefan Giehl's avatar Stefan Giehl Validation de Matthieu Aubry
Parcourir les fichiers

Replace archives if they already exists instead of ignoring them (#11476)

* replace archives if they already exists instead of ignoring them

* adds a simple test to prove archives are replaced now

* improve test
parent 5d46f802
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -304,11 +304,12 @@ class Model
{
// duplicate idarchives are Ignored, see https://github.com/piwik/piwik/issues/987
$query = "INSERT IGNORE INTO " . $tableName . " (" . implode(", ", $fields) . ")
VALUES (?,?,?,?,?,?,?,?)";
VALUES (?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE " . end($fields) . " = ?";
$bindSql = $record;
$bindSql[] = $name;
$bindSql[] = $value;
$bindSql[] = $value;
Db::query($query, $bindSql);
......
......@@ -7,16 +7,21 @@
*/
namespace Piwik\Tests\Integration;
use Piwik\API\Proxy;
use Piwik\Archive as PiwikArchive;
use Piwik\ArchiveProcessor;
use Piwik\ArchiveProcessor\Parameters;
use Piwik\ArchiveProcessor\Rules;
use Piwik\Common;
use Piwik\Config;
use Piwik\DataAccess\ArchiveSelector;
use Piwik\DataAccess\ArchiveTableCreator;
use Piwik\DataAccess\ArchiveWriter;
use Piwik\DataAccess\LogAggregator;
use Piwik\Date;
use Piwik\Db;
use Piwik\Piwik;
use Piwik\Plugins\UserLanguage;
use Piwik\Segment;
use Piwik\Site;
use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
......@@ -229,6 +234,65 @@ class ArchiveTest extends IntegrationTestCase
);
}
public function testExistingArchivesAreReplaced()
{
$date = self::$fixture->dateTime;
$period = PeriodFactory::makePeriodFromQueryParams('UTC', 'day', $date);
// request an report to trigger archiving
$userLanguageReport = Proxy::getInstance()->call('\\Piwik\\Plugins\\UserLanguage\\API', 'getLanguage', array(
'idSite' => 1,
'period' => 'day',
'date' => $date
));
$this->assertEquals(1, $userLanguageReport->getRowsCount());
$this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getFirstRow()->getColumn('label'));
$this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getLastRow()->getColumn('label'));
$parameters = new Parameters(new Site(1), $period, new Segment('', ''));
$parameters->setRequestedPlugin('UserLanguage');
$result = ArchiveSelector::getArchiveIdAndVisits($parameters, $period->getDateStart()->getDateStartUTC());
$idArchive = $result ? array_shift($result) : null;
if (empty($idArchive)) {
$this->fail('Archive should be available');
}
// track a new visits now
$fixture = self::$fixture;
$t = $fixture::getTracker(1, $date, $defaultInit = true);
$t->setForceVisitDateTime(Date::factory($date)->addHour(1)->getDatetime());
$t->setUrl('http://example.org/index.htm');
$t->setBrowserLanguage('pt-br');
$fixture::checkResponse($t->doTrackPageView('my site'));
$archiveWriter = new ArchiveWriter($parameters, !!$idArchive);
$archiveWriter->idArchive = $idArchive;
$archiveProcessor = new ArchiveProcessor($parameters, $archiveWriter,
new LogAggregator($parameters));
$archiveProcessor->setNumberOfVisits(1, 1);
// directly trigger specific archiver for existing archive
$archiver = new UserLanguage\Archiver($archiveProcessor);
$archiver->aggregateDayReport();
// report should be updated
$userLanguageReport = Proxy::getInstance()->call('\\Piwik\\Plugins\\UserLanguage\\API', 'getLanguage', array(
'idSite' => 1,
'period' => 'day',
'date' => $date
));
$this->assertEquals(2, $userLanguageReport->getRowsCount());
$this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getFirstRow()->getColumn('label'));
$this->assertEquals('UserLanguage_LanguageCode pt', $userLanguageReport->getLastRow()->getColumn('label'));
}
private function createManyDifferentArchiveBlobs()
{
$recordName1 = 'Actions_Actions';
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter