MediaWiki master
PoolCounterFactory.php
Go to the documentation of this file.
1<?php
3
4use Psr\Log\LoggerInterface;
6
11 private ?PoolCounterConnectionManager $manager = null;
12 private ?array $typeConfigs;
13 private array $clientConf;
14 private LoggerInterface $logger;
15 private TracerInterface $tracer;
16
23 public function __construct( ?array $typeConfigs, array $clientConf,
24 LoggerInterface $logger, TracerInterface $tracer ) {
25 $this->typeConfigs = $typeConfigs;
26 $this->clientConf = $clientConf;
27 $this->logger = $logger;
28 $this->tracer = $tracer;
29 }
30
31 private function getClientManager(): PoolCounterConnectionManager {
32 $this->manager ??= new PoolCounterConnectionManager( $this->clientConf );
33 return $this->manager;
34 }
35
44 public function create( string $type, string $key ): PoolCounter {
45 $conf = $this->typeConfigs[$type] ?? null;
46 if ( $conf === null ) {
47 return new PoolCounterNull();
48 }
49
50 $class = $conf['class'] ?? null;
51 if ( $class === 'PoolCounter_Client' ) {
52 // Since 1.16: Introduce PoolCounter_Client in PoolCounter extension.
53 // Since 1.40: Move to core as symbolic name, discourage use of class name.
54 $class = PoolCounterClient::class;
55 }
57 $poolCounter = new $class( $conf, $type, $key );
58 $poolCounter->setLogger( $this->logger );
59 $poolCounter->setTracer( $this->tracer );
60
61 // Support subclass for back-compat with the extension
62 if ( $poolCounter instanceof PoolCounterClient ) {
63 $poolCounter->setManager( $this->getClientManager() );
64 }
65
66 return $poolCounter;
67 }
68}
Helper for \MediaWiki\PoolCounter\PoolCounterClient.
create(string $type, string $key)
Get a PoolCounter.
__construct(?array $typeConfigs, array $clientConf, LoggerInterface $logger, TracerInterface $tracer)
A default PoolCounter, which provides no locking.
Semaphore semantics to restrict how many workers may concurrently perform a task.
Base interface for an OpenTelemetry tracer responsible for creating spans.