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);
 }
Example #3
0
 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());
         }
     }
 }
Example #4
0
 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();
 }
Example #5
0
 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);
 }