public function test_onSiteDeleted_shouldRemoveRememberedArchiveReports() { $archive = new ArchiveInvalidator(); $archive->rememberToInvalidateArchivedReportsLater($this->siteId, Date::factory('2014-04-05')); $archive->rememberToInvalidateArchivedReportsLater($this->siteId, Date::factory('2014-04-06')); $archive->rememberToInvalidateArchivedReportsLater(4949, Date::factory('2014-04-05')); $expected = array('2014-04-05' => array($this->siteId, 4949), '2014-04-06' => array($this->siteId)); $this->assertEquals($expected, $archive->getRememberedArchivedReportsThatShouldBeInvalidated()); $this->manager->onSiteDeleted($this->siteId); $expected = array('2014-04-05' => array(4949)); $this->assertEquals($expected, $archive->getRememberedArchivedReportsThatShouldBeInvalidated()); }
public function test_markArchivesAsInvalidated_shouldForgetInvalidatedSitesAndDates() { $this->rememberReportsForManySitesAndDates(); $idSites = array(2, 10, 7, 5); $dates = '2014-04-05,2014-04-08,2010-10-10'; $this->invalidator->markArchivesAsInvalidated($idSites, $dates, false); $reports = $this->invalidator->getRememberedArchivedReportsThatShouldBeInvalidated(); $expected = array('2014-04-05' => array(1, 4), '2014-05-05' => array(2, 5), '2014-04-06' => array(3), '2014-05-08' => array(7)); $this->assertSame($expected, $reports); }
public function invalidateArchivedReportsForSitesThatNeedToBeArchivedAgain() { $invalidator = new ArchiveInvalidator(); $sitesPerDays = $invalidator->getRememberedArchivedReportsThatShouldBeInvalidated(); foreach ($sitesPerDays as $date => $siteIds) { $listSiteIds = implode(',', $siteIds); try { $this->logger->info('Will invalidate archived reports for ' . $date . ' for following websites ids: ' . $listSiteIds); $this->getApiToInvalidateArchivedReport()->invalidateArchivedReports($siteIds, $date); } catch (Exception $e) { $this->logger->info('Failed to invalidate archived reports: ' . $e->getMessage()); } } }
private function invalidatedReportsIfNeeded() { $siteIdsRequested = $this->getSiteIdsThatAreRequestedInThisArchiveButWereNotInvalidatedYet(); if (empty($siteIdsRequested)) { return; // all requested site ids were already handled } $sitesPerDays = $this->invalidator->getRememberedArchivedReportsThatShouldBeInvalidated(); foreach ($sitesPerDays as $date => $siteIds) { if (empty($siteIds)) { continue; } $siteIdsToActuallyInvalidate = array_intersect($siteIds, $siteIdsRequested); if (empty($siteIdsToActuallyInvalidate)) { continue; // all site ids that should be handled are already handled } try { $this->invalidator->markArchivesAsInvalidated($siteIdsToActuallyInvalidate, array(Date::factory($date)), false); } catch (\Exception $e) { Site::clearCache(); throw $e; } } Site::clearCache(); }
private function assertRememberedArchivedReportsThatShouldBeInvalidated($idsite, $requestDate, $expectedRemeberedArchivedReports) { /** @var Visit $visit */ list($visit) = $this->prepareVisitWithRequest(array('idsite' => $idsite, 'rec' => 1, 'cip' => '156.146.156.146', 'token_auth' => Fixture::getTokenAuth()), $requestDate); $visit->handle(); $archive = new ArchiveInvalidator(); $remembered = $archive->getRememberedArchivedReportsThatShouldBeInvalidated(); $this->assertSame($expectedRemeberedArchivedReports, $remembered); }
public function test_Archive_getNumeric_shouldInvalidateRememberedReportsOncePerRequestIfNeeded() { $this->markTestSkippedOnPhp53(); // Tests that getting a visits summary metric (nb_visits) & a Goal's metric (Goal_revenue) // at the same time works. $dateTimeRange = '2010-01-03,2010-01-06'; $columns = array('nb_visits', 'Goal_nb_conversions', 'nb_actions'); $idSite1 = self::$fixture->idSite1; $archive = Archive::build($idSite1, 'range', $dateTimeRange); $result = $archive->getNumeric($columns); $this->assertEquals(array('nb_visits' => 5, 'Goal_nb_conversions' => 6, 'nb_actions' => 13), $result); $cache = Cache::getTransientCache(); $this->assertEquals(array(self::$fixture->idSite1, self::$fixture->idSite2), $cache->fetch('Archive.SiteIdsOfRememberedReportsInvalidated')); $invalidator = new ArchiveInvalidator(); self::$fixture->trackVisits(); // trackVisits should remember to invalidate archived reports $this->assertNotEmpty($invalidator->getRememberedArchivedReportsThatShouldBeInvalidated()); // although there were new tracked visists it doesn'T change as the report invalidation is cached and was // already invalidated in previous Archive::get(); $archive = Archive::build($idSite1, 'range', $dateTimeRange); $result = $archive->getNumeric($columns); $this->assertEquals(array('nb_visits' => 5, 'Goal_nb_conversions' => 6, 'nb_actions' => 13), $result); // make sure the caching in archive::get() worked and they are still to be invalidated $this->assertCount(10, $invalidator->getRememberedArchivedReportsThatShouldBeInvalidated()); // now we force to actually invalidate archived reports again and then archive will be rebuilt for requsted siteId = 1 $cache->delete('Archive.SiteIdsOfRememberedReportsInvalidated'); $archive = Archive::build($idSite1, 'range', $dateTimeRange); $result = $archive->getNumeric($columns); // archive::get() should have invalidated siteId 1 and siteId 2 should be still to be done $expectedArchiveReportsLeft = array('2010-01-04' => array(2)); $this->assertEquals($expectedArchiveReportsLeft, $invalidator->getRememberedArchivedReportsThatShouldBeInvalidated()); $this->assertEquals(array('nb_visits' => 6, 'Goal_nb_conversions' => 7, 'nb_actions' => 26), $result); }