@@ -5,17 +5,14 @@ use super::{BoxedIngress, BoxedMonitor, BoxedPlatform, StatusCode};
55use crate :: fs:: UserCreds ;
66use crate :: { fs:: Session , metrics:: ResponseStatusCode } ;
77use chrono:: DateTime ;
8- use miette:: miette;
98use miette:: { IntoDiagnostic , Result , bail} ;
109use multitool_sdk:: apis:: { Api , ApiClient , configuration:: Configuration } ;
1110use multitool_sdk:: models:: {
12- ApplicationDetails , ApplicationGroup , CreateResponseCodeMetricsRequest ,
13- CreateResponseCodeMetricsSuccess , DeploymentStateStatus , LoginRequest , LoginSuccess ,
14- WorkspaceSummary ,
11+ ApplicationDetails , ApplicationGroup , CreateResponseCodeMetricsRequest , DeploymentStateStatus ,
12+ LoginRequest , LoginSuccess , StatusCodeMetrics , WorkspaceSummary ,
1513} ;
1614use multitool_sdk:: models:: { DeploymentState , UpdateDeploymentStateRequest } ;
1715use tokio:: sync:: mpsc:: Sender ;
18- use tokio:: task:: JoinSet ;
1916use tokio:: time:: Duration ;
2017
2118pub ( crate ) use deploy_meta:: * ;
@@ -243,43 +240,37 @@ impl BackendClient {
243240 data : Vec < StatusCode > ,
244241 ) -> Result < ( ) > {
245242 trace ! ( "Uploading observations to backend" ) ;
246- let mut req_waiter = JoinSet :: new ( ) ;
243+ let mut status_codes = Vec :: new ( ) ;
247244
248245 for item in data {
249246 let group = match item. group ( ) {
250247 crate :: stats:: Group :: Control => ApplicationGroup :: Baseline ,
251248 crate :: stats:: Group :: Experimental => ApplicationGroup :: Canary ,
252249 } ;
253- let req_body = CreateResponseCodeMetricsRequest {
250+ let metrics = StatusCodeMetrics {
254251 app_group : group,
255252 status_2xx_count : item. get_count ( & ResponseStatusCode :: _2XX) as u32 ,
256253 status_4xx_count : item. get_count ( & ResponseStatusCode :: _4XX) as u32 ,
257254 status_5xx_count : item. get_count ( & ResponseStatusCode :: _5XX) as u32 ,
258255 } ;
259- let workspace_id = * meta. workspace_id ( ) ;
260- let application_id = * meta. application_id ( ) ;
261- let deployment_id = * meta. deployment_id ( ) ;
262- let cloned_client = self . clone ( ) ;
263- req_waiter. spawn ( async move {
264- cloned_client
265- . client
266- . response_code_metrics_api ( )
267- . create_response_code_metrics (
268- workspace_id,
269- application_id,
270- deployment_id,
271- req_body,
272- )
273- . await
274- } ) ;
256+
257+ status_codes. push ( metrics) ;
275258 }
276- let results = req_waiter. join_all ( ) . await ;
277- let result: std:: result:: Result < Vec < CreateResponseCodeMetricsSuccess > , _ > =
278- results. into_iter ( ) . collect ( ) ;
279- result
280- . map ( |_| ( ) )
281- . map_err ( |err| miette ! ( "Error uploading observation: {err}" ) )
282- . inspect ( |_| trace ! ( "Uploading observation to backend" ) )
259+
260+ let req_body = CreateResponseCodeMetricsRequest { status_codes } ;
261+
262+ let workspace_id = * meta. workspace_id ( ) ;
263+ let application_id = * meta. application_id ( ) ;
264+ let deployment_id = * meta. deployment_id ( ) ;
265+
266+ self . client
267+ . response_code_metrics_api ( )
268+ . create_response_code_metrics ( workspace_id, application_id, deployment_id, req_body)
269+ . await
270+ . into_diagnostic ( ) ?;
271+
272+ trace ! ( "Observations uploaded successfully" ) ;
273+ Ok ( ( ) )
283274 }
284275
285276 /// Return information about the workspace given its name.
0 commit comments