diff options
Diffstat (limited to 'vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Config.php')
-rw-r--r-- | vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Config.php | 390 |
1 files changed, 0 insertions, 390 deletions
diff --git a/vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Config.php b/vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Config.php deleted file mode 100644 index 28fb972da..000000000 --- a/vendor/jonahgeorge/jaeger-client-php/src/Jaeger/Config.php +++ /dev/null @@ -1,390 +0,0 @@ -<?php - -namespace Jaeger; - -use Exception; -use Jaeger\Reporter\CompositeReporter; -use Jaeger\Reporter\LoggingReporter; -use Jaeger\Reporter\ReporterInterface; -use Jaeger\ReporterFactory\JaegerHttpReporterFactory; -use Jaeger\ReporterFactory\JaegerReporterFactory; -use Jaeger\ReporterFactory\ZipkinReporterFactory; -use Jaeger\Sampler\ConstSampler; -use Jaeger\Sampler\ProbabilisticSampler; -use Jaeger\Sampler\RateLimitingSampler; -use Jaeger\Sampler\SamplerInterface; -use Jaeger\Util\RateLimiter; -use OpenTracing\GlobalTracer; -use Psr\Cache\CacheItemPoolInterface; -use Psr\Log\LoggerInterface; -use Psr\Log\NullLogger; - -class Config -{ - const IP_VERSION = "ip_version"; - - const ZIPKIN_OVER_COMPACT_UDP = "zipkin_over_compact_udp"; - const JAEGER_OVER_BINARY_UDP = "jaeger_over_binary_udp"; - const JAEGER_OVER_BINARY_HTTP = "jaeger_over_binary_http"; - - const IPV6 = "IPv6"; - const IPV4 = "IPv4"; - - /** - * @return string[] - */ - public static function getAvailableDispatchModes() - { - return [self::ZIPKIN_OVER_COMPACT_UDP, self::JAEGER_OVER_BINARY_UDP, self::JAEGER_OVER_BINARY_HTTP]; - } - - /** - * @var array - */ - private $config; - - /** - * @var string - */ - private $serviceName; - - /** - * @var bool - */ - private $initialized = false; - - /** - * @var LoggerInterface - */ - private $logger; - - /** - * @return LoggerInterface - */ - public function getLogger() - { - return $this->logger; - } - - /** - * @var CacheItemPoolInterface - */ - private $cache; - - /** - * Config constructor. - * @param array $config - * @param string|null $serviceName - * @param LoggerInterface|null $logger - * @param CacheItemPoolInterface|null $cache - * @throws Exception - */ - public function __construct( - array $config, - string $serviceName = null, - LoggerInterface $logger = null, - CacheItemPoolInterface $cache = null - ) { - $this->config = $config; - - $this->setConfigFromEnv(); - - if (empty($this->config["dispatch_mode"])) { - $this->config["dispatch_mode"] = self::ZIPKIN_OVER_COMPACT_UDP; - } - - if (empty($this->config[Config::IP_VERSION])) { - $this->config[Config::IP_VERSION] = self::IPV4; - } - - $this->serviceName = $this->config['service_name'] ?? $serviceName; - - if ($this->serviceName === null) { - throw new Exception('service_name required in the config or param.'); - } - - $this->logger = $logger ?: new NullLogger(); - $this->cache = $cache; - } - - /** - * @return Tracer|null - * @throws Exception - */ - public function initializeTracer() - { - if ($this->initialized) { - $this->logger->warning('Jaeger tracer already initialized, skipping'); - return null; - } - - $reporter = $this->getReporter(); - $sampler = $this->getSampler(); - - - $tracer = $this->createTracer($reporter, $sampler); - - $this->initializeGlobalTracer($tracer); - - return $tracer; - } - - /** - * @param ReporterInterface $reporter - * @param SamplerInterface $sampler - * @return Tracer - */ - public function createTracer(ReporterInterface $reporter, SamplerInterface $sampler): Tracer - { - return new Tracer( - $this->serviceName, - $reporter, - $sampler, - $this->shouldUseOneSpanPerRpc(), - $this->logger, - null, - $this->getTraceIdHeader(), - $this->getBaggageHeaderPrefix(), - $this->getDebugIdHeaderKey(), - $this->getConfiguredTags() - ); - } - - /** - * @return string - */ - public function getServiceName(): string - { - return $this->serviceName; - } - - /** - * @param Tracer $tracer - */ - private function initializeGlobalTracer(Tracer $tracer) - { - GlobalTracer::set($tracer); - $this->logger->debug('OpenTracing\GlobalTracer initialized to ' . $tracer->getServiceName()); - } - - /** - * @return bool - */ - private function getLogging(): bool - { - return (bool)($this->config['logging'] ?? false); - } - - /** - * @return ReporterInterface - */ - private function getReporter(): ReporterInterface - { - switch ($this->config["dispatch_mode"]) { - case self::JAEGER_OVER_BINARY_UDP: - $reporter = (new JaegerReporterFactory($this))->createReporter(); - break; - case self::ZIPKIN_OVER_COMPACT_UDP: - $reporter = (new ZipkinReporterFactory($this))->createReporter(); - break; - case self::JAEGER_OVER_BINARY_HTTP: - $reporter = (new JaegerHttpReporterFactory($this))->createReporter(); - break; - default: - throw new \RuntimeException( - sprintf( - "Unsupported `dispatch_mode` value: %s. Allowed values are: %s", - $this->config["dispatch_mode"], - implode(", ", Config::getAvailableDispatchModes()) - ) - ); - } - - if ($this->getLogging()) { - $reporter = new CompositeReporter($reporter, new LoggingReporter($this->logger)); - } - - return $reporter; - } - - /** - * @return SamplerInterface - * @throws \Psr\Cache\InvalidArgumentException - * @throws Exception - */ - private function getSampler(): SamplerInterface - { - $samplerConfig = $this->config['sampler'] ?? []; - $samplerType = $samplerConfig['type'] ?? null; - $samplerParam = $samplerConfig['param'] ?? null; - - if ($samplerType === null || $samplerType === SAMPLER_TYPE_REMOTE) { - // todo: implement remote sampling - return new ProbabilisticSampler((float)$samplerParam); - } elseif ($samplerType === SAMPLER_TYPE_CONST) { - return new ConstSampler($samplerParam ?? false); - } elseif ($samplerType === SAMPLER_TYPE_PROBABILISTIC) { - return new ProbabilisticSampler((float)$samplerParam); - } elseif ($samplerType === SAMPLER_TYPE_RATE_LIMITING) { - if (!$this->cache) { - throw new Exception('You cannot use RateLimitingSampler without cache component'); - } - $cacheConfig = $samplerConfig['cache'] ?? []; - return new RateLimitingSampler( - $samplerParam ?? 0, - new RateLimiter( - $this->cache, - $cacheConfig['currentBalanceKey'] ?? 'rate.currentBalance', - $cacheConfig['lastTickKey'] ?? 'rate.lastTick' - ) - ); - } - throw new Exception('Unknown sampler type ' . $samplerType); - } - - /** - * The UDP max buffer length. - * - * @return int - */ - public function getMaxBufferLength(): int - { - return (int)($this->config['max_buffer_length'] ?? 64000); - } - - /** - * @return string - */ - public function getLocalAgentReportingHost(): string - { - return $this->getLocalAgentGroup()['reporting_host'] ?? DEFAULT_REPORTING_HOST; - } - - /** - * @return int - */ - public function getLocalAgentReportingPort(): int - { - $port = $this->getLocalAgentGroup()['reporting_port'] ?? null; - if (empty($this->getLocalAgentGroup()['reporting_port'])) { - switch ($this->config['dispatch_mode']) { - case self::JAEGER_OVER_BINARY_UDP: - $port = DEFAULT_JAEGER_UDP_BINARY_REPORTING_PORT; - break; - case self::JAEGER_OVER_BINARY_HTTP: - $port = DEFAULT_JAEGER_HTTP_BINARY_REPORTING_PORT; - break; - default: - $port = DEFAULT_ZIPKIN_UDP_COMPACT_REPORTING_PORT; - } - } - return (int)$port; - } - - /** - * @return array - */ - private function getLocalAgentGroup(): array - { - return $this->config['local_agent'] ?? []; - } - - /** - * @return string - */ - private function getTraceIdHeader(): string - { - return $this->config['trace_id_header'] ?? TRACE_ID_HEADER; - } - - /** - * @return string - */ - private function getBaggageHeaderPrefix(): string - { - return $this->config['baggage_header_prefix'] ?? BAGGAGE_HEADER_PREFIX; - } - - /** - * @return string - */ - private function getDebugIdHeaderKey(): string - { - return $this->config['debug_id_header_key'] ?? DEBUG_ID_HEADER_KEY; - } - - /** - * Get a list of user-defined tags to be added to each span created by the tracer initialized by this config. - * @return string[] - */ - private function getConfiguredTags(): array - { - return $this->config['tags'] ?? []; - } - - /** - * Whether to follow the Zipkin model of using one span per RPC, - * as opposed to the model of using separate spans on the RPC client and server. - * Defaults to true. - * - * @return bool - */ - private function shouldUseOneSpanPerRpc(): bool - { - return $this->config['one_span_per_rpc'] ?? true; - } - - public function ipProtocolVersion(): string - { - return $this->config[self::IP_VERSION] ?? self::IPV4; - } - - /** - * Sets values from env vars into config props, unless ones has been already set. - */ - private function setConfigFromEnv() - { - // general - if (isset($_ENV['JAEGER_SERVICE_NAME']) && !isset($this->config['service_name'])) { - $this->config['service_name'] = $_ENV['JAEGER_SERVICE_NAME']; - } - - if (isset($_ENV['JAEGER_TAGS']) && !isset($this->config["tags"])) { - $this->config['tags'] = $_ENV['JAEGER_TAGS']; - } - - if (isset($_ENV['JAEGER_DISPATCH_MODE']) && !isset($this->config['dispatch_mode'])) { - $this->config['dispatch_mode'] = $_ENV['JAEGER_DISPATCH_MODE']; - } - - // reporting - if (isset($_ENV['JAEGER_AGENT_HOST']) && !isset($this->config['local_agent']['reporting_host'])) { - $this->config['local_agent']['reporting_host'] = $_ENV['JAEGER_AGENT_HOST']; - } - - if (isset($_ENV['JAEGER_AGENT_PORT']) && !isset($this->config['local_agent']['reporting_port'])) { - $this->config['local_agent']['reporting_port'] = intval($_ENV['JAEGER_AGENT_PORT']); - } - - if (isset($_ENV['JAEGER_REPORTER_LOG_SPANS']) && !isset($this->config['logging'])) { - $this->config['logging'] = filter_var($_ENV['JAEGER_REPORTER_LOG_SPANS'], FILTER_VALIDATE_BOOLEAN); - } - - if (isset($_ENV['JAEGER_REPORTER_MAX_QUEUE_SIZE']) && !isset($this->config['max_buffer_length'])) { - $this->config['max_buffer_length'] = intval($_ENV['JAEGER_REPORTER_MAX_QUEUE_SIZE']); - } - - // sampling - if (isset($_ENV['JAEGER_SAMPLER_TYPE']) && !isset($this->config['sampler']['type'])) { - $this->config['sampler']['type'] = $_ENV['JAEGER_SAMPLER_TYPE']; - } - - if (isset($_ENV['JAEGER_SAMPLER_PARAM']) && !isset($this->config['sampler']['param'])) { - $this->config['sampler']['param'] = $_ENV['JAEGER_SAMPLER_PARAM']; - } - - if (isset($_ENV['IP_VERSION']) && !isset($this->config[Config::IP_VERSION])) { - $this->config[Config::IP_VERSION] = $_ENV['IP_VERSION']; - } - } -} |