@@ -112,6 +112,26 @@ mod tests {
112
112
Ok ( result)
113
113
}
114
114
115
+ fn get_all_metrics_by_client_type (
116
+ connection : Arc < ConnectionThreadSafe > ,
117
+ ) -> StdResult < Vec < ( String , String , String , i64 ) > > {
118
+ let query = "select date, counter_name, client_type, value from metrics_per_day_and_client_type" ;
119
+ let mut statement = connection. prepare ( query) ?;
120
+ let mut result = Vec :: new ( ) ;
121
+ while let Ok ( sqlite:: State :: Row ) = statement. next ( ) {
122
+ result. push ( (
123
+ statement. read :: < String , _ > ( "date" ) ?,
124
+ statement. read :: < String , _ > ( "counter_name" ) ?,
125
+ statement
126
+ . read :: < Option < String > , _ > ( "client_type" ) ?
127
+ . unwrap_or_default ( ) ,
128
+ statement. read :: < i64 , _ > ( "value" ) ?,
129
+ ) ) ;
130
+ }
131
+
132
+ Ok ( result)
133
+ }
134
+
115
135
/// Insert a metric event in the database.
116
136
/// date format is "%Y-%m-%d %H:%M:%S %z", example: "2015-09-05 23:56:04 +0000"
117
137
fn insert_metric_event_with_origin (
@@ -136,6 +156,29 @@ mod tests {
136
156
let _event = persister. persist ( message) . unwrap ( ) ;
137
157
}
138
158
159
+ fn insert_metric_event_message (
160
+ persister : & EventPersister ,
161
+ date : & str ,
162
+ metric_name : & str ,
163
+ origin : & str ,
164
+ client_type : & str ,
165
+ value : i64 ,
166
+ ) {
167
+ let metric_date =
168
+ DateTime :: parse_from_str ( & format ! ( "{date} +0000" ) , "%Y-%m-%d %H:%M:%S %z" ) . unwrap ( ) ;
169
+
170
+ let message = UsageReporter :: create_metrics_event_message (
171
+ metric_name. to_string ( ) ,
172
+ value,
173
+ Duration :: from_secs ( 5 ) ,
174
+ origin. to_string ( ) ,
175
+ client_type. to_string ( ) ,
176
+ metric_date. into ( ) ,
177
+ ) ;
178
+
179
+ let _event = persister. persist ( message) . unwrap ( ) ;
180
+ }
181
+
139
182
/// Insert a metric event with the old format (without origin) in the database.
140
183
fn insert_metric_event (
141
184
persister : & EventPersister ,
@@ -301,6 +344,30 @@ mod tests {
301
344
assert ! ( result. contains( & ( "2024-10-30" , "metric_1" , "ORIGIN_B" , 7 ) ) ) ;
302
345
}
303
346
347
+ #[ test]
348
+ fn vue_metrics_per_day_and_client_type ( ) {
349
+ fn tuple_with_str ( t : & ( String , String , String , i64 ) ) -> ( & str , & str , & str , i64 ) {
350
+ ( t. 0 . as_str ( ) , t. 1 . as_str ( ) , t. 2 . as_str ( ) , t. 3 )
351
+ }
352
+
353
+ let connection = Arc :: new ( event_store_db_connection ( ) . unwrap ( ) ) ;
354
+ let persister = EventPersister :: new ( connection. clone ( ) ) ;
355
+
356
+ insert_metric_event_message (
357
+ & persister,
358
+ "2024-10-29 21:00:00" ,
359
+ "metric_1" ,
360
+ "ORIGIN_A" ,
361
+ "CLIENT_TYPE_A" ,
362
+ 15 ,
363
+ ) ;
364
+
365
+ let result = get_all_metrics_by_client_type ( connection) . unwrap ( ) ;
366
+ let result: Vec < _ > = result. iter ( ) . map ( tuple_with_str) . collect ( ) ;
367
+
368
+ assert ! ( result. contains( & ( "2024-10-29" , "metric_1" , "CLIENT_TYPE_A" , 15 ) ) ) ;
369
+ }
370
+
304
371
#[ test]
305
372
fn sum_metric_per_day_and_origin_on_old_event ( ) {
306
373
fn tuple_with_str ( t : & ( String , String , String , i64 ) ) -> ( & str , & str , & str , i64 ) {
0 commit comments