@@ -13,6 +13,7 @@ import java.util.concurrent.TimeUnit
1313import java.util.concurrent.TimeoutException
1414import java.util.function.Supplier
1515
16+ import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND
1617import static java.util.concurrent.TimeUnit.MILLISECONDS
1718import static java.util.concurrent.TimeUnit.SECONDS
1819
@@ -32,7 +33,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification {
3233 Sink sink = Mock (Sink )
3334 DDAgentFeaturesDiscovery features = Mock (DDAgentFeaturesDiscovery )
3435 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" )
3637 ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator (
3738 wellKnownTags,
3839 empty,
@@ -61,7 +62,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification {
6162 Sink sink = Mock (Sink )
6263 DDAgentFeaturesDiscovery features = Mock (DDAgentFeaturesDiscovery )
6364 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" )
6566 ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator (
6667 wellKnownTags,
6768 [ignoredResourceName]. toSet(),
@@ -120,6 +121,44 @@ class ConflatingMetricAggregatorTest extends DDSpecification {
120121 aggregator. close()
121122 }
122123
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+
123162 def " measured spans do not contribute to top level count" () {
124163 setup :
125164 MetricWriter writer = Mock (MetricWriter )
@@ -472,7 +511,7 @@ class ConflatingMetricAggregatorTest extends DDSpecification {
472511 ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator (empty,
473512 features, sink, writer, 10 , queueSize, 200 , MILLISECONDS )
474513 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 )
476515 ]
477516 aggregator. start()
478517
0 commit comments