@@ -117,29 +117,30 @@ pub async fn run_metrics_collector(state: Arc<State>) {
117
117
tokio:: time:: sleep ( config. metrics_delay ) . await ;
118
118
119
119
let end = Utc :: now ( ) ;
120
- let start = ( end - last_execution) . num_seconds ( ) ;
120
+ let interval = ( end - last_execution) . num_seconds ( ) ;
121
121
122
122
last_execution = end;
123
123
124
124
let query = format ! (
125
- "sum by (consumer, route, tier) (increase(ogmios_proxy_ws_total_frame[{start }s] @ {}))" ,
125
+ "sum by (consumer, route, tier) (avg_over_time(ogmios_proxy_total_frame[{interval }s] @ {}))" ,
126
126
end. timestamp_millis( ) / 1000
127
127
) ;
128
128
129
- let result = client
129
+ let response = match client
130
130
. get ( format ! ( "{}/query?query={query}" , config. prometheus_url) )
131
131
. send ( )
132
- . await ;
133
-
134
- if let Err ( err) = result {
135
- error ! ( error = err. to_string( ) , "error to make prometheus request" ) ;
136
- state
137
- . metrics
138
- . metrics_failure ( & Error :: HttpError ( err. to_string ( ) ) ) ;
139
- continue ;
140
- }
132
+ . await
133
+ {
134
+ Ok ( response) => response,
135
+ Err ( err) => {
136
+ error ! ( error = err. to_string( ) , "error to make prometheus request" ) ;
137
+ state
138
+ . metrics
139
+ . metrics_failure ( & Error :: HttpError ( err. to_string ( ) ) ) ;
140
+ continue ;
141
+ }
142
+ } ;
141
143
142
- let response = result. unwrap ( ) ;
143
144
let status = response. status ( ) ;
144
145
if status. is_client_error ( ) || status. is_server_error ( ) {
145
146
error ! ( status = status. to_string( ) , "request status code fail" ) ;
@@ -176,25 +177,27 @@ pub async fn run_metrics_collector(state: Arc<State>) {
176
177
let network_captures = network_captures. unwrap ( ) ;
177
178
let network = network_captures. get ( 1 ) . unwrap ( ) . as_str ( ) ;
178
179
179
- let dcu_per_frame = config. dcu_per_frame . get ( network) ;
180
- if dcu_per_frame . is_none ( ) {
180
+ let dcu_per_second = config. dcu_per_second . get ( network) ;
181
+ if dcu_per_second . is_none ( ) {
181
182
let error = Error :: ConfigError ( format ! (
182
- "dcu_per_frame not configured to {} network" ,
183
+ "dcu_per_package not configured to {} network" ,
183
184
network
184
185
) ) ;
185
186
error ! ( error = error. to_string( ) ) ;
186
187
state. metrics . metrics_failure ( & error) ;
187
188
continue ;
188
189
}
189
- let dcu_per_frame = dcu_per_frame. unwrap ( ) ;
190
190
191
- let dcu = result . value * dcu_per_frame ;
192
- state . metrics . count_dcu_consumed ( project , network , dcu ) ;
191
+ let dcu_per_second = dcu_per_second . unwrap ( ) ;
192
+ let total_exec_time = result . value * ( interval as f64 ) ;
193
193
194
+ let dcu = total_exec_time * dcu_per_second;
195
+
196
+ state. metrics . count_dcu_consumed ( project, network, dcu) ;
194
197
if let Some ( tier) = result. metric . tier {
195
198
state
196
199
. metrics
197
- . count_usage ( project, resource_name, & tier, result . value ) ;
200
+ . count_usage ( project, resource_name, & tier, total_exec_time ) ;
198
201
}
199
202
}
200
203
}
0 commit comments