From fb5f11a5ca82b15eb419803e6e00ce6dfba515d0 Mon Sep 17 00:00:00 2001 From: Timo Besenreuther Date: Tue, 2 Apr 2013 14:40:45 +0200 Subject: refs #1700 performance analytics * adding avg_time_generation to Actions.get + integration tests * adding sparkline for average generation time to Visitors > Overview * changing number formatting to 0.XXs instead of XXXms + test cases * tooltip for reports with avg. generation time: "average based on X hit(s)" * log import: support generation_time_milli (not only generation_time_micro) * example for importing generation time from logs in read me --- core/Piwik.php | 13 +++---- lang/en.php | 3 +- misc/log-analytics/README.md | 10 +++++ misc/log-analytics/import_logs.py | 9 +++-- plugins/Actions/API.php | 41 ++++++++++++++++----- plugins/Actions/Actions.php | 32 ++++++++-------- plugins/Actions/Archiving.php | 4 ++ plugins/Actions/Controller.php | 11 ++++-- plugins/CoreHome/templates/datatable.css | 4 ++ plugins/CoreHome/templates/datatable.js | 16 ++++++++ plugins/CoreHome/templates/datatable_cell.tpl | 3 ++ plugins/VisitsSummary/Controller.php | 2 + plugins/VisitsSummary/templates/sparklines.tpl | 5 +++ tests/PHPUnit/Core/PiwikTest.php | 12 +++--- tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php | 6 +++ .../Integration/OneVisitorTwoVisitsTest.php | 5 ++- .../test_ImportLogs__Actions.get_month.xml | 1 + ...orTwoVisits__Actions.getEntryPageTitles_day.xml | 6 +++ ...itorTwoVisits__Actions.getEntryPageUrls_day.xml | 6 +++ ...torTwoVisits__Actions.getExitPageTitles_day.xml | 6 +++ ...sitorTwoVisits__Actions.getExitPageUrls_day.xml | 6 +++ ...eVisitorTwoVisits__Actions.getPageTitle_day.xml | 2 + ...VisitorTwoVisits__Actions.getPageTitles_day.xml | 10 +++++ ...OneVisitorTwoVisits__Actions.getPageUrl_day.xml | 2 + ...neVisitorTwoVisits__Actions.getPageUrls_day.xml | 10 +++++ .../test_OneVisitorTwoVisits__Actions.get_day.xml | 1 + ...sits__subtable__API.getProcessedReport_week.xml | 4 ++ ...test_OneVisitorTwoVisits_csv__API.get_month.csv | Bin 1778 -> 1856 bytes ...okieSupport__Actions.getEntryPageTitles_day.xml | 6 +++ ...CookieSupport__Actions.getEntryPageUrls_day.xml | 6 +++ ...ookieSupport__Actions.getExitPageTitles_day.xml | 6 +++ ...hCookieSupport__Actions.getExitPageUrls_day.xml | 6 +++ ...withCookieSupport__Actions.getPageTitle_day.xml | 2 + ...ctions.getPageTitlesFollowingSiteSearch_day.xml | 2 + ...ithCookieSupport__Actions.getPageTitles_day.xml | 10 +++++ ...s_withCookieSupport__Actions.getPageUrl_day.xml | 2 + ..._Actions.getPageUrlsFollowingSiteSearch_day.xml | 2 + ..._withCookieSupport__Actions.getPageUrls_day.xml | 10 +++++ ...woVisits_withCookieSupport__Actions.get_day.xml | 1 + ...firstSite_lastN__API.getProcessedReport_day.xml | 5 +++ ...rstSite_lastN__API.getProcessedReport_month.xml | 4 ++ .../test_SiteSearch_AllSites__Actions.get_day.xml | 4 ++ ...test_SiteSearch_AllSites__Actions.get_month.xml | 3 ++ ...SiteSearch_NotLastNPeriods__Actions.get_day.xml | 1 + ...teSearch_NotLastNPeriods__Actions.get_month.xml | 1 + ...firstSite_lastN__API.getProcessedReport_day.xml | 8 ++-- ...firstSite_lastN__API.getProcessedReport_day.xml | 10 ++--- ...__PDFReports.generateReport_month.original.html | 24 ++++++++---- ...y__PDFReports.generateReport_month.original.pdf | Bin 466510 -> 466586 bytes ...etReportMetadata__API.getReportMetadata_day.xml | 4 ++ .../test_apiGetReportMetadata__API.get_day.xml | 1 + ...etadata_hideMetricsDoc__API.getMetadata_day.xml | 1 + ..._hideMetricsDoc__API.getProcessedReport_day.xml | 3 ++ ...y__PDFReports.generateReport_week.original.html | 8 ++++ ...ly__PDFReports.generateReport_week.original.pdf | Bin 486668 -> 486749 bytes .../expected/test_noVisit__Actions.get_day.xml | 1 + themes/default/common.css | 6 +++ 57 files changed, 304 insertions(+), 63 deletions(-) diff --git a/core/Piwik.php b/core/Piwik.php index 21a5a24d58..4915115d21 100644 --- a/core/Piwik.php +++ b/core/Piwik.php @@ -1417,9 +1417,9 @@ class Piwik $minutes = floor(($reminder = ($numberOfSeconds - $hours * 3600)) / 60); $seconds = floor($reminder - $minutes * 60); $time = sprintf("%02s", $hours) . ':' . sprintf("%02s", $minutes) . ':' . sprintf("%02s", $seconds); - $milliSeconds = ($numberOfSeconds * 1000) % 1000; - if ($milliSeconds) { - $time .= '.' . sprintf("%03s", $milliSeconds); + $centiSeconds = ($numberOfSeconds * 100) % 100; + if ($centiSeconds) { + $time .= '.' . sprintf("%02s", $centiSeconds); } return $time; } @@ -1435,8 +1435,7 @@ class Piwik $minutes = floor($minusDaysAndHours / 60); $seconds = $minusDaysAndHours - $minutes * 60; - - $milliSeconds = ($numberOfSeconds * 1000) % 1000; + $seconds = round($seconds, 2); if ($years > 0) { $return = sprintf(Piwik_Translate('General_YearsDays'), $years, $days); @@ -1446,9 +1445,7 @@ class Piwik $return = sprintf(Piwik_Translate('General_HoursMinutes'), $hours, $minutes); } elseif ($minutes > 0) { $return = sprintf(Piwik_Translate('General_MinutesSeconds'), $minutes, $seconds); - } elseif ($milliSeconds > 0 && $seconds < 1) { - $return = sprintf(Piwik_Translate('General_Milliseconds'), $milliSeconds); - } else { + } else { $return = sprintf(Piwik_Translate('General_Seconds'), $seconds); } if ($isHtml) { diff --git a/lang/en.php b/lang/en.php index 7366f4050a..4e086d28c2 100644 --- a/lang/en.php +++ b/lang/en.php @@ -191,7 +191,6 @@ $translations = array( 'General_HoursMinutes' => '%1$s hours %2$s min', 'General_MinutesSeconds' => '%1$s min %2$ss', 'General_Seconds' => '%ss', - 'General_Milliseconds' => '%sms', 'General_Save' => 'Save', 'General_Faq' => 'FAQ', 'General_ForExampleShort' => 'eg.', @@ -439,6 +438,7 @@ $translations = array( 'Actions_SiteSearchCategories2' => 'For example, Ecommerce websites typically have a "Category" selector so that visitors can restrict their searches to all products in a specific Category.', 'Actions_SiteSearchKeywordsNoResultDocumentation' => 'This report lists the Search Keywords that did not return any Search result: maybe the search engine algorithm can be improved, or maybe your visitors are looking for content that is not (yet) on your website?', 'Actions_SiteSearchFollowingPagesDoc' => 'When visitors search on your website, they are looking for a particular page, content, product, or service. This report lists the pages that were clicked the most after an internal search. In other words, the list of pages the most searched for by visitors already on your website.', + 'Actions_AvgGenerationTimeTooltip' => 'Average based on %s hit(s)', 'AnonymizeIP_PluginDescription' => 'Anonymize the last byte(s) of visitors IP addresses to comply with your local privacy laws/guidelines.', 'API_PluginDescription' => 'All the data in Piwik is available through simple APIs. This plugin is the web service entry point, that you can call to get your Web Analytics data in xml, json, php, csv, etc.', 'API_QuickDocumentationTitle' => 'API quick documentation', @@ -1940,6 +1940,7 @@ And thank you for using Piwik!', 'VisitsSummary_MaxNbActions' => '%s max actions in one visit', 'VisitsSummary_NbActionsPerVisit' => '%s actions (page views, downloads, outlinks and internal site searches) per visit', 'VisitsSummary_NbVisitsBounced' => '%s visits have bounced (left the website after one page)', + 'VisitsSummary_AverageGenerationTime' => '%s average generation time', 'VisitsSummary_GenerateTime' => '%s seconds to generate the page', 'VisitsSummary_GenerateQueries' => '%s queries executed', 'VisitsSummary_WidgetLastVisits' => 'Visits Over Time', diff --git a/misc/log-analytics/README.md b/misc/log-analytics/README.md index 13b8a0ea87..09dc2b623d 100644 --- a/misc/log-analytics/README.md +++ b/misc/log-analytics/README.md @@ -175,3 +175,13 @@ This log format can be specified for nginx access logs to capture multiple virtu * access_log /PATH/TO/access.log vhosts; When executing import_logs.py specify the "common_complete" format. + + +## Import Generation Time + +Apache can log the generation time in microseconds using %D in the LogFormat. +This metric can be imported using a custom log format in this script, which means that you have to specify a --log-format-regex parameter that contains the group generation_time_micro. + +Here's an example: +Apache LogFormat "%h %l %u %t \"%r\" %>s %b %D" +--log-format-regex="(?P\S+) \S+ \S+ \[(?P.*?) (?P.*?)\] \"\S+ (?P.*?) \S+\" (?P\S+) (?P\S+) (?P\S+)" \ No newline at end of file diff --git a/misc/log-analytics/import_logs.py b/misc/log-analytics/import_logs.py index 785c6c69dc..3be72a186c 100755 --- a/misc/log-analytics/import_logs.py +++ b/misc/log-analytics/import_logs.py @@ -1437,11 +1437,14 @@ class Parser(object): except (ValueError, IndexError): # Some lines or formats don't have a length (e.g. 304 redirects, IIS logs) hit.length = 0 - + try: - hit.generation_time_milli = int(match.group('generation_time_micro')) / 1000 + hit.generation_time_milli = int(match.group('generation_time_milli')) except IndexError: - hit.generation_time_milli = 0 + try: + hit.generation_time_milli = int(match.group('generation_time_micro')) / 1000 + except IndexError: + hit.generation_time_milli = 0 if config.options.log_hostname: hit.host = config.options.log_hostname diff --git a/plugins/Actions/API.php b/plugins/Actions/API.php index 030f954d93..ad9d15e73e 100644 --- a/plugins/Actions/API.php +++ b/plugins/Actions/API.php @@ -73,14 +73,15 @@ class Piwik_Actions_API $archive = Piwik_Archive::build($idSite, $period, $date, $segment); $metrics = array( - 'Actions_nb_pageviews' => 'nb_pageviews', - 'Actions_nb_uniq_pageviews' => 'nb_uniq_pageviews', - 'Actions_nb_downloads' => 'nb_downloads', - 'Actions_nb_uniq_downloads' => 'nb_uniq_downloads', - 'Actions_nb_outlinks' => 'nb_outlinks', - 'Actions_nb_uniq_outlinks' => 'nb_uniq_outlinks', - 'Actions_nb_searches' => 'nb_searches', - 'Actions_nb_keywords' => 'nb_keywords', + 'Actions_nb_pageviews' => 'nb_pageviews', + 'Actions_nb_uniq_pageviews' => 'nb_uniq_pageviews', + 'Actions_nb_downloads' => 'nb_downloads', + 'Actions_nb_uniq_downloads' => 'nb_uniq_downloads', + 'Actions_nb_outlinks' => 'nb_outlinks', + 'Actions_nb_uniq_outlinks' => 'nb_uniq_outlinks', + 'Actions_nb_searches' => 'nb_searches', + 'Actions_nb_keywords' => 'nb_keywords', + 'Actions_avg_time_generation' => 'avg_time_generation' ); // get requested columns @@ -95,16 +96,38 @@ class Piwik_Actions_API $columns[$i] = $fullColumn; $nameReplace[$fullColumn] = $column; } + + if (false !== ($avgGenerationTimeRequested = array_search('Actions_avg_time_generation', $columns))) { + unset($columns[$avgGenerationTimeRequested]); + $avgGenerationTimeRequested = true; + } } else { // get all columns + unset($metrics['Actions_avg_time_generation']); $columns = array_keys($metrics); $nameReplace = & $metrics; + $avgGenerationTimeRequested = true; } - + + if ($avgGenerationTimeRequested) { + $tempColumns[] = 'Actions_sum_time_generation'; + $tempColumns[] = 'Actions_nb_hits_with_time_generation'; + $nameReplace['Actions_sum_time_generation'] = 'sum_time_generation'; + $nameReplace['Actions_nb_hits_with_time_generation'] = 'nb_hits_with_time_generation'; + $columns = array_merge($columns, $tempColumns); + $columns = array_unique($columns); + } + $table = $archive->getDataTableFromNumeric($columns); // replace labels (remove Actions_) $table->filter('ReplaceColumnNames', array($nameReplace)); + + // compute avg generation time + if ($avgGenerationTimeRequested) { + $table->filter('ColumnCallbackAddColumnQuotient', array('avg_time_generation', 'sum_time_generation', 'nb_hits_with_time_generation', 3)); + $table->deleteColumns(array('sum_time_generation', 'nb_hits_with_time_generation')); + } return $table; } diff --git a/plugins/Actions/Actions.php b/plugins/Actions/Actions.php index f5bd2674ca..097d2e3dee 100644 --- a/plugins/Actions/Actions.php +++ b/plugins/Actions/Actions.php @@ -185,23 +185,25 @@ class Piwik_Actions extends Piwik_Plugin 'module' => 'Actions', 'action' => 'get', 'metrics' => array( - 'nb_pageviews' => Piwik_Translate('General_ColumnPageviews'), - 'nb_uniq_pageviews' => Piwik_Translate('General_ColumnUniquePageviews'), - 'nb_downloads' => Piwik_Translate('Actions_ColumnDownloads'), - 'nb_uniq_downloads' => Piwik_Translate('Actions_ColumnUniqueDownloads'), - 'nb_outlinks' => Piwik_Translate('Actions_ColumnOutlinks'), - 'nb_uniq_outlinks' => Piwik_Translate('Actions_ColumnUniqueOutlinks'), - 'nb_searches' => Piwik_Translate('Actions_ColumnSearches'), - 'nb_keywords' => Piwik_Translate('Actions_ColumnSiteSearchKeywords'), + 'nb_pageviews' => Piwik_Translate('General_ColumnPageviews'), + 'nb_uniq_pageviews' => Piwik_Translate('General_ColumnUniquePageviews'), + 'nb_downloads' => Piwik_Translate('Actions_ColumnDownloads'), + 'nb_uniq_downloads' => Piwik_Translate('Actions_ColumnUniqueDownloads'), + 'nb_outlinks' => Piwik_Translate('Actions_ColumnOutlinks'), + 'nb_uniq_outlinks' => Piwik_Translate('Actions_ColumnUniqueOutlinks'), + 'nb_searches' => Piwik_Translate('Actions_ColumnSearches'), + 'nb_keywords' => Piwik_Translate('Actions_ColumnSiteSearchKeywords'), + 'avg_time_generation' => Piwik_Translate('General_ColumnAverageGenerationTime'), ), 'metricsDocumentation' => array( - 'nb_pageviews' => Piwik_Translate('General_ColumnPageviewsDocumentation'), - 'nb_uniq_pageviews' => Piwik_Translate('General_ColumnUniquePageviewsDocumentation'), - 'nb_downloads' => Piwik_Translate('Actions_ColumnClicksDocumentation'), - 'nb_uniq_downloads' => Piwik_Translate('Actions_ColumnUniqueClicksDocumentation'), - 'nb_outlinks' => Piwik_Translate('Actions_ColumnClicksDocumentation'), - 'nb_uniq_outlinks' => Piwik_Translate('Actions_ColumnUniqueClicksDocumentation'), - 'nb_searches' => Piwik_Translate('Actions_ColumnSearchesDocumentation'), + 'nb_pageviews' => Piwik_Translate('General_ColumnPageviewsDocumentation'), + 'nb_uniq_pageviews' => Piwik_Translate('General_ColumnUniquePageviewsDocumentation'), + 'nb_downloads' => Piwik_Translate('Actions_ColumnClicksDocumentation'), + 'nb_uniq_downloads' => Piwik_Translate('Actions_ColumnUniqueClicksDocumentation'), + 'nb_outlinks' => Piwik_Translate('Actions_ColumnClicksDocumentation'), + 'nb_uniq_outlinks' => Piwik_Translate('Actions_ColumnUniqueClicksDocumentation'), + 'nb_searches' => Piwik_Translate('Actions_ColumnSearchesDocumentation'), + 'avg_time_generation' => Piwik_Translate('General_ColumnAverageGenerationTimeDocumentation'), // 'nb_keywords' => Piwik_Translate('Actions_ColumnSiteSearchKeywords'), ), 'processedMetrics' => false, diff --git a/plugins/Actions/Archiving.php b/plugins/Actions/Archiving.php index db71faf788..848b4cc562 100644 --- a/plugins/Actions/Archiving.php +++ b/plugins/Actions/Archiving.php @@ -74,6 +74,8 @@ class Piwik_Actions_Archiving 'Actions_nb_outlinks', 'Actions_nb_uniq_outlinks', 'Actions_nb_searches', + 'Actions_sum_time_generation', + 'Actions_nb_hits_with_time_generation', )); // Unique Keywords can't be summed, instead we take the RowsCount() of the keyword table @@ -359,6 +361,8 @@ class Piwik_Actions_Archiving $archiveProcessing->insertBlobRecord('Actions_actions_url', $s); $archiveProcessing->insertNumericRecord('Actions_nb_pageviews', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS))); $archiveProcessing->insertNumericRecord('Actions_nb_uniq_pageviews', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_NB_VISITS))); + $archiveProcessing->insertNumericRecord('Actions_sum_time_generation', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_SUM_TIME_GENERATION))); + $archiveProcessing->insertNumericRecord('Actions_nb_hits_with_time_generation', array_sum($dataTable->getColumn(Piwik_Archive::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION))); destroy($dataTable); $dataTable = $this->actionsTablesByType[Piwik_Tracker_Action::TYPE_DOWNLOAD]; diff --git a/plugins/Actions/Controller.php b/plugins/Actions/Controller.php index aed8efd683..1744a63155 100644 --- a/plugins/Actions/Controller.php +++ b/plugins/Actions/Controller.php @@ -385,9 +385,14 @@ class Piwik_Actions_Controller extends Piwik_Controller $view->setColumnTranslation('bounce_rate', Piwik_Translate('General_ColumnBounceRate')); $view->setColumnTranslation('exit_rate', Piwik_Translate('General_ColumnExitRate')); $view->setColumnTranslation('avg_time_generation', Piwik_Translate('General_ColumnAverageGenerationTime')); - $view->queueFilter('ColumnCallbackReplace', array('avg_time_on_page', array('Piwik', 'getPrettyTimeFromSeconds'))); - $view->queueFilter('ColumnCallbackReplace', array('avg_time_generation', - create_function('$averageTimeOnSite', 'return $averageTimeOnSite ? Piwik::getPrettyTimeFromSeconds($averageTimeOnSite, true, true, false) : "-";'))); + + $view->queueFilter('ColumnCallbackReplace', array('avg_time_on_page', array('Piwik', 'getPrettyTimeFromSeconds'))); + + $avgTimeCallback = create_function('$time', 'return $time ? Piwik::getPrettyTimeFromSeconds($time, true, true, false) : "-";'); + $view->queueFilter('ColumnCallbackReplace', array('avg_time_generation', $avgTimeCallback)); + + $tooltipCallback = create_function('$hits', 'return $hits ? Piwik_Translate("Actions_AvgGenerationTimeTooltip", $hits) : false;'); + $view->queueFilter('ColumnCallbackAddMetadata', array('nb_hits_with_time_generation', 'avg_time_generation_tooltip', $tooltipCallback)); } if (Piwik_Common::getRequestVar('enable_filter_excludelowpop', '0', 'string') != '0') { diff --git a/plugins/CoreHome/templates/datatable.css b/plugins/CoreHome/templates/datatable.css index dfaf958e01..daddbc86b0 100644 --- a/plugins/CoreHome/templates/datatable.css +++ b/plugins/CoreHome/templates/datatable.css @@ -803,3 +803,7 @@ a.tableConfigurationIcon.highlighted { .tableConfiguration div.configItem span.action { color: #255792; } + +table.dataTable span.cell-tooltip { + cursor: default; +} \ No newline at end of file diff --git a/plugins/CoreHome/templates/datatable.js b/plugins/CoreHome/templates/datatable.js index 2a8f437d65..c5553ca4f6 100644 --- a/plugins/CoreHome/templates/datatable.js +++ b/plugins/CoreHome/templates/datatable.js @@ -223,6 +223,7 @@ dataTable.prototype = self.handleColumnDocumentation(domElem); self.handleReportDocumentation(domElem); self.handleRowActions(domElem); + self.handleCellTooltips(domElem); self.handleRelatedReports(domElem); self.handleTriggeredEvents(domElem); }, @@ -1312,6 +1313,19 @@ dataTable.prototype = handleRowActions: function (domElem) { this.doHandleRowActions(domElem.find('table > tbody > tr')); }, + + handleCellTooltips: function(domElem) { + domElem.find('span.cell-tooltip').tooltip({ + track: true, + items: 'span', + content: function() { + return $(this).data('tooltip'); + }, + show: false, + hide: false, + tooltipClass: 'small' + }); + }, handleRelatedReports: function (domElem) { var self = this, @@ -1576,6 +1590,7 @@ actionDataTable.prototype = notifyWidgetParametersChange: dataTable.prototype.notifyWidgetParametersChange, handleRelatedReports: dataTable.prototype.handleRelatedReports, handleTriggeredEvents: dataTable.prototype.handleTriggeredEvents, + handleCellTooltips: dataTable.prototype.handleCellTooltips, _findReportHeader: dataTable.prototype._findReportHeader, //initialisation of the actionDataTable @@ -1627,6 +1642,7 @@ actionDataTable.prototype = self.handleReportDocumentation(domElem); self.handleRelatedReports(domElem); self.handleTriggeredEvents(domElem); + self.handleCellTooltips(domElem); }, //see dataTable::applyCosmetics diff --git a/plugins/CoreHome/templates/datatable_cell.tpl b/plugins/CoreHome/templates/datatable_cell.tpl index 3b1ec5cd98..0ecb4bd04c 100644 --- a/plugins/CoreHome/templates/datatable_cell.tpl +++ b/plugins/CoreHome/templates/datatable_cell.tpl @@ -1,3 +1,5 @@ +{assign var="tooltipIndex" value=$column|cat:"_tooltip"} +{if isset($row.metadata[$tooltipIndex])}{/if} {if !$row.idsubdatatable && $column=='label' && !empty($row.metadata.url)} {if empty($row.metadata.logo)} @@ -16,3 +18,4 @@ {if !$row.idsubdatatable && $column=='label' && !empty($row.metadata.url)} {/if} +{if isset($row.metadata[$tooltipIndex])}{/if} \ No newline at end of file diff --git a/plugins/VisitsSummary/Controller.php b/plugins/VisitsSummary/Controller.php index 86ebf7b5ac..5857a7a34d 100644 --- a/plugins/VisitsSummary/Controller.php +++ b/plugins/VisitsSummary/Controller.php @@ -116,6 +116,7 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller $view->urlSparklineMaxActions = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('max_actions'))); $view->urlSparklineActionsPerVisit = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_actions_per_visit'))); $view->urlSparklineBounceRate = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('bounce_rate'))); + $view->urlSparklineAvgGenerationTime = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('avg_time_generation'))); $idSite = Piwik_Common::getRequestVar('idSite'); $displaySiteSearch = Piwik_Site::isSiteSearchEnabledFor($idSite); @@ -145,6 +146,7 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller $view->bounceRate = Piwik::getPercentageSafe($nbBouncedVisits, $nbVisits); $view->maxActions = (int)$dataRow->getColumn('max_actions'); $view->nbActionsPerVisit = $dataRow->getColumn('nb_actions_per_visit'); + $view->averageGenerationTime = $dataActionsRow->getColumn('avg_time_generation'); if ($displaySiteSearch) { $view->nbSearches = (int)$dataActionsRow->getColumn('nb_searches'); diff --git a/plugins/VisitsSummary/templates/sparklines.tpl b/plugins/VisitsSummary/templates/sparklines.tpl index a0302f407a..f57aa9ee94 100644 --- a/plugins/VisitsSummary/templates/sparklines.tpl +++ b/plugins/VisitsSummary/templates/sparklines.tpl @@ -17,6 +17,11 @@ {sparkline src=$urlSparklineActionsPerVisit} {'VisitsSummary_NbActionsPerVisit'|translate:"$nbActionsPerVisit"} +
+ {sparkline src=$urlSparklineAvgGenerationTime} + {assign var=averageGenerationTime value=$averageGenerationTime|sumtime} + {'VisitsSummary_AverageGenerationTime'|translate:"$averageGenerationTime"} +
diff --git a/tests/PHPUnit/Core/PiwikTest.php b/tests/PHPUnit/Core/PiwikTest.php index 87889904dc..66e2514a7b 100644 --- a/tests/PHPUnit/Core/PiwikTest.php +++ b/tests/PHPUnit/Core/PiwikTest.php @@ -88,11 +88,13 @@ class PiwikTest extends DatabaseTestCase array(86400 + 3600 * 10, array('1 days 10 hours', '34:00:00')), array(86400 * 365, array('365 days 0 hours', '8760:00:00')), array((86400 * (365.25 + 10)), array('1 years 10 days', '9006:00:00')), - array(1.342, array('1.342s', '00:00:01.342')), - array(.342, array('342ms', '00:00:00.342')), - array(.02, array('20ms', '00:00:00.020')), - array(1.002, array('1.002s', '00:00:01.002')), - array(122.1, array('2 min 2.1s', '00:02:02.100')) + array(1.342, array('1.34s', '00:00:01.34')), + array(.342, array('0.34s', '00:00:00.34')), + array(.02, array('0.02s', '00:00:00.02')), + array(1.002, array('1s', '00:00:01')), + array(1.02, array('1.02s', '00:00:01.02')), + array(1.2, array('1.2s', '00:00:01.20')), + array(122.1, array('2 min 2.1s', '00:02:02.10')) ); } diff --git a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php index bba9bdcd54..fa4f246e94 100644 --- a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php +++ b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php @@ -76,12 +76,14 @@ class Test_Piwik_Fixture_OneVisitorTwoVisits extends Test_Piwik_BaseFixture // Record 1st page view $urlPage1 = 'http://example.org/index.htm?excluded_Parameter=SHOULD_NOT_DISPLAY¶meter=Should display'; $t->setUrl($urlPage1); + $t->setGenerationTime(234); self::checkResponse($t->doTrackPageView('incredible title!')); // testing that / and index.htm above record with different URLs // Recording the 2nd page after 3 minutes $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.05)->getDatetime()); $t->setUrl('http://example.org/'); + $t->setGenerationTime(224); self::checkResponse($t->doTrackPageView('Second page view - should be registered as URL /')); // Click on external link after 6 minutes (3rd action) @@ -116,16 +118,19 @@ class Test_Piwik_Fixture_OneVisitorTwoVisits extends Test_Piwik_BaseFixture // Site Search request $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.42)->getDatetime()); $t->setUrl('http://example.org/index.htm?q=Banks Own The World'); + $t->setGenerationTime(812); self::checkResponse($t->doTrackPageView('Site Search request')); // Final page view (after 27 min) $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.45)->getDatetime()); $t->setUrl('http://example.org/index.htm'); + $t->setGenerationTime(24); self::checkResponse($t->doTrackPageView('Looking at homepage after site search...')); } else { // Final page view (after 27 min) $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.45)->getDatetime()); $t->setUrl('http://example.org/index.htm#ignoredFragment#'); + $t->setGenerationTime(23); self::checkResponse($t->doTrackPageView('Looking at homepage (again)...')); } @@ -144,6 +149,7 @@ class Test_Piwik_Fixture_OneVisitorTwoVisits extends Test_Piwik_BaseFixture $t->DEBUG_APPEND_URL = '&_idvc=2'; // Goal Tracking URL matching, testing custom referer including keyword + $t->setGenerationTime(134); self::checkResponse($t->doTrackPageView('Checkout/Purchasing...')); // - // End of second visit diff --git a/tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php b/tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php index 5d07e49b24..f8d1468e39 100755 --- a/tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php +++ b/tests/PHPUnit/Integration/OneVisitorTwoVisitsTest.php @@ -106,7 +106,8 @@ class Test_Piwik_Integration_OneVisitorTwoVisits extends IntegrationTestCase 'apiAction' => 'getPageTitles', 'testSuffix' => '_hideColumns_', 'otherRequestParameters' => array( 'hideColumns' => 'nb_visits_converted,xyzaug,entry_nb_visits,' . - 'bounce_rate,nb_hits,nb_visits,avg_time_on_page,avg_time_generation' + 'bounce_rate,nb_hits,nb_visits,avg_time_on_page,' . + 'avg_time_generation,nb_hits_with_time_generation' ))), array('API.getProcessedReport', array('idSite' => $idSite, 'date' => $dateTime, @@ -132,7 +133,7 @@ class Test_Piwik_Integration_OneVisitorTwoVisits extends IntegrationTestCase 'bounce_rate,nb_hits,nb_visits,sum_time_spent,' . 'entry_sum_visit_length,entry_bounce_count,exit_nb_visits,' . 'entry_nb_uniq_visitors,exit_nb_uniq_visitors,entry_nb_actions,' . - 'avg_time_generation', + 'avg_time_generation,nb_hits_with_time_generation', 'expanded' => '1' ))), ); diff --git a/tests/PHPUnit/Integration/expected/test_ImportLogs__Actions.get_month.xml b/tests/PHPUnit/Integration/expected/test_ImportLogs__Actions.get_month.xml index 19323ec6b3..5c94d82678 100755 --- a/tests/PHPUnit/Integration/expected/test_ImportLogs__Actions.get_month.xml +++ b/tests/PHPUnit/Integration/expected/test_ImportLogs__Actions.get_month.xml @@ -8,4 +8,5 @@ 0 0 0 + 0 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getEntryPageTitles_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getEntryPageTitles_day.xml index 1179612cd4..5302932c1d 100755 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getEntryPageTitles_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getEntryPageTitles_day.xml @@ -5,6 +5,7 @@ 1 1 0 + 1 1 1 0 @@ -13,6 +14,7 @@ 0 100% 100% + 0.134 @@ -20,6 +22,7 @@ 1 1 0 + 1 1 1 1 @@ -30,6 +33,7 @@ 0 100% 100% + 0.134 @@ -39,6 +43,7 @@ 1 1 180 + 1 1 1 7 @@ -47,5 +52,6 @@ 180 0% 0% + 0.234 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getEntryPageUrls_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getEntryPageUrls_day.xml index 7fa327713e..b7e57ccfe1 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getEntryPageUrls_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getEntryPageUrls_day.xml @@ -6,6 +6,7 @@ 1 1 180 + 1 1 1 7 @@ -14,6 +15,7 @@ 180 0% 0% + 0.234 http://example.org/index.htm?parameter=Should display @@ -21,6 +23,7 @@ 1 1 0 + 1 1 1 0 @@ -29,6 +32,7 @@ 0 100% 100% + 0.134 @@ -36,6 +40,7 @@ 1 1 0 + 1 1 1 1 @@ -46,6 +51,7 @@ 0 100% 100% + 0.134 http://example.org/store/purchase.htm diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getExitPageTitles_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getExitPageTitles_day.xml index 2ee22ef5cf..326ba6eef5 100755 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getExitPageTitles_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getExitPageTitles_day.xml @@ -5,6 +5,7 @@ 1 1 0 + 1 1 1 0 @@ -13,6 +14,7 @@ 0 100% 100% + 0.134 @@ -20,6 +22,7 @@ 1 1 0 + 1 1 1 1 @@ -30,6 +33,7 @@ 0 100% 100% + 0.134 @@ -39,10 +43,12 @@ 1 1 0 + 1 1 1 0 0% 100% + 0.023 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getExitPageUrls_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getExitPageUrls_day.xml index 943302c205..17dda0f1d2 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getExitPageUrls_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getExitPageUrls_day.xml @@ -6,11 +6,13 @@ 1 1 0 + 1 1 1 0 0% 100% + 0.023 http://example.org/index.htm @@ -18,6 +20,7 @@ 1 1 0 + 1 1 1 0 @@ -26,6 +29,7 @@ 0 100% 100% + 0.134 @@ -33,6 +37,7 @@ 1 1 0 + 1 1 1 1 @@ -43,6 +48,7 @@ 0 100% 100% + 0.134 http://example.org/store/purchase.htm diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageTitle_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageTitle_day.xml index 07ef5d536a..67384a3686 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageTitle_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageTitle_day.xml @@ -6,6 +6,7 @@ 1 1 0 + 1 1 1 1 @@ -16,5 +17,6 @@ 0 100% 100% + 0.134 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageTitles_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageTitles_day.xml index e3df8a41dd..6453866564 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageTitles_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageTitles_day.xml @@ -5,6 +5,7 @@ 1 1 0 + 1 1 1 0 @@ -13,6 +14,7 @@ 0 100% 100% + 0.134 @@ -20,6 +22,7 @@ 1 1 0 + 1 1 1 1 @@ -30,6 +33,7 @@ 0 100% 100% + 0.134 @@ -39,6 +43,7 @@ 1 1 180 + 1 1 1 7 @@ -47,6 +52,7 @@ 180 0% 0% + 0.234 @@ -54,11 +60,13 @@ 1 1 0 + 1 1 1 0 0% 100% + 0.023 @@ -66,8 +74,10 @@ 1 1 900 + 1 900 0% 0% + 0.224 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrl_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrl_day.xml index cee7b54dd8..ac40ada8ab 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrl_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrl_day.xml @@ -6,11 +6,13 @@ 1 1 0 + 1 1 1 0 0% 100% + 0.023 http://example.org/index.htm \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrls_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrls_day.xml index 838606a12e..a6f79cf627 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrls_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrls_day.xml @@ -6,9 +6,11 @@ 1 1 180 + 1 180 0% 0% + 0.224 http://example.org/ @@ -17,11 +19,13 @@ 1 1 0 + 1 1 1 0 0% 100% + 0.023 http://example.org/index.htm @@ -30,6 +34,7 @@ 1 1 180 + 1 1 1 7 @@ -38,6 +43,7 @@ 180 0% 0% + 0.234 http://example.org/index.htm?parameter=Should display @@ -45,6 +51,7 @@ 1 1 0 + 1 1 1 0 @@ -53,6 +60,7 @@ 0 100% 100% + 0.134 @@ -60,6 +68,7 @@ 1 1 0 + 1 1 1 1 @@ -70,6 +79,7 @@ 0 100% 100% + 0.134 http://example.org/store/purchase.htm diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.get_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.get_day.xml index a3d15825bc..e04ea4296d 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.get_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__Actions.get_day.xml @@ -8,4 +8,5 @@ 2 0 0 + 0.155 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml index e1486cad9f..18705c4fe7 100755 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml @@ -14,6 +14,7 @@ Bounce Rate Avg. time on page Exit rate + Avg. generation time The number of times this page was visited. @@ -21,6 +22,7 @@ The percentage of visits that started on this page and left the website straight away. The average amount of time visitors spent on this page (only the page, not the entire website). The percentage of visits that left the website after viewing this page. + The average time it took to generate the page. This metric includes the time it took the server to generate the web page, plus the time it took for the visitor to download the response from the server. A lower 'Avg. generation time' means a faster website for your visitors! This report contains information about the page URLs that have been visited. <br /> The table is organized hierarchically, the URLs are displayed as a folder structure.<br />Use the plus and minus icons on the left to navigate. getPageUrls @@ -35,6 +37,7 @@ Bounce Rate Avg. time on page Exit rate + Avg. generation time @@ -44,6 +47,7 @@ 00:00:00 100% 100% + 00:00:00.13 diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv index 8658ec505f..aff956dc4c 100755 Binary files a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv and b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv differ diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getEntryPageTitles_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getEntryPageTitles_day.xml index 8d363360e0..cef5f1db67 100755 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getEntryPageTitles_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getEntryPageTitles_day.xml @@ -5,6 +5,7 @@ 1 1 0 + 1 1 1 0 @@ -13,6 +14,7 @@ 0 100% 100% + 0.134 @@ -20,6 +22,7 @@ 1 1 0 + 1 1 1 1 @@ -30,6 +33,7 @@ 0 100% 100% + 0.134 @@ -39,6 +43,7 @@ 1 1 180 + 1 1 1 8 @@ -47,5 +52,6 @@ 180 0% 0% + 0.234 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getEntryPageUrls_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getEntryPageUrls_day.xml index 170597cbf2..fcc2cd595b 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getEntryPageUrls_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getEntryPageUrls_day.xml @@ -6,6 +6,7 @@ 1 1 180 + 1 1 1 8 @@ -14,6 +15,7 @@ 180 0% 0% + 0.234 http://example.org/index.htm?parameter=Should display @@ -21,6 +23,7 @@ 1 1 0 + 1 1 1 0 @@ -29,6 +32,7 @@ 0 100% 100% + 0.134 @@ -36,6 +40,7 @@ 1 1 0 + 1 1 1 1 @@ -46,6 +51,7 @@ 0 100% 100% + 0.134 http://example.org/store/purchase.htm diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getExitPageTitles_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getExitPageTitles_day.xml index 6ae7565bce..faa38edcf3 100755 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getExitPageTitles_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getExitPageTitles_day.xml @@ -5,6 +5,7 @@ 1 1 0 + 1 1 1 0 @@ -13,6 +14,7 @@ 0 100% 100% + 0.134 @@ -20,6 +22,7 @@ 1 1 0 + 1 1 1 1 @@ -30,6 +33,7 @@ 0 100% 100% + 0.134 @@ -40,10 +44,12 @@ 1 0 1 + 1 1 1 0 0% 100% + 0.024 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getExitPageUrls_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getExitPageUrls_day.xml index 4ebb7702a1..82d409ed09 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getExitPageUrls_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getExitPageUrls_day.xml @@ -7,11 +7,13 @@ 1 0 1 + 1 1 1 0 0% 100% + 0.024 http://example.org/index.htm @@ -19,6 +21,7 @@ 1 1 0 + 1 1 1 0 @@ -27,6 +30,7 @@ 0 100% 100% + 0.134 @@ -34,6 +38,7 @@ 1 1 0 + 1 1 1 1 @@ -44,6 +49,7 @@ 0 100% 100% + 0.134 http://example.org/store/purchase.htm diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitle_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitle_day.xml index 07ef5d536a..67384a3686 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitle_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitle_day.xml @@ -6,6 +6,7 @@ 1 1 0 + 1 1 1 1 @@ -16,5 +17,6 @@ 0 100% 100% + 0.134 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitlesFollowingSiteSearch_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitlesFollowingSiteSearch_day.xml index 5e682370b7..b7dd928690 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitlesFollowingSiteSearch_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitlesFollowingSiteSearch_day.xml @@ -7,10 +7,12 @@ 1 0 1 + 1 1 1 0 0% 100% + 0.024 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitles_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitles_day.xml index f13f6b18c5..6615b7d1a3 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitles_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageTitles_day.xml @@ -5,6 +5,7 @@ 1 1 0 + 1 1 1 0 @@ -13,6 +14,7 @@ 0 100% 100% + 0.134 @@ -20,6 +22,7 @@ 1 1 0 + 1 1 1 1 @@ -30,6 +33,7 @@ 0 100% 100% + 0.134 @@ -39,6 +43,7 @@ 1 1 180 + 1 1 1 8 @@ -47,6 +52,7 @@ 180 0% 0% + 0.234 @@ -55,11 +61,13 @@ 1 0 1 + 1 1 1 0 0% 100% + 0.024 @@ -67,8 +75,10 @@ 1 1 792 + 1 792 0% 0% + 0.224 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrl_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrl_day.xml index 231c9e36f9..e93472d54c 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrl_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrl_day.xml @@ -7,11 +7,13 @@ 1 0 1 + 1 1 1 0 0% 100% + 0.024 http://example.org/index.htm \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrlsFollowingSiteSearch_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrlsFollowingSiteSearch_day.xml index 231c9e36f9..e93472d54c 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrlsFollowingSiteSearch_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrlsFollowingSiteSearch_day.xml @@ -7,11 +7,13 @@ 1 0 1 + 1 1 1 0 0% 100% + 0.024 http://example.org/index.htm \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrls_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrls_day.xml index 53334ac973..ab5b0e8d3a 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrls_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.getPageUrls_day.xml @@ -6,9 +6,11 @@ 1 1 180 + 1 180 0% 0% + 0.224 http://example.org/ @@ -18,11 +20,13 @@ 1 0 1 + 1 1 1 0 0% 100% + 0.024 http://example.org/index.htm @@ -31,6 +35,7 @@ 1 1 180 + 1 1 1 8 @@ -39,6 +44,7 @@ 180 0% 0% + 0.234 http://example.org/index.htm?parameter=Should display @@ -46,6 +52,7 @@ 1 1 0 + 1 1 1 0 @@ -54,6 +61,7 @@ 0 100% 100% + 0.134 @@ -61,6 +69,7 @@ 1 1 0 + 1 1 1 1 @@ -71,6 +80,7 @@ 0 100% 100% + 0.134 http://example.org/store/purchase.htm diff --git a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.get_day.xml b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.get_day.xml index 51d95b38b3..0eea12ac0b 100644 --- a/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.get_day.xml +++ b/tests/PHPUnit/Integration/expected/test_OneVisitorTwoVisits_withCookieSupport__Actions.get_day.xml @@ -8,4 +8,5 @@ 2 1 1 + 0.155 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_Actions.get_firstSite_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_Actions.get_firstSite_lastN__API.getProcessedReport_day.xml index c47c5efa5e..dd08895057 100644 --- a/tests/PHPUnit/Integration/expected/test_SiteSearch_Actions.get_firstSite_lastN__API.getProcessedReport_day.xml +++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_Actions.get_firstSite_lastN__API.getProcessedReport_day.xml @@ -16,6 +16,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time The number of times this page was visited. @@ -25,6 +26,7 @@ The number of times this link was clicked. The number of visits that involved a click on this link. If a link was clicked multiple times during one visit, it is only counted once. The number of visits that searched for this keyword on your website's search engine. + The average time it took to generate the page. This metric includes the time it took the server to generate the web page, plus the time it took for the visitor to download the response from the server. A lower 'Avg. generation time' means a faster website for your visitors! index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=day&date=2010-01-03,2010-01-09 index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=day&date=2010-01-03,2010-01-09 @@ -39,6 +41,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time @@ -46,6 +49,7 @@ 4 5 3 + 00:00:00 0 0 0 @@ -54,6 +58,7 @@ 3 3 + 00:00:00 0 0 0 diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_Actions.get_firstSite_lastN__API.getProcessedReport_month.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_Actions.get_firstSite_lastN__API.getProcessedReport_month.xml index 637679119d..19a2a7a2f1 100644 --- a/tests/PHPUnit/Integration/expected/test_SiteSearch_Actions.get_firstSite_lastN__API.getProcessedReport_month.xml +++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_Actions.get_firstSite_lastN__API.getProcessedReport_month.xml @@ -16,6 +16,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time The number of times this page was visited. @@ -25,6 +26,7 @@ The number of times this link was clicked. The number of visits that involved a click on this link. If a link was clicked multiple times during one visit, it is only counted once. The number of visits that searched for this keyword on your website's search engine. + The average time it took to generate the page. This metric includes the time it took the server to generate the web page, plus the time it took for the visitor to download the response from the server. A lower 'Avg. generation time' means a faster website for your visitors! index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=month&date=2010-01-03,2010-07-03 index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=month&date=2010-01-03,2010-07-03 @@ -39,6 +41,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time @@ -46,6 +49,7 @@ 4 8 3 + 00:00:00 0 0 0 diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_day.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_day.xml index f82b97b135..dfa32df469 100644 --- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_day.xml +++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_day.xml @@ -6,10 +6,12 @@ 4 5 3 + 0 3 3 + 0 @@ -23,6 +25,7 @@ 2 3 2 + 0 @@ -35,6 +38,7 @@ 3 3 + 0 diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_month.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_month.xml index bd1427d676..56b93eb257 100644 --- a/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_month.xml +++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_AllSites__Actions.get_month.xml @@ -6,6 +6,7 @@ 4 8 3 + 0 @@ -20,6 +21,7 @@ 2 3 2 + 0 @@ -32,6 +34,7 @@ 3 3 + 0 diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_NotLastNPeriods__Actions.get_day.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_NotLastNPeriods__Actions.get_day.xml index a5e5d16d73..f125336842 100644 --- a/tests/PHPUnit/Integration/expected/test_SiteSearch_NotLastNPeriods__Actions.get_day.xml +++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_NotLastNPeriods__Actions.get_day.xml @@ -8,4 +8,5 @@ 0 5 3 + 0 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_SiteSearch_NotLastNPeriods__Actions.get_month.xml b/tests/PHPUnit/Integration/expected/test_SiteSearch_NotLastNPeriods__Actions.get_month.xml index f1ac621851..9d598b649a 100644 --- a/tests/PHPUnit/Integration/expected/test_SiteSearch_NotLastNPeriods__Actions.get_month.xml +++ b/tests/PHPUnit/Integration/expected/test_SiteSearch_NotLastNPeriods__Actions.get_month.xml @@ -8,4 +8,5 @@ 0 8 5 + 0 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml index ac7ae818e8..78fcaa8aab 100644 --- a/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml +++ b/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml @@ -48,7 +48,7 @@ 00:00:00 100% 50% - 00:00:00.138 + 00:00:00.13 @@ -59,7 +59,7 @@ 00:00:00 0% 0% - 00:00:00.223 + 00:00:00.22 @@ -70,7 +70,7 @@ 00:07:30 0% 0% - 00:00:00.248 + 00:00:00.24 @@ -79,7 +79,7 @@ 00:00:00 0% 100% - 00:00:00.452 + 00:00:00.45 diff --git a/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageUrls_firstSite_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageUrls_firstSite_lastN__API.getProcessedReport_day.xml index cc395e7b7d..f8dd51fa8d 100644 --- a/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageUrls_firstSite_lastN__API.getProcessedReport_day.xml +++ b/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageUrls_firstSite_lastN__API.getProcessedReport_day.xml @@ -48,7 +48,7 @@ 00:00:00 0% 0% - 00:00:00.123 + 00:00:00.12 @@ -57,7 +57,7 @@ 00:00:00 100% 100% - 00:00:00.153 + 00:00:00.15 @@ -68,7 +68,7 @@ 00:00:00 0% 0% - 00:00:00.223 + 00:00:00.22 @@ -79,7 +79,7 @@ 00:06:00 0% 0% - 00:00:00.323 + 00:00:00.32 @@ -88,7 +88,7 @@ 00:06:00 0% 100% - 00:00:00.313 + 00:00:00.31 diff --git a/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__PDFReports.generateReport_month.original.html b/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__PDFReports.generateReport_month.original.html index 7ca0bbd340..5399b67175 100644 --- a/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__PDFReports.generateReport_month.original.html +++ b/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__PDFReports.generateReport_month.original.html @@ -1854,6 +1854,14 @@ Unique Keywords 0 + + +Avg. generation time + + +00:00:00.24 + +
@@ -1910,7 +1918,7 @@ Page URLs 0% -00:00:00.223 +00:00:00.22 @@ -1935,7 +1943,7 @@ Page URL not defined 0% -00:00:00.223 +00:00:00.22 @@ -1960,7 +1968,7 @@ Page URL not defined 100% -00:00:00.153 +00:00:00.15 @@ -1985,7 +1993,7 @@ Page URL not defined 100% -00:00:00.313 +00:00:00.31 @@ -2156,7 +2164,7 @@ first page view 50% -00:00:00.138 +00:00:00.13 @@ -2179,7 +2187,7 @@ second visitor 0% -00:00:00.248 +00:00:00.24 @@ -2202,7 +2210,7 @@ Checkout 100% -00:00:00.452 +00:00:00.45 @@ -2225,7 +2233,7 @@ Page Name not defined 0% -00:00:00.223 +00:00:00.22 diff --git a/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__PDFReports.generateReport_month.original.pdf b/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__PDFReports.generateReport_month.original.pdf index ab5c573a1a..b4254232b8 100644 Binary files a/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__PDFReports.generateReport_month.original.pdf and b/tests/PHPUnit/Integration/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__PDFReports.generateReport_month.original.pdf differ diff --git a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml index 6dbe54bde7..f4f69aa3a9 100644 --- a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml +++ b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml @@ -391,6 +391,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time The number of times this page was visited. @@ -400,6 +401,7 @@ The number of times this link was clicked. The number of visits that involved a click on this link. If a link was clicked multiple times during one visit, it is only counted once. The number of visits that searched for this keyword on your website's search engine. + The average time it took to generate the page. This metric includes the time it took the server to generate the web page, plus the time it took for the visitor to download the response from the server. A lower 'Avg. generation time' means a faster website for your visitors! index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=day&date=2008-12-06,2009-01-04 index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=day&date=2008-12-06,2009-01-04 @@ -1824,6 +1826,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time Returning Visits Actions by Returning Visits Avg. Duration of a Returning Visit (in sec) @@ -1849,6 +1852,7 @@ The number of times this link was clicked. The number of visits that involved a click on this link. If a link was clicked multiple times during one visit, it is only counted once. The number of visits that searched for this keyword on your website's search engine. + The average time it took to generate the page. This metric includes the time it took the server to generate the web page, plus the time it took for the visitor to download the response from the server. A lower 'Avg. generation time' means a faster website for your visitors! API_get
diff --git a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.get_day.xml b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.get_day.xml index 33cec8dbe3..71adf62247 100644 --- a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.get_day.xml +++ b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata__API.get_day.xml @@ -25,4 +25,5 @@ 0 0 0 + 0
\ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata_hideMetricsDoc__API.getMetadata_day.xml b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata_hideMetricsDoc__API.getMetadata_day.xml index 8e3b587e50..590b2acbe5 100755 --- a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata_hideMetricsDoc__API.getMetadata_day.xml +++ b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata_hideMetricsDoc__API.getMetadata_day.xml @@ -14,6 +14,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=day&date=2008-12-06,2009-01-04 index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=day&date=2008-12-06,2009-01-04 diff --git a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata_hideMetricsDoc__API.getProcessedReport_day.xml b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata_hideMetricsDoc__API.getProcessedReport_day.xml index 978bb0f464..52ded0385c 100755 --- a/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata_hideMetricsDoc__API.getProcessedReport_day.xml +++ b/tests/PHPUnit/Integration/expected/test_apiGetReportMetadata_hideMetricsDoc__API.getProcessedReport_day.xml @@ -16,6 +16,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=day&date=2008-12-06,2009-01-04 index.php?module=API&method=ImageGraph.get&idSite=1&apiModule=Actions&apiAction=get&period=day&date=2008-12-06,2009-01-04 @@ -30,6 +31,7 @@ Unique Outlinks Searches Unique Keywords + Avg. generation time 1 @@ -40,6 +42,7 @@ 0 0 0 + 00:00:00 \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__PDFReports.generateReport_week.original.html b/tests/PHPUnit/Integration/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__PDFReports.generateReport_week.original.html index aaa75b3f2a..c21f52d868 100644 --- a/tests/PHPUnit/Integration/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__PDFReports.generateReport_week.original.html +++ b/tests/PHPUnit/Integration/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__PDFReports.generateReport_week.original.html @@ -3177,6 +3177,14 @@ Unique Keywords 0 + + +Avg. generation time + + +00:00:00 + +
diff --git a/tests/PHPUnit/Integration/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__PDFReports.generateReport_week.original.pdf b/tests/PHPUnit/Integration/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__PDFReports.generateReport_week.original.pdf index f1d5eeeeb7..481bdf6290 100644 Binary files a/tests/PHPUnit/Integration/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__PDFReports.generateReport_week.original.pdf and b/tests/PHPUnit/Integration/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__PDFReports.generateReport_week.original.pdf differ diff --git a/tests/PHPUnit/Integration/expected/test_noVisit__Actions.get_day.xml b/tests/PHPUnit/Integration/expected/test_noVisit__Actions.get_day.xml index 6006b449a7..6eb4818cba 100644 --- a/tests/PHPUnit/Integration/expected/test_noVisit__Actions.get_day.xml +++ b/tests/PHPUnit/Integration/expected/test_noVisit__Actions.get_day.xml @@ -8,4 +8,5 @@ 0 0 0 + 0 \ No newline at end of file diff --git a/themes/default/common.css b/themes/default/common.css index 6386208163..8dd56cb622 100644 --- a/themes/default/common.css +++ b/themes/default/common.css @@ -762,6 +762,12 @@ table.entityTable tr td a { margin: 0 0 2px 0; } +body .ui-tooltip.small { + font-size: 11px; + padding: 3px 5px 3px 6px; +} + + /* Popover */ -- cgit v1.2.3