/** * Insert aggregated daily data serialized * * @throws \Exception */ protected function insertDayReports() { /** @var DataTable $dataTable */ $dataTable = $this->arrays->asDataTable(); $this->setVisitorIds($dataTable); $report = $dataTable->getSerialized($this->maximumRowsInDataTableLevelZero, null, Metrics::INDEX_NB_VISITS); $this->getProcessor()->insertBlobRecord(self::USERID_ARCHIVE_RECORD, $report); }
public function aggregateDayReport() { $this->dataArray = new DataArray(); for ($i = 1; $i <= Tracker::MAX_CUSTOM_VARIABLES; $i++) { $this->aggregateCustomVariable($i); } $this->removeVisitsMetricsFromActionsAggregate(); $this->dataArray->enrichMetricsWithConversions(); $table = $this->dataArray->asDataTable(); $blob = $table->getSerialized($this->maximumRowsInDataTableLevelZero, $this->maximumRowsInSubDataTable, $columnToSort = Metrics::INDEX_NB_VISITS); $this->getProcessor()->insertBlobRecord(self::CUSTOM_VARIABLE_RECORD_NAME, $blob); }
public function aggregateDayReport() { $this->dataArray = new DataArray(); $maxCustomVariables = CustomVariables::getNumUsableCustomVariables(); for ($i = 1; $i <= $maxCustomVariables; $i++) { $this->aggregateCustomVariable($i); } $this->removeVisitsMetricsFromActionsAggregate(); $this->dataArray->enrichMetricsWithConversions(); $table = $this->dataArray->asDataTable(); foreach ($table->getRows() as $row) { $label = $row->getColumn('label'); if (!empty($this->metadata[$label])) { foreach ($this->metadata[$label] as $name => $value) { $row->addMetadata($name, $value); } } } $blob = $table->getSerialized($this->maximumRowsInDataTableLevelZero, $this->maximumRowsInSubDataTable, $columnToSort = Metrics::INDEX_NB_VISITS); $this->getProcessor()->insertBlobRecord(self::CUSTOM_VARIABLE_RECORD_NAME, $blob); }
private function aggregateUserInformation() { $logAggregator = $this->getLogAggregator(); $query = $logAggregator->queryVisitsByDimension($dimensions = array('log_visit.user_id'), $where = '', $additionalSelects = array('log_visit.first_name as "' . ClientCertificates::DATA_FIRST_NAME . '"', 'log_visit.last_name as "' . ClientCertificates::DATA_LAST_NAME . '"', 'log_visit.agency as "' . ClientCertificates::DATA_AGENCY . '"')); $dataRows = array(); while ($row = $query->fetch()) { array_push($dataRows, $row); } $dataArray = new DataArray($dataRows); $dataTable = $dataArray->asDataTable(); foreach ($dataTable->getRows() as $row) { $label = $row->getColumn('log_visit.user_id'); $row->setColumn('label', $label); } $archiveProcessor = $this->getProcessor(); $archiveProcessor->insertBlobRecord('ClientCertificates_GetUserInformation', $dataTable->getSerialized(500)); }
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); }
/** * Get information about external referrers (i.e. search engines, websites & campaigns) * * @param $idaction * @param $actionType * @param Logaggregator $logAggregator * @param $limitBeforeGrouping * @return DataTable */ protected function queryExternalReferrers($idaction, $actionType, $logAggregator, $limitBeforeGrouping = false) { $rankingQuery = new RankingQuery($limitBeforeGrouping ? $limitBeforeGrouping : $this->limitBeforeGrouping); // we generate a single column that contains the interesting data for each referrer. // the reason we cannot group by referer_* becomes clear when we look at search engine keywords. // referer_url contains the url from the search engine, referer_keyword the keyword we want to // group by. when we group by both, we don't get a single column for the keyword but instead // one column per keyword + search engine url. this way, we could not get the top keywords using // the ranking query. $dimensions = array('referrer_data', 'referer_type'); $rankingQuery->addLabelColumn('referrer_data'); $selects = array('CASE log_visit.referer_type WHEN ' . Common::REFERRER_TYPE_DIRECT_ENTRY . ' THEN \'\' WHEN ' . Common::REFERRER_TYPE_SEARCH_ENGINE . ' THEN log_visit.referer_keyword WHEN ' . Common::REFERRER_TYPE_WEBSITE . ' THEN log_visit.referer_url WHEN ' . Common::REFERRER_TYPE_CAMPAIGN . ' THEN CONCAT(log_visit.referer_name, \' \', log_visit.referer_keyword) END AS `referrer_data`'); // get one limited group per referrer type $rankingQuery->partitionResultIntoMultipleGroups('referer_type', array(Common::REFERRER_TYPE_DIRECT_ENTRY, Common::REFERRER_TYPE_SEARCH_ENGINE, Common::REFERRER_TYPE_WEBSITE, Common::REFERRER_TYPE_CAMPAIGN)); $type = $this->getColumnTypeSuffix($actionType); $where = 'visit_entry_idaction_' . $type . ' = ' . intval($idaction); $metrics = array(Metrics::INDEX_NB_VISITS); $data = $logAggregator->queryVisitsByDimension($dimensions, $where, $selects, $metrics, $rankingQuery); $referrerData = array(); $referrerSubData = array(); foreach ($data as $referrerType => &$subData) { $referrerData[$referrerType] = array(Metrics::INDEX_NB_VISITS => 0); if ($referrerType != Common::REFERRER_TYPE_DIRECT_ENTRY) { $referrerSubData[$referrerType] = array(); } foreach ($subData as &$row) { if ($referrerType == Common::REFERRER_TYPE_SEARCH_ENGINE && empty($row['referrer_data'])) { $row['referrer_data'] = \Piwik\Plugins\Referrers\API::LABEL_KEYWORD_NOT_DEFINED; } $referrerData[$referrerType][Metrics::INDEX_NB_VISITS] += $row[Metrics::INDEX_NB_VISITS]; $label = $row['referrer_data']; if ($label) { $referrerSubData[$referrerType][$label] = array(Metrics::INDEX_NB_VISITS => $row[Metrics::INDEX_NB_VISITS]); } } } $array = new DataArray($referrerData, $referrerSubData); return $array->asDataTable(); }
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); }
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); }