示例#1
0
 protected function aggregateFromVisits($query, $keyField, $valueField)
 {
     while ($row = $query->fetch()) {
         $key = $row[$keyField];
         $value = $this->cleanCustomVarValue($row[$valueField]);
         $this->dataArray->sumMetricsVisits($key, $row);
         $this->dataArray->sumMetricsVisitsPivot($key, $value, $row);
     }
 }
示例#2
0
 /**
  * Used to aggregate daily data per user ID
  */
 protected function aggregateUsers()
 {
     $userIdFieldName = self::USER_ID_FIELD;
     $visitorIdFieldName = self::VISITOR_ID_FIELD;
     /** @var \Zend_Db_Statement $query */
     $query = $this->getLogAggregator()->queryVisitsByDimension(array(self::USER_ID_FIELD), "{$userIdFieldName} IS NOT NULL AND {$userIdFieldName} != ''", array("LOWER(HEX({$visitorIdFieldName})) as {$visitorIdFieldName}"));
     if ($query === false) {
         return;
     }
     $rowsCount = 0;
     while ($row = $query->fetch()) {
         $rowsCount++;
         $this->arrays->sumMetricsVisits($row[$userIdFieldName], $row);
         $this->rememberVisitorId($row);
     }
 }
示例#3
0
 private function ensureAllHoursAreSet(DataArray &$array)
 {
     $data = $array->getDataArray();
     for ($i = 0; $i <= 23; $i++) {
         if (empty($data[$i])) {
             $array->sumMetricsVisits($i, DataArray::makeEmptyRow());
         }
     }
 }
示例#4
0
 protected function aggregateByLanguage()
 {
     /** @var RegionDataProvider $regionDataProvider */
     $regionDataProvider = StaticContainer::get('Piwik\\Intl\\Data\\Provider\\RegionDataProvider');
     $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION));
     $countryCodes = $regionDataProvider->getCountryList($includeInternalCodes = true);
     $metricsByLanguage = new DataArray();
     while ($row = $query->fetch()) {
         $langCode = Common::extractLanguageCodeFromBrowserLanguage($row['label']);
         $countryCode = Common::extractCountryCodeFromBrowserLanguage($row['label'], $countryCodes, $enableLanguageToCountryGuess = true);
         if ($countryCode == 'xx' || $countryCode == $langCode) {
             $metricsByLanguage->sumMetricsVisits($langCode, $row);
         } else {
             $metricsByLanguage->sumMetricsVisits($langCode . '-' . $countryCode, $row);
         }
     }
     $report = $metricsByLanguage->asDataTable();
     $this->insertTable(self::LANGUAGE_RECORD_NAME, $report);
 }
示例#5
0
 /**
  * Helper function that returns an array with common metrics for a given log_visit field distinct values.
  *
  * The statistics returned are:
  *  - number of unique visitors
  *  - number of visits
  *  - number of actions
  *  - maximum number of action for a visit
  *  - sum of the visits' length in sec
  *  - count of bouncing visits (visits with one page view)
  *
  * For example if $dimension = 'config_os' it will return the statistics for every distinct Operating systems
  * The returned array will have a row per distinct operating systems,
  * and a column per stat (nb of visits, max  actions, etc)
  *
  * 'label'    Metrics::INDEX_NB_UNIQ_VISITORS    Metrics::INDEX_NB_VISITS    etc.
  * Linux    27    66    ...
  * Windows XP    12    ...
  * Mac OS    15    36    ...
  *
  * @param string $dimension Table log_visit field name to be use to compute common stats
  * @return DataArray
  */
 public function getMetricsFromVisitByDimension($dimension)
 {
     if (!is_array($dimension)) {
         $dimension = array($dimension);
     }
     if (count($dimension) == 1) {
         $dimension = array("label" => reset($dimension));
     }
     $query = $this->queryVisitsByDimension($dimension);
     $metrics = new DataArray();
     while ($row = $query->fetch()) {
         $metrics->sumMetricsVisits($row["label"], $row);
     }
     return $metrics;
 }
示例#6
0
 protected function aggregateByLanguage()
 {
     $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION));
     $languageCodes = array_keys(Common::getLanguagesList());
     $metricsByLanguage = new DataArray();
     while ($row = $query->fetch()) {
         $code = Common::extractLanguageCodeFromBrowserLanguage($row['label'], $languageCodes);
         $metricsByLanguage->sumMetricsVisits($code, $row);
     }
     $report = $metricsByLanguage->asDataTable();
     $this->insertTable(self::LANGUAGE_RECORD_NAME, $report);
 }
示例#7
0
 protected function aggregateByLanguage()
 {
     $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION));
     $languageCodes = array_keys(Common::getLanguagesList());
     $countryCodes = Common::getCountriesList($includeInternalCodes = true);
     $metricsByLanguage = new DataArray();
     while ($row = $query->fetch()) {
         $langCode = Common::extractLanguageCodeFromBrowserLanguage($row['label'], $languageCodes);
         $countryCode = Common::extractCountryCodeFromBrowserLanguage($row['label'], $countryCodes, $enableLanguageToCountryGuess = true);
         if ($countryCode == 'xx' || $countryCode == $langCode) {
             $metricsByLanguage->sumMetricsVisits($langCode, $row);
         } else {
             $metricsByLanguage->sumMetricsVisits($langCode . '-' . $countryCode, $row);
         }
     }
     $report = $metricsByLanguage->asDataTable();
     $this->insertTable(self::LANGUAGE_RECORD_NAME, $report);
 }