Skip to content

Commit f5b52ee

Browse files
authored
Allow setting default tags on StatsDClientAdapter (#5)
* SetDefaultTagsTrait * tests * moving around methods * rename trait * bump logger spy
1 parent 6158623 commit f5b52ee

14 files changed

+251
-45
lines changed

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"phpunit/phpunit": "^11.2.5",
2020
"friendsofphp/php-cs-fixer": "^3.59",
2121
"league/statsd": "^2.0.0",
22-
"cosmastech/psr-logger-spy": "^0.0.1"
22+
"cosmastech/psr-logger-spy": "^0.0.2"
2323
},
2424
"suggest": {
2525
"datadog/php-datadogstatsd": "For DataDog stats",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Cosmastech\StatsDClientAdapter\Adapters\Concerns;
4+
5+
trait HasDefaultTagsTrait
6+
{
7+
protected array $defaultTags = [];
8+
9+
/**
10+
* @inheritDoc
11+
*/
12+
public function getDefaultTags(): array
13+
{
14+
return $this->defaultTags;
15+
}
16+
17+
/**
18+
* @param array<string, mixed> $tags
19+
* @return void
20+
*/
21+
protected function setDefaultTags(array $defaultTags = []): void
22+
{
23+
$this->defaultTags = $defaultTags;
24+
}
25+
26+
/**
27+
* @param array<string, mixed> $tags
28+
* @return array<string, mixed>
29+
*/
30+
protected function mergeTags(array $tags): array
31+
{
32+
return array_merge($this->getDefaultTags(), $tags);
33+
}
34+
}

src/Adapters/Datadog/DatadogStatsDClientAdapter.php

+47-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Cosmastech\StatsDClientAdapter\Adapters\Datadog;
44

5+
use Cosmastech\StatsDClientAdapter\Adapters\Concerns\HasDefaultTagsTrait;
56
use Cosmastech\StatsDClientAdapter\Adapters\Concerns\TagNormalizerAwareTrait;
67
use Cosmastech\StatsDClientAdapter\Adapters\Contracts\TagNormalizerAware;
78
use Cosmastech\StatsDClientAdapter\Adapters\StatsDClientAdapter;
@@ -10,51 +11,88 @@
1011

1112
class DatadogStatsDClientAdapter implements StatsDClientAdapter, TagNormalizerAware
1213
{
14+
use HasDefaultTagsTrait;
1315
use TagNormalizerAwareTrait;
1416

15-
public function __construct(protected readonly DogStatsd $datadogClient)
17+
public function __construct(protected readonly DogStatsd $datadogClient, array $defaultTags = [])
1618
{
1719
$this->tagNormalizer = new NoopTagNormalizer();
20+
$this->setDefaultTags($defaultTags);
1821
}
1922

2023
public function timing(string $stat, float $durationMs, float $sampleRate = 1.0, array $tags = []): void
2124
{
22-
$this->datadogClient->timing($stat, $durationMs, $sampleRate, $this->normalizeTags($tags));
25+
$this->datadogClient->timing($stat, $durationMs, $sampleRate, $this->normalizeTags($this->mergeTags($tags)));
2326
}
2427

2528
public function gauge(string $stat, float $value, float $sampleRate = 1.0, array $tags = []): void
2629
{
27-
$this->datadogClient->gauge($stat, $value, $sampleRate, $this->normalizeTags($tags));
30+
$this->datadogClient->gauge(
31+
$stat,
32+
$value,
33+
$sampleRate,
34+
$this->normalizeTags($this->mergeTags($tags))
35+
);
2836
}
2937

3038
public function histogram(string $stat, float $value, float $sampleRate = 1.0, array $tags = []): void
3139
{
32-
$this->datadogClient->histogram($stat, $value, $sampleRate, $this->normalizeTags($tags));
40+
$this->datadogClient->histogram(
41+
$stat,
42+
$value,
43+
$sampleRate,
44+
$this->normalizeTags($this->mergeTags($tags))
45+
);
3346
}
3447

3548
public function distribution(string $stat, float $value, float $sampleRate = 1.0, array $tags = []): void
3649
{
37-
$this->datadogClient->distribution($stat, $value, $sampleRate, $this->normalizeTags($tags));
50+
$this->datadogClient->distribution(
51+
$stat,
52+
$value,
53+
$sampleRate,
54+
$this->normalizeTags($this->mergeTags($tags))
55+
);
3856
}
3957

4058
public function set(string $stat, float|string $value, float $sampleRate = 1.0, array $tags = []): void
4159
{
42-
$this->datadogClient->set($stat, $value, $sampleRate, $this->normalizeTags($tags));
60+
$this->datadogClient->set(
61+
$stat,
62+
$value,
63+
$sampleRate,
64+
$this->normalizeTags($this->mergeTags($tags))
65+
);
4366
}
4467

4568
public function increment(array|string $stats, float $sampleRate = 1.0, array $tags = [], int $value = 1): void
4669
{
47-
$this->datadogClient->increment($stats, $sampleRate, $this->normalizeTags($tags), $value);
70+
$this->datadogClient->increment(
71+
$stats,
72+
$sampleRate,
73+
$this->normalizeTags($this->mergeTags($tags)),
74+
$value
75+
);
4876
}
4977

5078
public function decrement(array|string $stats, float $sampleRate = 1.0, array $tags = [], int $value = -1): void
5179
{
52-
$this->datadogClient->decrement($stats, $sampleRate, $this->normalizeTags($tags), $value);
80+
$this->datadogClient->decrement(
81+
$stats,
82+
$sampleRate,
83+
$this->normalizeTags($this->mergeTags($tags)),
84+
$value
85+
);
5386
}
5487

5588
public function updateStats(array|string $stats, int $delta = 1, $sampleRate = 1.0, $tags = null): void
5689
{
57-
$this->datadogClient->updateStats($stats, $delta, $sampleRate, $this->normalizeTags($tags));
90+
$this->datadogClient->updateStats(
91+
$stats,
92+
$delta,
93+
$sampleRate,
94+
$this->normalizeTags($this->mergeTags($tags))
95+
);
5896
}
5997

6098
public function getClient(): DogStatsd

src/Adapters/InMemory/InMemoryClientAdapter.php

+10-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Cosmastech\StatsDClientAdapter\Adapters\InMemory;
44

5+
use Cosmastech\StatsDClientAdapter\Adapters\Concerns\HasDefaultTagsTrait;
56
use Cosmastech\StatsDClientAdapter\Adapters\Concerns\TagNormalizerAwareTrait;
67
use Cosmastech\StatsDClientAdapter\Adapters\Contracts\TagNormalizerAware;
78
use Cosmastech\StatsDClientAdapter\Adapters\InMemory\Models\InMemoryCountRecord;
@@ -17,17 +18,19 @@
1718

1819
class InMemoryClientAdapter implements StatsDClientAdapter, TagNormalizerAware
1920
{
21+
use HasDefaultTagsTrait;
2022
use TagNormalizerAwareTrait;
2123

2224
protected InMemoryStatsRecord $stats;
2325
protected readonly ClockInterface $clock;
2426

25-
public function __construct(ClockInterface $clock)
27+
public function __construct(ClockInterface $clock, array $defaultTags = [])
2628
{
2729
$this->clock = $clock;
2830

2931
$this->reset();
3032
$this->setTagNormalizer(new NoopTagNormalizer());
33+
$this->setDefaultTags($defaultTags);
3134
}
3235

3336
public function timing(string $stat, float $durationMs, float $sampleRate = 1.0, array $tags = []): void
@@ -36,7 +39,7 @@ public function timing(string $stat, float $durationMs, float $sampleRate = 1.0,
3639
$stat,
3740
$durationMs,
3841
$sampleRate,
39-
$this->normalizeTags($tags),
42+
$this->normalizeTags($this->mergeTags($tags)),
4043
$this->clock->now()
4144
);
4245
}
@@ -47,7 +50,7 @@ public function gauge(string $stat, float $value, float $sampleRate = 1.0, array
4750
$stat,
4851
$value,
4952
$sampleRate,
50-
$this->normalizeTags($tags),
53+
$this->normalizeTags($this->mergeTags($tags)),
5154
$this->clock->now()
5255
);
5356
}
@@ -58,7 +61,7 @@ public function histogram(string $stat, float $value, float $sampleRate = 1.0, a
5861
$stat,
5962
$value,
6063
$sampleRate,
61-
$this->normalizeTags($tags),
64+
$this->normalizeTags($this->mergeTags($tags)),
6265
$this->clock->now()
6366
);
6467
}
@@ -69,7 +72,7 @@ public function distribution(string $stat, float $value, float $sampleRate = 1.0
6972
$stat,
7073
$value,
7174
$sampleRate,
72-
$this->normalizeTags($tags),
75+
$this->normalizeTags($this->mergeTags($tags)),
7376
$this->clock->now()
7477
);
7578
}
@@ -80,7 +83,7 @@ public function set(string $stat, float|string $value, float $sampleRate = 1.0,
8083
$stat,
8184
$value,
8285
$sampleRate,
83-
$this->normalizeTags($tags),
86+
$this->normalizeTags($this->mergeTags($tags)),
8487
$this->clock->now()
8588
);
8689
}
@@ -109,7 +112,7 @@ public function updateStats(array|string $stats, int $delta = 1, $sampleRate = 1
109112
$stat,
110113
$delta,
111114
$sampleRate,
112-
$this->normalizeTags($tags),
115+
$this->normalizeTags($this->mergeTags($tags)),
113116
$now
114117
);
115118
}

