summaryrefslogtreecommitdiff
path: root/vendor/open-telemetry/sdk/Trace/SamplerFactory.php
blob: f99674d79ec5795e35bd17a0f682819f83fa6cfa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php

declare(strict_types=1);

namespace OpenTelemetry\SDK\Trace;

use InvalidArgumentException;
use OpenTelemetry\SDK\Common\Configuration\Configuration;
use OpenTelemetry\SDK\Common\Configuration\KnownValues as Values;
use OpenTelemetry\SDK\Common\Configuration\Variables as Env;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOffSampler;
use OpenTelemetry\SDK\Trace\Sampler\AlwaysOnSampler;
use OpenTelemetry\SDK\Trace\Sampler\ParentBased;
use OpenTelemetry\SDK\Trace\Sampler\TraceIdRatioBasedSampler;

class SamplerFactory
{
    private const TRACEIDRATIO_PREFIX = 'traceidratio';

    public function create(): SamplerInterface
    {
        $name = Configuration::getString(Env::OTEL_TRACES_SAMPLER);

        if (strpos($name, self::TRACEIDRATIO_PREFIX) !== false) {
            $arg = Configuration::getRatio(Env::OTEL_TRACES_SAMPLER_ARG);

            switch ($name) {
                case Values::VALUE_TRACE_ID_RATIO:
                    return new TraceIdRatioBasedSampler($arg);
                case Values::VALUE_PARENT_BASED_TRACE_ID_RATIO:
                    return new ParentBased(new TraceIdRatioBasedSampler($arg));
            }
        }

        switch ($name) {
            case Values::VALUE_ALWAYS_ON:
                return new AlwaysOnSampler();
            case Values::VALUE_ALWAYS_OFF:
                return new AlwaysOffSampler();
            case Values::VALUE_PARENT_BASED_ALWAYS_ON:
                return new ParentBased(new AlwaysOnSampler());
            case Values::VALUE_PARENT_BASED_ALWAYS_OFF:
                return new ParentBased(new AlwaysOffSampler());
            default:
                throw new InvalidArgumentException(sprintf('Unknown sampler: %s', $name));
        }
    }
}