diff --git a/src/AdapterManager.php b/src/AdapterManager.php index 6c5ef45..29ac00d 100644 --- a/src/AdapterManager.php +++ b/src/AdapterManager.php @@ -7,6 +7,7 @@ use Cosmastech\StatsDClientAdapter\Adapters\Datadog\DatadogStatsDClientAdapter; use Cosmastech\StatsDClientAdapter\Adapters\InMemory\InMemoryClientAdapter; use Cosmastech\StatsDClientAdapter\Adapters\League\LeagueStatsDClientAdapter; +use Cosmastech\StatsDClientAdapter\Adapters\StatsDClientAdapter; use Cosmastech\StatsDClientAdapter\Clients\Datadog\DatadogLoggingClient; use Cosmastech\StatsDClientAdapter\Utility\SampleRateDecider\SampleRateSendDecider; use DataDog\DogStatsd; @@ -16,6 +17,9 @@ use League\StatsD\Exception\ConfigurationException; /** + * @property array $instances + * @method StatsDClientAdapter instance($name = null) + * * @mixin \Cosmastech\StatsDClientAdapter\Adapters\StatsDClientAdapter */ class AdapterManager extends MultipleInstanceManager @@ -34,7 +38,7 @@ class AdapterManager extends MultipleInstanceManager /** * @var array */ - protected array $defaultTags = []; + protected array $defaultTags; /** * @inheritDoc @@ -71,18 +75,32 @@ public function getInstanceConfig($name) } /** - * @return array + * @param array $tags + * @return void */ - protected function getDefaultTagsFromConfig(): array + public function setDefaultTags(array $tags): void { - return $this->config->get('statsd-adapter.default_tags', []); + $this->defaultTags = $tags; + + foreach ($this->instances as $instance) { + $instance->setDefaultTags($this->defaultTags); + } } - public function setDefaultTags(array $tags): void + /** + * @return array + */ + public function getDefaultTags(): array { - $this->defaultTags = $tags; + return $this->defaultTags ?? $this->getDefaultTagsFromConfig(); + } - + /** + * @return array + */ + protected function getDefaultTagsFromConfig(): array + { + return $this->config->get('statsd-adapter.default_tags', []); } /** @@ -93,7 +111,7 @@ protected function createMemoryAdapter(array $config): InMemoryClientAdapter { $wrapperClock = new WrapperClock(FactoryImmutable::getDefaultInstance()); - return new InMemoryClientAdapter($wrapperClock, $this->getDefaultTagsFromConfig()); + return new InMemoryClientAdapter($wrapperClock, $this->getDefaultTags()); } /** @@ -119,7 +137,7 @@ protected function createLogDatadogAdapter(array $config): DatadogStatsDClientAd return new DatadogStatsDClientAdapter( new DatadogLoggingClient($this->app->make('log'), $logLevel, $config), - $this->getDefaultTagsFromConfig() + $this->getDefaultTags() ); } @@ -129,7 +147,7 @@ protected function createLogDatadogAdapter(array $config): DatadogStatsDClientAd */ protected function createDatadogAdapter(array $config): DatadogStatsDClientAdapter { - return new DatadogStatsDClientAdapter(new DogStatsd($config), $this->getDefaultTagsFromConfig()); + return new DatadogStatsDClientAdapter(new DogStatsd($config), $this->getDefaultTags()); } /** @@ -146,7 +164,7 @@ protected function createLeagueAdapter(array $config): LeagueStatsDClientAdapter return new LeagueStatsDClientAdapter( $leagueClient, new SampleRateSendDecider(), - $this->getDefaultTagsFromConfig() + $this->getDefaultTags() ); } } diff --git a/tests/AdapterManagerTest.php b/tests/AdapterManagerTest.php index cfa7846..232c38a 100644 --- a/tests/AdapterManagerTest.php +++ b/tests/AdapterManagerTest.php @@ -112,4 +112,35 @@ public function getDefaultTags_withDefaultTagsSet_returnsDefaultTagsArray(): voi // Then self::assertSame(["abc" => true], $adapterManager->getDefaultTags()); } + + #[Test] + public function setDefaultTags_passesTagsToExistingInstance(): void + { + // Given + $adapterManager = $this->createAdapterManager(); + + /** @var InMemoryClientAdapter $inMemoryClientAdapter */ + $inMemoryClientAdapter = $adapterManager->instance("memory"); + + // When + $adapterManager->setDefaultTags(["abc" => "hello"]); + + // Then + self::assertSame(["abc" => "hello"], $inMemoryClientAdapter->getDefaultTags()); + } + + public function setDefaultTags_passesToNewInstance(): void + { + // Given + $adapterManager = $this->createAdapterManager(); + + // And an instance is created + $adapterManager->instance("log_datadog"); + + // When + $adapterManager->setDefaultTags(["abc" => "123"]); + + // Then + self::assertEquals(["abc" => "123"], $adapterManager->instance("memory")); + } }