matomo / plugins /BotTracking /Columns /Metrics /DiscrepancyScore.php
Leon4gr45's picture
Upload source files chunk 18
78185c4 verified
Raw
History Blame Contribute Delete
2.34 kB
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
declare(strict_types=1);
namespace Piwik\Plugins\BotTracking\Columns\Metrics;
use InvalidArgumentException;
use Piwik\Columns\Dimension;
use Piwik\Metrics\Formatter;
use Piwik\Piwik;
use Piwik\Plugin\AggregatedMetric;
use Piwik\Plugins\BotTracking\Metrics;
/**
* Column metadata (name / translation / per-variant documentation / formatting) for the bounded
* 0–100 Discrepancy Score on the Human/AI-Favoured Pages reports. The value is materialised during
* archiving by {@see \Piwik\Plugins\BotTracking\RecordBuilders\AIChatbotFavouredPages} (via
* {@see \Piwik\Plugins\BotTracking\DataTable\FavouredPagesScorer}). AggregatedMetric is the closest
* base for "a plain column that isn't a processed metric" (as for the two source-metric columns).
*/
class DiscrepancyScore extends AggregatedMetric
{
public const VARIANT_HUMAN_FAVOURED = 'human_favoured';
public const VARIANT_AI_FAVOURED = 'ai_favoured';
/** @var self::VARIANT_HUMAN_FAVOURED|self::VARIANT_AI_FAVOURED */
private $variant;
public function __construct(string $variant)
{
if ($variant !== self::VARIANT_HUMAN_FAVOURED && $variant !== self::VARIANT_AI_FAVOURED) {
throw new InvalidArgumentException(
'Unknown DiscrepancyScore variant: ' . $variant
);
}
$this->variant = $variant;
}
public function getName()
{
return Metrics::COLUMN_DISCREPANCY_SCORE;
}
public function getTranslatedName()
{
return Piwik::translate('BotTracking_ColumnDiscrepancyScore');
}
public function getDocumentation()
{
$key = $this->variant === self::VARIANT_HUMAN_FAVOURED
? 'BotTracking_ColumnDiscrepancyScoreHumanFavouredDocumentation'
: 'BotTracking_ColumnDiscrepancyScoreAIFavouredDocumentation';
return Piwik::translate($key);
}
/**
* @param float|int $value
* @return string
*/
public function format($value, Formatter $formatter)
{
return $formatter->getPrettyNumber((float) $value, 1);
}
public function getSemanticType(): ?string
{
return Dimension::TYPE_NUMBER;
}
}