@@ -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