Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 33
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
Histogram
0.00% covered (danger)
0.00%
0 / 33
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 1
2
 observe
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2declare( strict_types = 1 );
3
4namespace Wikimedia\Parsoid\Utils;
5
6use InvalidArgumentException;
7use Wikimedia\Parsoid\Config\SiteConfig;
8
9/**
10 * Histogram class is a helper class that creates appropriate histogram buckets
11 * for various metrics collected by Parsoid.
12 *
13 * New histogram metrics can be configured in the constructor.
14 */
15class Histogram {
16    /** @var array */
17    private array $parseSizeMetricsMeanSkip;
18
19    private SiteConfig $siteConfig;
20
21    public function __construct( SiteConfig $siteConfig ) {
22        $this->siteConfig = $siteConfig;
23        $this->parseSizeMetricsMeanSkip = [
24            'wt2html_size_input_bytes' => [
25                "mean" => 5000,
26                "skip" => 4
27            ],
28            'wt2html_size_output_bytes' => [
29                "mean" => 50000,
30                "skip" => 4
31            ],
32            'wt2html_msPerKB' => [
33                "mean" => 7.4,
34                "skip" => 4
35            ],
36            'html2wt_size_input_bytes' => [
37                "mean" => 17000,
38                "skip" => 4
39            ],
40            'html2wt_size_output_bytes' => [
41                "mean" => 3500,
42                "skip" => 4
43            ],
44            'html2wt_msPerKB' => [
45                "mean" => 0.8,
46                "skip" => 4
47            ]
48        ];
49    }
50
51    public function observe( string $name, float $value, array $labels = [] ): void {
52        if ( !array_key_exists( $name, $this->parseSizeMetricsMeanSkip ) ) {
53            throw new InvalidArgumentException( 'Unsupported metric: ' . $name );
54        }
55        $mean = $this->parseSizeMetricsMeanSkip[$name]["mean"];
56        $skip = $this->parseSizeMetricsMeanSkip[$name]["skip"];
57        $buckets = $this->siteConfig->getHistogramBuckets( $mean, $skip );
58        $this->siteConfig->observeHistogram( $name, $value, $buckets, $labels );
59    }
60}