forked from rebillar/site-accueil-insa
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			No EOL
		
	
	
		
			3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			No EOL
		
	
	
		
			3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Matomo - free/libre analytics platform
 | |
|  *
 | |
|  * @link https://matomo.org
 | |
|  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 | |
|  */
 | |
| namespace Piwik\Plugins\PagePerformance\Columns\Metrics;
 | |
| 
 | |
| use Piwik\DataTable;
 | |
| use Piwik\DataTable\Row;
 | |
| use Piwik\Metrics\Formatter;
 | |
| use Piwik\Piwik;
 | |
| use Piwik\Plugin\ProcessedMetric;
 | |
| 
 | |
| /**
 | |
|  * The average amount for a certain performance metric. Calculated as
 | |
|  *
 | |
|  *     sum_time / nb_hits_with_time
 | |
|  *
 | |
|  * The above metrics are calculated during archiving. This metric is calculated before
 | |
|  * serving a report.
 | |
|  */
 | |
| abstract class AveragePerformanceMetric extends ProcessedMetric
 | |
| {
 | |
|     const ID = '';
 | |
| 
 | |
|     public function getName()
 | |
|     {
 | |
|         return 'avg_' . static::ID;
 | |
|     }
 | |
| 
 | |
|     public function getDependentMetrics()
 | |
|     {
 | |
|         return array('sum_' . static::ID, 'nb_hits_with_' . static::ID);
 | |
|     }
 | |
| 
 | |
|     public function getTemporaryMetrics()
 | |
|     {
 | |
|         return array('sum_' . static::ID);
 | |
|     }
 | |
| 
 | |
|     public function compute(Row $row)
 | |
|     {
 | |
|         $sumGenerationTime = $this->getMetric($row, 'sum_' . static::ID);
 | |
|         $hitsWithTimeGeneration = $this->getMetric($row, 'nb_hits_with_' . static::ID);
 | |
| 
 | |
|         return Piwik::getQuotientSafe($sumGenerationTime, $hitsWithTimeGeneration, $precision = 3);
 | |
|     }
 | |
| 
 | |
|     public function format($value, Formatter $formatter)
 | |
|     {
 | |
|         if ($formatter instanceof Formatter\Html
 | |
|             && !$value
 | |
|         ) {
 | |
|             return '-';
 | |
|         } else {
 | |
|             return $formatter->getPrettyTimeFromSeconds($value, $displayAsSentence = true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function beforeCompute($report, DataTable $table)
 | |
|     {
 | |
|         $hasTimeGeneration = array_sum($this->getMetricValues($table, 'sum_' . static::ID)) > 0;
 | |
| 
 | |
|         if (!$hasTimeGeneration
 | |
|             && $table->getRowsCount() != 0
 | |
|             && !$this->hasAverageMetric($table)
 | |
|         ) {
 | |
|             // No generation time: remove it from the API output and add it to empty_columns metadata, so that
 | |
|             // the columns can also be removed from the view
 | |
|             $table->filter('ColumnDelete', array(array(
 | |
|                 'sum_' . static::ID,
 | |
|                 'nb_hits_with_' . static::ID,
 | |
|                 'min_' . static::ID,
 | |
|                 'max_' . static::ID
 | |
|             )));
 | |
| 
 | |
|             if ($table instanceof DataTable) {
 | |
|                 $emptyColumns = $table->getMetadata(DataTable::EMPTY_COLUMNS_METADATA_NAME);
 | |
|                 if (!is_array($emptyColumns)) {
 | |
|                     $emptyColumns = array();
 | |
|                 }
 | |
|                 $emptyColumns[] = 'sum_' . static::ID;
 | |
|                 $emptyColumns[] = 'nb_hits_with_' . static::ID;
 | |
|                 $emptyColumns[] = 'min_' . static::ID;
 | |
|                 $emptyColumns[] = 'max_' . static::ID;
 | |
|                 $table->setMetadata(DataTable::EMPTY_COLUMNS_METADATA_NAME, $emptyColumns);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $hasTimeGeneration;
 | |
|     }
 | |
| 
 | |
|     private function hasAverageMetric(DataTable $table)
 | |
|     {
 | |
|         return $table->getFirstRow()->getColumn($this->getName()) !== false;
 | |
|     }
 | |
| } |