@@ -173,43 +173,48 @@ pub async fn run_metrics_collector(state: Arc<State>) {
173
173
last_execution = end;
174
174
175
175
let query = format ! (
176
- "sum by (user ) (avg_over_time(pgbouncer_pools_client_active_connections{{user =~\" dmtr_.*\" , namespace=\" {current_namespace}\" }}[{interval}s] @ {})) > 0" ,
176
+ "sum by (usename ) (avg_over_time(pg_stat_activity_count{{usename =~\" dmtr_.*\" , namespace=\" {current_namespace}\" }}[{interval}s] @ {})) > 0" ,
177
177
end. timestamp_millis( ) / 1000
178
178
) ;
179
179
180
- let response = collect_prometheus_metrics ( config, query) . await ;
181
- if let Err ( err) = response {
182
- error ! ( error = err. to_string( ) , "error to make prometheus request" ) ;
183
- state. metrics . metrics_failure ( & err) ;
184
- continue ;
185
- }
186
- let response = response. unwrap ( ) ;
187
-
188
- for result in response. data . result {
189
- let crd = crds
190
- . iter ( )
191
- . filter ( |c| c. status . is_some ( ) )
192
- . find ( |c| c. status . as_ref ( ) . unwrap ( ) . username . eq ( & result. metric . user ) ) ;
193
-
194
- if crd. is_none ( ) {
195
- warn ! ( user = result. metric. user, "username doesnt have a crd" ) ;
180
+ let response = match collect_prometheus_metrics ( config, query) . await {
181
+ Ok ( response) => response,
182
+ Err ( err) => {
183
+ error ! ( error = err. to_string( ) , "error to make prometheus request" ) ;
184
+ state. metrics . metrics_failure ( & err) ;
196
185
continue ;
197
186
}
187
+ } ;
198
188
199
- let crd = crd. unwrap ( ) ;
200
-
201
- let dcu_per_second = config. dcu_per_second . get ( & crd. spec . network ) ;
202
- if dcu_per_second. is_none ( ) {
203
- let error = Error :: ConfigError ( format ! (
204
- "dcu_per_second not configured to {} network" ,
205
- & crd. spec. network
206
- ) ) ;
207
- error ! ( error = error. to_string( ) ) ;
208
- state. metrics . metrics_failure ( & error) ;
209
- continue ;
210
- }
211
-
212
- let dcu_per_second = dcu_per_second. unwrap ( ) ;
189
+ for result in response. data . result {
190
+ let crd = match crds. iter ( ) . filter ( |c| c. status . is_some ( ) ) . find ( |c| {
191
+ c. status
192
+ . as_ref ( )
193
+ . unwrap ( )
194
+ . username
195
+ . eq ( & result. metric . usename )
196
+ } ) {
197
+ Some ( crd) => crd,
198
+ None => {
199
+ if result. metric . usename != "dmtr_blockfrost" {
200
+ warn ! ( user = result. metric. usename, "username doesnt have a crd" ) ;
201
+ }
202
+ continue ;
203
+ }
204
+ } ;
205
+
206
+ let dcu_per_second = match config. dcu_per_second . get ( & crd. spec . network ) {
207
+ Some ( dcu_per_second) => dcu_per_second,
208
+ None => {
209
+ let error = Error :: ConfigError ( format ! (
210
+ "dcu_per_second not configured to {} network" ,
211
+ & crd. spec. network
212
+ ) ) ;
213
+ error ! ( error = error. to_string( ) ) ;
214
+ state. metrics . metrics_failure ( & error) ;
215
+ continue ;
216
+ }
217
+ } ;
213
218
let total_exec_time = result. value * ( interval as f64 ) ;
214
219
215
220
let dcu = total_exec_time * dcu_per_second;
@@ -258,7 +263,7 @@ async fn collect_prometheus_metrics(
258
263
259
264
#[ derive( Debug , Deserialize ) ]
260
265
struct PrometheusDataResultMetric {
261
- user : String ,
266
+ usename : String ,
262
267
}
263
268
264
269
#[ derive( Debug , Deserialize ) ]
0 commit comments