Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Besenreuther <timo.besenreuther@gmail.com>2013-04-02 16:40:45 +0400
committerTimo Besenreuther <timo.besenreuther@gmail.com>2013-04-02 16:40:45 +0400
commitfb5f11a5ca82b15eb419803e6e00ce6dfba515d0 (patch)
tree48841d8b676426bc81729c1caa3304098a2dc91c /plugins
parenta05bd7ba73dbf53fbb2fb06dd3a927ae5ec167bc (diff)
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
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Actions/API.php41
-rw-r--r--plugins/Actions/Actions.php32
-rw-r--r--plugins/Actions/Archiving.php4
-rw-r--r--plugins/Actions/Controller.php11
-rw-r--r--plugins/CoreHome/templates/datatable.css4
-rw-r--r--plugins/CoreHome/templates/datatable.js16
-rw-r--r--plugins/CoreHome/templates/datatable_cell.tpl3
-rw-r--r--plugins/VisitsSummary/Controller.php2
-rw-r--r--plugins/VisitsSummary/templates/sparklines.tpl5
9 files changed, 91 insertions, 27 deletions
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])}<span class="cell-tooltip" data-tooltip="{$row.metadata[$tooltipIndex]|escape:'html'}">{/if}
{if !$row.idsubdatatable && $column=='label' && !empty($row.metadata.url)}
<a target="_blank" href='{if !in_array(substr($row.metadata.url,0,4), array('http','ftp:'))}http://{/if}{$row.metadata.url|escape:'html'}'>
{if empty($row.metadata.logo)}
@@ -16,3 +18,4 @@
{if !$row.idsubdatatable && $column=='label' && !empty($row.metadata.url)}
</a>
{/if}
+{if isset($row.metadata[$tooltipIndex])}</span>{/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:"<strong>$nbActionsPerVisit</strong>"}
</div>
+ <div class="sparkline">
+ {sparkline src=$urlSparklineAvgGenerationTime}
+ {assign var=averageGenerationTime value=$averageGenerationTime|sumtime}
+ {'VisitsSummary_AverageGenerationTime'|translate:"<strong>$averageGenerationTime</strong>"}
+ </div>
</div>
<div id='rightcolumn'>