@@ -65,6 +65,43 @@ class DatadogAPIReporterSpec extends AbstractHttpReporter with Matchers with Rec
65
65
server.getRequestCount shouldEqual 4
66
66
}
67
67
68
+ val examplePeriodWithDistributions : PeriodSnapshot = {
69
+ val distributionExample = new Distribution {
70
+ override def dynamicRange : DynamicRange = ???
71
+ override def min : Long = 0
72
+ override def max : Long = 10
73
+ override def sum : Long = 100
74
+ override def count : Long = 5
75
+ override def percentile (rank : Double ): Distribution .Percentile = new Percentile {
76
+ override def rank : Double = 0
77
+ override def value : Long = 0
78
+ override def countAtRank : Long = 0
79
+ }
80
+ override def percentiles : Seq [Distribution .Percentile ] = ???
81
+ override def percentilesIterator : Iterator [Distribution .Percentile ] = ???
82
+ override def buckets : Seq [Distribution .Bucket ] = ???
83
+ override def bucketsIterator : Iterator [Distribution .Bucket ] = ???
84
+ }
85
+ PeriodSnapshot .apply(
86
+ now.minusMillis(1000 ),
87
+ now,
88
+ Nil ,
89
+ Nil ,
90
+ Nil ,
91
+ MetricSnapshot .ofDistributions(
92
+ " test.timer" ,
93
+ " test" ,
94
+ Metric .Settings .ForDistributionInstrument (
95
+ MeasurementUnit .none,
96
+ java.time.Duration .ZERO ,
97
+ DynamicRange .Default
98
+ ),
99
+ Instrument .Snapshot .apply(TagSet .Empty , distributionExample) :: Nil
100
+ ) :: Nil ,
101
+ Nil
102
+ )
103
+ }
104
+
68
105
" sends metrics - compressed" in {
69
106
val baseUrl = mockResponse(" /test" , new MockResponse ().setStatus(" HTTP/1.1 200 OK" ))
70
107
applyConfig(" kamon.datadog.api.api-url = \" " + baseUrl + " \" " )
@@ -103,50 +140,38 @@ class DatadogAPIReporterSpec extends AbstractHttpReporter with Matchers with Rec
103
140
104
141
}
105
142
106
- " send timer metrics" in {
143
+ " send timer metrics with the p95 percentile by default " in {
107
144
val baseUrl = mockResponse(" /test" , new MockResponse ().setStatus(" HTTP/1.1 200 OK" ))
108
145
applyConfig(" kamon.datadog.api.api-url = \" " + baseUrl + " \" " )
109
146
applyConfig(" kamon.datadog.api.api-key = \" dummy\" " )
110
147
applyConfig(" kamon.datadog.api.compression = false" )
111
148
reporter.reconfigure(Kamon .config())
112
149
113
- val distribution = new Distribution {
114
- override def dynamicRange : DynamicRange = ???
115
- override def min : Long = 0
116
- override def max : Long = 10
117
- override def sum : Long = 100
118
- override def count : Long = 5
119
- override def percentile (rank : Double ): Distribution .Percentile = new Percentile {
120
- override def rank : Double = 0
121
- override def value : Long = 0
122
- override def countAtRank : Long = 0
123
- }
124
- override def percentiles : Seq [Distribution .Percentile ] = ???
125
- override def percentilesIterator : Iterator [Distribution .Percentile ] = ???
126
- override def buckets : Seq [Distribution .Bucket ] = ???
127
- override def bucketsIterator : Iterator [Distribution .Bucket ] = ???
128
- }
129
-
130
- reporter.reportPeriodSnapshot(
131
- PeriodSnapshot .apply(
132
- now.minusMillis(1000 ),
133
- now,
134
- Nil ,
135
- Nil ,
136
- Nil ,
137
- MetricSnapshot .ofDistributions(
138
- " test.timer" ,
139
- " test" ,
140
- Metric .Settings .ForDistributionInstrument (
141
- MeasurementUnit .none,
142
- java.time.Duration .ZERO ,
143
- DynamicRange .Default
144
- ),
145
- Instrument .Snapshot .apply(TagSet .Empty , distribution) :: Nil
146
- ) :: Nil ,
147
- Nil
150
+ reporter.reportPeriodSnapshot(examplePeriodWithDistributions)
151
+ val request = server.takeRequest()
152
+ request.getRequestUrl.toString shouldEqual baseUrl + " ?api_key=dummy"
153
+ request.getMethod shouldEqual " POST"
154
+ Json .parse(request.getBody.readUtf8()) shouldEqual Json
155
+ .parse(
156
+ """ {"series":[
157
+ |{"metric":"test.timer.avg","interval":1,"points":[[1523394,20]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
158
+ |{"metric":"test.timer.count","interval":1,"points":[[1523394,5]],"type":"count","host":"test","tags":["env:staging","service:kamon-application"]},
159
+ |{"metric":"test.timer.median","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
160
+ |{"metric":"test.timer.95percentile","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
161
+ |{"metric":"test.timer.max","interval":1,"points":[[1523394,10]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
162
+ |{"metric":"test.timer.min","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]}]}""" .stripMargin
148
163
)
149
- )
164
+ }
165
+
166
+ " send timer metrics allowing configuration of percentiles to submit" in {
167
+ val baseUrl = mockResponse(" /test" , new MockResponse ().setStatus(" HTTP/1.1 200 OK" ))
168
+ applyConfig(" kamon.datadog.api.api-url = \" " + baseUrl + " \" " )
169
+ applyConfig(" kamon.datadog.api.api-key = \" dummy\" " )
170
+ applyConfig(" kamon.datadog.api.compression = false" )
171
+ applyConfig(" kamon.datadog.percentiles = [95.0, 99, 94.5]" )
172
+ reporter.reconfigure(Kamon .config())
173
+
174
+ reporter.reportPeriodSnapshot(examplePeriodWithDistributions)
150
175
val request = server.takeRequest()
151
176
request.getRequestUrl.toString shouldEqual baseUrl + " ?api_key=dummy"
152
177
request.getMethod shouldEqual " POST"
@@ -157,6 +182,31 @@ class DatadogAPIReporterSpec extends AbstractHttpReporter with Matchers with Rec
157
182
|{"metric":"test.timer.count","interval":1,"points":[[1523394,5]],"type":"count","host":"test","tags":["env:staging","service:kamon-application"]},
158
183
|{"metric":"test.timer.median","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
159
184
|{"metric":"test.timer.95percentile","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
185
+ |{"metric":"test.timer.99percentile","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
186
+ |{"metric":"test.timer.94.5percentile","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
187
+ |{"metric":"test.timer.max","interval":1,"points":[[1523394,10]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
188
+ |{"metric":"test.timer.min","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]}]}""" .stripMargin
189
+ )
190
+ }
191
+
192
+ " send timer metrics without percentiles" in {
193
+ val baseUrl = mockResponse(" /test" , new MockResponse ().setStatus(" HTTP/1.1 200 OK" ))
194
+ applyConfig(" kamon.datadog.api.api-url = \" " + baseUrl + " \" " )
195
+ applyConfig(" kamon.datadog.api.api-key = \" dummy\" " )
196
+ applyConfig(" kamon.datadog.api.compression = false" )
197
+ applyConfig(" kamon.datadog.percentiles = []" )
198
+ reporter.reconfigure(Kamon .config())
199
+
200
+ reporter.reportPeriodSnapshot(examplePeriodWithDistributions)
201
+ val request = server.takeRequest()
202
+ request.getRequestUrl.toString shouldEqual baseUrl + " ?api_key=dummy"
203
+ request.getMethod shouldEqual " POST"
204
+ Json .parse(request.getBody.readUtf8()) shouldEqual Json
205
+ .parse(
206
+ """ {"series":[
207
+ |{"metric":"test.timer.avg","interval":1,"points":[[1523394,20]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
208
+ |{"metric":"test.timer.count","interval":1,"points":[[1523394,5]],"type":"count","host":"test","tags":["env:staging","service:kamon-application"]},
209
+ |{"metric":"test.timer.median","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
160
210
|{"metric":"test.timer.max","interval":1,"points":[[1523394,10]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]},
161
211
|{"metric":"test.timer.min","interval":1,"points":[[1523394,0]],"type":"gauge","host":"test","tags":["env:staging","service:kamon-application"]}]}""" .stripMargin
162
212
)
0 commit comments