@@ -13,6 +13,7 @@ import java.util.concurrent.TimeUnit
13
13
import java.util.concurrent.TimeoutException
14
14
import java.util.function.Supplier
15
15
16
+ import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND
16
17
import static java.util.concurrent.TimeUnit.MILLISECONDS
17
18
import static java.util.concurrent.TimeUnit.SECONDS
18
19
@@ -32,7 +33,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification {
32
33
Sink sink = Mock (Sink )
33
34
DDAgentFeaturesDiscovery features = Mock (DDAgentFeaturesDiscovery )
34
35
features. supportsMetrics() >> true
35
- WellKnownTags wellKnownTags = new WellKnownTags (" runtimeid" , " hostname" , " env" , " service" , " version" ," language" )
36
+ WellKnownTags wellKnownTags = new WellKnownTags (" runtimeid" , " hostname" , " env" , " service" , " version" , " language" )
36
37
ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator (
37
38
wellKnownTags,
38
39
empty,
@@ -61,7 +62,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification {
61
62
Sink sink = Mock (Sink )
62
63
DDAgentFeaturesDiscovery features = Mock (DDAgentFeaturesDiscovery )
63
64
features. supportsMetrics() >> true
64
- WellKnownTags wellKnownTags = new WellKnownTags (" runtimeid" , " hostname" , " env" , " service" , " version" ," language" )
65
+ WellKnownTags wellKnownTags = new WellKnownTags (" runtimeid" , " hostname" , " env" , " service" , " version" , " language" )
65
66
ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator (
66
67
wellKnownTags,
67
68
[ignoredResourceName]. toSet(),
@@ -120,6 +121,44 @@ class ConflatingMetricAggregatorTest extends DDSpecification {
120
121
aggregator. close()
121
122
}
122
123
124
+ def " should compute stats for span kind #kind" () {
125
+ setup :
126
+ MetricWriter writer = Mock (MetricWriter )
127
+ Sink sink = Stub (Sink )
128
+ DDAgentFeaturesDiscovery features = Mock (DDAgentFeaturesDiscovery )
129
+ features. supportsMetrics() >> true
130
+ features. spanKindsToComputedStats() >> [" client" , " server" , " producer" , " consumer" ]
131
+ ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator (empty,
132
+ features, sink, writer, 10 , queueSize, reportingInterval, SECONDS )
133
+ aggregator. start()
134
+
135
+ when :
136
+ CountDownLatch latch = new CountDownLatch (1 )
137
+ def span = Spy (new SimpleSpan (" service" , " operation" , " resource" , " type" , false , false , false , 0 , 100 , HTTP_OK ))
138
+ span. getTag(SPAN_KIND ) >> kind
139
+ aggregator. publish([span])
140
+ aggregator. report()
141
+ def latchTriggered = latch. await(2 , SECONDS )
142
+
143
+ then :
144
+ latchTriggered == statsComputed
145
+ (statsComputed ? 1 : 0 ) * writer. startBucket(1 , _, _)
146
+ (statsComputed ? 1 : 0 ) * writer. add(new MetricKey (" resource" , " service" , " operation" , " type" , HTTP_OK , false ), _) >> { MetricKey key , AggregateMetric value ->
147
+ value. getHitCount() == 1 && value. getTopLevelCount() == 0 && value. getDuration() == 100
148
+ }
149
+ (statsComputed ? 1 : 0 ) * writer. finishBucket() >> { latch. countDown() }
150
+
151
+ cleanup :
152
+ aggregator. close()
153
+
154
+ where :
155
+ kind | statsComputed
156
+ " client" | true
157
+ UTF8BytesString . create(" server" ) | true
158
+ " internal" | false
159
+ null | false
160
+ }
161
+
123
162
def " measured spans do not contribute to top level count" () {
124
163
setup :
125
164
MetricWriter writer = Mock (MetricWriter )
@@ -472,7 +511,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification {
472
511
ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator (empty,
473
512
features, sink, writer, 10 , queueSize, 200 , MILLISECONDS )
474
513
final spans = [
475
- new SimpleSpan (" service" , " operation" , " resource" , " type" , false , true , false , 0 , 10 , HTTP_OK )
514
+ new SimpleSpan (" service" , " operation" , " resource" , " type" , false , true , false , 0 , 10 , HTTP_OK )
476
515
]
477
516
aggregator. start()
478
517
0 commit comments