src/Adapters/League/LeagueStatsDClientAdapter.php

+45-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Cosmastech\StatsDClientAdapter\Adapters\League;
44

5+
use Cosmastech\StatsDClientAdapter\Adapters\Concerns\HasDefaultTagsTrait;
56
use Cosmastech\StatsDClientAdapter\Adapters\Concerns\TagNormalizerAwareTrait;
67
use Cosmastech\StatsDClientAdapter\Adapters\Contracts\TagNormalizerAware;
78
use Cosmastech\StatsDClientAdapter\Adapters\StatsDClientAdapter;
@@ -14,12 +15,15 @@
1415

1516
class LeagueStatsDClientAdapter implements StatsDClientAdapter, TagNormalizerAware
1617
{
18+
use HasDefaultTagsTrait;
1719
use TagNormalizerAwareTrait;
1820

1921
public function __construct(
2022
protected readonly LeagueStatsDClientInterface $leagueStatsDClient,
21-
protected readonly SampleRateSendDeciderInterface $sampleRateSendDecider
23+
protected readonly SampleRateSendDeciderInterface $sampleRateSendDecider,
24+
array $defaultTags = [],
2225
) {
26+
$this->setDefaultTags($defaultTags);
2327
}
2428

2529
/**
@@ -28,12 +32,17 @@ public function __construct(
2832
public static function fromConfig(
2933
array $config,
3034
string $instanceName = 'default',
31-
?SampleRateSendDeciderInterface $sampleRateSendDecider = null
35+
?SampleRateSendDeciderInterface $sampleRateSendDecider = null,
36+
array $defaultTags = []
3237
): static {
3338
$instance = Client::instance($instanceName);
3439
$instance->configure($config);
3540

36-
return new static($instance, $sampleRateSendDecider ?? new SampleRateSendDecider());
41+
return new self(
42+
$instance,
43+
$sampleRateSendDecider ?? new SampleRateSendDecider(),
44+
$defaultTags
45+
);
3746
}
3847

3948
/**
@@ -45,7 +54,11 @@ public function timing(string $stat, float $durationMs, float $sampleRate = 1.0,
4554
return;
4655
}
4756

48-
$this->leagueStatsDClient->timing($stat, $durationMs, $this->normalizeTags($tags));
57+
$this->leagueStatsDClient->timing(
58+
$stat,
59+
$durationMs,
60+
$this->normalizeTags($this->mergeTags($tags))
61+
);
4962
}
5063

5164
/**
@@ -57,7 +70,11 @@ public function gauge(string $stat, float $value, float $sampleRate = 1.0, array
5770
return;
5871
}
5972

60-
$this->leagueStatsDClient->gauge($stat, $value, $tags);
73+
$this->leagueStatsDClient->gauge(
74+
$stat,
75+
$value,
76+
$this->normalizeTags($this->mergeTags($tags))
77+
);
6178
}
6279

6380
public function histogram(string $stat, float $value, float $sampleRate = 1.0, array $tags = []): void
@@ -79,31 +96,50 @@ public function set(string $stat, float|string $value, float $sampleRate = 1.0,
7996
return;
8097
}
8198

82-
$this->leagueStatsDClient->set($stat, $value, $tags);
99+
$this->leagueStatsDClient->set(
100+
$stat,
101+
$value,
102+
$this->normalizeTags($this->mergeTags($tags))
103+
);
83104
}
84105

85106
/**
86107
* @throws ConnectionException
87108
*/
88109
public function increment(array|string $stats, float $sampleRate = 1.0, array $tags = [], int $value = 1): void
89110
{
90-
$this->leagueStatsDClient->increment($stats, $value, $sampleRate, $tags);
111+
$this->leagueStatsDClient->increment(
112+
$stats,
113+
$value,
114+
$sampleRate,
115+
$this->normalizeTags($this->mergeTags($tags))
116+
);
91117
}
92118

93119
/**
94120
* @throws ConnectionException
95121
*/
96122
public function decrement(array|string $stats, float $sampleRate = 1.0, array $tags = [], int $value = 1): void
97123
{
98-
$this->leagueStatsDClient->decrement($stats, $value, $sampleRate, $tags);
124+
$this->leagueStatsDClient->decrement(
125+
$stats,
126+
$value,
127+
$sampleRate,
128+
$this->normalizeTags($this->mergeTags($tags))
129+
);
99130
}
100131

101132
/**
102133
* @throws ConnectionException
103134
*/
104135
public function updateStats(array|string $stats, int $delta = 1, $sampleRate = 1.0, $tags = null): void
105136
{
106-
$this->increment($stats, $sampleRate, $tags, $delta);
137+
$this->increment(
138+
$stats,
139+
$sampleRate,
140+
$this->normalizeTags($this->mergeTags($tags)),
141+
$delta
142+
);
107143
}
108144

109145
public function getClient(): LeagueStatsDClientInterface

src/Adapters/StatsDClientAdapter.php

+5
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@ public function decrement(array|string $stats, float $sampleRate = 1.0, array $t
2121
public function updateStats(array|string $stats, int $delta = 1, $sampleRate = 1.0, $tags = null): void;
2222

2323
public function getClient(): mixed;
24+
25+
/**
26+
* @return array<string, mixed>
27+
*/
28+
public function getDefaultTags(): array;
2429
}

0 commit comments

Comments
 (0)