15
15
*/
16
16
package io .micrometer .registry .otlp ;
17
17
18
+ import io .micrometer .core .instrument .Meter ;
19
+ import io .micrometer .core .instrument .Tags ;
18
20
import io .micrometer .core .instrument .config .InvalidConfigurationException ;
19
21
import org .junit .jupiter .api .Test ;
20
22
23
25
import java .util .HashMap ;
24
26
import java .util .Map ;
25
27
import java .util .concurrent .TimeUnit ;
28
+ import java .util .function .Function ;
26
29
import java .util .stream .Stream ;
27
30
28
- import static java . util . Map . entry ;
31
+ import static io . micrometer . core . instrument . config . validate . PropertyValidator . getStringMap ;
29
32
import static org .assertj .core .api .Assertions .assertThat ;
30
33
import static org .assertj .core .api .Assertions .assertThatThrownBy ;
31
34
import static uk .org .webcompere .systemstubs .SystemStubs .withEnvironmentVariable ;
@@ -284,9 +287,47 @@ void histogramFlavorPerMeter() {
284
287
"a.b.c=explicit_bucket_histogram ,expo =base2_exponential_bucket_histogram" );
285
288
OtlpConfig otlpConfig = properties ::get ;
286
289
assertThat (otlpConfig .validate ().isValid ()).isTrue ();
287
- assertThat (otlpConfig .histogramFlavorPerMeter ()).containsExactly (
288
- entry ("a.b.c" , HistogramFlavor .EXPLICIT_BUCKET_HISTOGRAM ),
289
- entry ("expo" , HistogramFlavor .BASE2_EXPONENTIAL_BUCKET_HISTOGRAM ));
290
+ assertThat (otlpConfig .histogramFlavorPerMeter ().apply (idWithName ("a.b.c" )))
291
+ .isEqualTo (HistogramFlavor .EXPLICIT_BUCKET_HISTOGRAM );
292
+ assertThat (otlpConfig .histogramFlavorPerMeter ().apply (idWithName ("expo" )))
293
+ .isEqualTo (HistogramFlavor .BASE2_EXPONENTIAL_BUCKET_HISTOGRAM );
294
+ }
295
+
296
+ @ Test
297
+ void customHistogramFlavorPerMeterFunction () {
298
+ Map <String , String > properties = new HashMap <>();
299
+ properties .put ("otlp.histogramFlavorPerMeter" ,
300
+ "a.b.c=explicit_bucket_histogram,expo=base2_exponential_bucket_histogram" );
301
+ OtlpConfig otlpConfig = new OtlpConfig () {
302
+ @ Override
303
+ public String get (String key ) {
304
+ return properties .get (key );
305
+ }
306
+
307
+ @ Override
308
+ public Function <Meter .Id , HistogramFlavor > histogramFlavorPerMeter () {
309
+ return id -> {
310
+ Map <String , HistogramFlavor > histogramFlavorPerMeter = getStringMap (this , "histogramFlavorPerMeter" ,
311
+ HistogramFlavor ::fromString )
312
+ .orElse (Collections .emptyMap ());
313
+ for (Map .Entry <String , HistogramFlavor > entry : histogramFlavorPerMeter .entrySet ()) {
314
+ if (id .getName ().startsWith (entry .getKey ())) {
315
+ return entry .getValue ();
316
+ }
317
+ }
318
+ return histogramFlavor ();
319
+ };
320
+ }
321
+ };
322
+ assertThat (otlpConfig .validate ().isValid ()).isTrue ();
323
+ assertThat (otlpConfig .histogramFlavorPerMeter ().apply (idWithName ("something" )))
324
+ .isEqualTo (otlpConfig .histogramFlavor ());
325
+ assertThat (otlpConfig .histogramFlavorPerMeter ().apply (idWithName ("a.b.c" )))
326
+ .isEqualTo (HistogramFlavor .EXPLICIT_BUCKET_HISTOGRAM );
327
+ assertThat (otlpConfig .histogramFlavorPerMeter ().apply (idWithName ("expo" )))
328
+ .isEqualTo (HistogramFlavor .BASE2_EXPONENTIAL_BUCKET_HISTOGRAM );
329
+ assertThat (otlpConfig .histogramFlavorPerMeter ().apply (idWithName ("expo.other" )))
330
+ .isEqualTo (HistogramFlavor .BASE2_EXPONENTIAL_BUCKET_HISTOGRAM );
290
331
}
291
332
292
333
@ Test
@@ -295,7 +336,11 @@ void maxBucketsPerMeter() {
295
336
properties .put ("otlp.maxBucketsPerMeter" , "a.b.c = 10" );
296
337
OtlpConfig otlpConfig = properties ::get ;
297
338
assertThat (otlpConfig .validate ().isValid ()).isTrue ();
298
- assertThat (otlpConfig .maxBucketsPerMeter ()).containsExactly (entry ("a.b.c" , 10 ));
339
+ assertThat (otlpConfig .maxBucketsPerMeter ().apply (idWithName ("a.b.c" ))).isEqualTo (10 );
340
+ }
341
+
342
+ Meter .Id idWithName (String name ) {
343
+ return new Meter .Id (name , Tags .empty (), null , null , Meter .Type .OTHER );
299
344
}
300
345
301
346
}
0 commit comments