1
1
use lazy_static:: lazy_static;
2
- use opentelemetry_api:: metrics:: { Counter , MeterProvider as _} ;
2
+ use opentelemetry_api:: {
3
+ metrics:: { Counter , MeterProvider as _} ,
4
+ KeyValue ,
5
+ } ;
3
6
use opentelemetry_sdk:: metrics:: { ManualReader , MeterProvider } ;
7
+ use rand:: { rngs:: SmallRng , Rng , SeedableRng } ;
4
8
use std:: borrow:: Cow ;
5
9
6
10
mod throughput;
@@ -9,6 +13,10 @@ lazy_static! {
9
13
static ref PROVIDER : MeterProvider = MeterProvider :: builder( )
10
14
. with_reader( ManualReader :: builder( ) . build( ) )
11
15
. build( ) ;
16
+ static ref ATTRIBUTE_VALUES : [ & ' static str ; 10 ] = [
17
+ "value1" , "value2" , "value3" , "value4" , "value5" , "value6" , "value7" , "value8" , "value9" ,
18
+ "value10"
19
+ ] ;
12
20
static ref COUNTER : Counter <u64 > = PROVIDER
13
21
. meter( <& str as Into <Cow <' static , str >>>:: into( "test" ) )
14
22
. u64_counter( "hello" )
@@ -20,5 +28,19 @@ fn main() {
20
28
}
21
29
22
30
fn test_counter ( ) {
23
- COUNTER . add ( 1 , & [ ] ) ;
31
+ let mut rng = SmallRng :: from_entropy ( ) ;
32
+ let len = ATTRIBUTE_VALUES . len ( ) ;
33
+ let index_first_attribute = rng. gen_range ( 0 ..len) ;
34
+ let index_second_attribute = rng. gen_range ( 0 ..len) ;
35
+ let index_third_attribute = rng. gen_range ( 0 ..len) ;
36
+
37
+ // each attribute has 10 possible values, so there are 1000 possible combinations (time-series)
38
+ COUNTER . add (
39
+ 1 ,
40
+ & [
41
+ KeyValue :: new ( "attribute1" , ATTRIBUTE_VALUES [ index_first_attribute] ) ,
42
+ KeyValue :: new ( "attribute2" , ATTRIBUTE_VALUES [ index_second_attribute] ) ,
43
+ KeyValue :: new ( "attribute3" , ATTRIBUTE_VALUES [ index_third_attribute] ) ,
44
+ ] ,
45
+ ) ;
24
46
}
0 commit comments