芝麻web文件管理V1.00
编辑当前文件:/home/seolotod/critterchoice.com/wp-content/mu-plugins/object-cache-pro/src/Clients/Client.php
context = $this->prepareContext($context, $callback); if (\is_callable($callback)) { $callback = 'callable'; } if ($callback === Configuration::TRACER_NONE) { $callback = null; } if ($callback === Configuration::TRACER_OPENTELEMETRY && ! $this->context) { $callback = null; } $this->callback = $callback ? "{$callback}Callback" : 'passthroughCallback'; if (! \method_exists($this, $this->callback)) { throw new InvalidArgumentException("Callback `{$callback}` is not supported by " . __CLASS__); } $this->client = $this->{$this->callback}($client, '__construct'); } /** * Forwards all calls to registered callback. * * @param string $method * @param array
$arguments * @return mixed */ public function __call($method, $arguments) { return $this->{$this->callback}(function () use ($method, $arguments) { return $this->client->{$method}(...$arguments); }, \strtolower($method)); } /** * Returns prepared context before it's being set. * * @param mixed $context * @param string|callable|null $callback * @return mixed */ protected function prepareContext($context, $callback) { if (\is_callable($callback)) { return $callback; } if ( ! \class_exists(TracerProviderInterface::class) || ! \class_exists(NoopTracer::class) || ! \class_exists(Globals::class) ) { return $context; } if (! $context && $callback === Configuration::TRACER_OPENTELEMETRY) { $context = Globals::tracerProvider(); } if ($context instanceof TracerProviderInterface) { $context = $this->createOpenTelemetryTracer($context); } if ($context instanceof NoopTracer) { return; } return $context; } /** * Executes given callback. * * @param \Closure $cb * @param string $method * @return mixed */ protected function passthroughCallback(Closure $cb, string $method) { return $cb(); } /** * Executes given callback on callable. * * @param \Closure $cb * @param string $method * @return mixed */ protected function callableCallback(Closure $cb, string $method) { return ($this->context)($cb, $method); } /** * Executes given callback as New Relic datastore segment. * * @param \Closure $cb * @param string $method * @return mixed */ protected function newRelicCallback(Closure $cb, string $method) { return \newrelic_record_datastore_segment($cb, [ 'product' => $this->context ?? 'Redis', 'operation' => $method, ]); } /** * Executes given callback using Open Telemetry tracer. * * @param \Closure $cb * @param string $method * @return mixed */ protected function openTelemetryCallback(Closure $cb, string $method) { $span = $this->context->spanBuilder($method) ->setAttribute('db.system', 'redis') ->setSpanKind(SpanKind::KIND_CLIENT) ->startSpan(); try { return $cb(); } catch (Throwable $exception) { $span->recordException($exception); throw $exception; } finally { $span->end(); } } /** * Creates an OpenTelemetry tracer from given tracer provider. * * @param TracerProviderInterface $tracerProvider * @return TracerInterface */ abstract protected function createOpenTelemetryTracer(TracerProviderInterface $tracerProvider): TracerInterface; }