Skip to content
This repository was archived by the owner on Mar 29, 2020. It is now read-only.

Commit 99f60b2

Browse files
authored
Merge pull request #35 from oridag/issue-#34
Fix API reporter to report timer metrics
2 parents ac7b3dc + ae643e0 commit 99f60b2

File tree

2 files changed

+58
-4
lines changed

2 files changed

+58
-4
lines changed

src/main/scala/kamon/datadog/DatadogAPIReporter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ class DatadogAPIReporter(@volatile private var configuration: Configuration, @vo
124124
}
125125
}
126126

127-
(snapshot.histograms ++ snapshot.rangeSamplers).foreach(addDistribution)
127+
(snapshot.histograms ++ snapshot.rangeSamplers ++ snapshot.timers).foreach(addDistribution)
128128

129129
seriesBuilder
130130
.insert(0, "{\"series\":[")

src/test/scala/kamon/datadog/DatadogAPIReporterSpec.scala

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ package kamon.datadog
33
import java.time.Instant
44

55
import kamon.Kamon
6-
import kamon.metric.{ Instrument, MeasurementUnit, Metric, MetricSnapshot, PeriodSnapshot }
6+
import kamon.metric.Distribution.Percentile
7+
import kamon.metric._
78
import kamon.module.ModuleFactory
89
import kamon.tag.TagSet
910
import kamon.testkit.Reconfigure
@@ -23,7 +24,6 @@ class DatadogAPIReporterSpec extends AbstractHttpReporter with Matchers with Rec
2324
val baseUrl = mockResponse("/test", new MockResponse().setStatus("HTTP/1.1 200 OK"))
2425
applyConfig("kamon.datadog.api.api-url = \"" + baseUrl + "\"")
2526
applyConfig("kamon.datadog.api.api-key = \"dummy\"")
26-
2727
reporter.reconfigure(Kamon.config())
2828

2929
reporter.reportPeriodSnapshot(
@@ -45,13 +45,67 @@ class DatadogAPIReporterSpec extends AbstractHttpReporter with Matchers with Rec
4545
val request = server.takeRequest()
4646
request.getRequestUrl.toString shouldEqual baseUrl + "?api_key=dummy"
4747
request.getMethod shouldEqual "POST"
48-
Json.parse(request.getBody().readUtf8()) shouldEqual Json
48+
Json.parse(request.getBody.readUtf8()) shouldEqual Json
4949
.parse(
5050
"""{"series":[{"metric":"test.counter","interval":1,"points":[[1523394,0]],"type":"count","host":"test","tags":["env:staging","service:kamon-application","tag1:value1"]}]}"""
5151
)
5252

5353
}
5454

55+
"send timer metrics" in {
56+
val baseUrl = mockResponse("/test", new MockResponse().setStatus("HTTP/1.1 200 OK"))
57+
applyConfig("kamon.datadog.api.api-url = \"" + baseUrl + "\"")
58+
applyConfig("kamon.datadog.api.api-key = \"dummy\"")
59+
reporter.reconfigure(Kamon.config())
60+
61+
val distribution = new Distribution {
62+
override def dynamicRange: DynamicRange = ???
63+
override def min: Long = 0
64+
override def max: Long = 10
65+
override def sum: Long = 100
66+
override def count: Long = 5
67+
override def percentile(rank: Double): Distribution.Percentile = new Percentile {
68+
override def rank: Double = 0
69+
override def value: Long = 0
70+
override def countAtRank: Long = 0
71+
}
72+
override def percentiles: Seq[Distribution.Percentile] = ???
73+
override def percentilesIterator: Iterator[Distribution.Percentile] = ???
74+
override def buckets: Seq[Distribution.Bucket] = ???
75+
override def bucketsIterator: Iterator[Distribution.Bucket] = ???
76+
}
77+
78+
reporter.reportPeriodSnapshot(
79+
PeriodSnapshot.apply(
80+
now.minusMillis(1000),
81+
now,
82+
Nil,
83+
Nil,
84+
Nil,
85+
MetricSnapshot.ofDistributions(
86+
"test.timer",
87+
"test",
88+
Metric.Settings.ForDistributionInstrument(MeasurementUnit.none, java.time.Duration.ZERO, DynamicRange.Default),
89+
Instrument.Snapshot.apply(TagSet.Empty, distribution) :: Nil
90+
) :: Nil,
91+
Nil
92+
)
93+
)
94+
val request = server.takeRequest()
95+
request.getRequestUrl.toString shouldEqual baseUrl + "?api_key=dummy"
96+
request.getMethod shouldEqual "POST"
97+
Json.parse(request.getBody.readUtf8()) shouldEqual Json
98+
.parse(
99+
"""{"series":[
100+
|{"metric":"test.timer.avg","interval":1,"points":[[1523394,20]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
101+
|{"metric":"test.timer.count","interval":1,"points":[[1523394,5]],"type":"count","host":"test","tags":["env:staging","service:kamon-application"]},
102+
|{"metric":"test.timer.median","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
103+
|{"metric":"test.timer.95percentile","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
104+
|{"metric":"test.timer.max","interval":1,"points":[[1523394,10]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
105+
|{"metric":"test.timer.min","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]}]}""".stripMargin
106+
)
107+
}
108+
55109
reporter.stop()
56110

57111
}

0 commit comments

Comments
 (0)