Skip to content

Commit 2a559cb

Browse files
committed
Update response code sending with new BE format
1 parent 558408e commit 2a559cb

3 files changed

Lines changed: 24 additions & 33 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/adapters/backend/mod.rs

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,14 @@ use super::{BoxedIngress, BoxedMonitor, BoxedPlatform, StatusCode};
55
use crate::fs::UserCreds;
66
use crate::{fs::Session, metrics::ResponseStatusCode};
77
use chrono::DateTime;
8-
use miette::miette;
98
use miette::{IntoDiagnostic, Result, bail};
109
use multitool_sdk::apis::{Api, ApiClient, configuration::Configuration};
1110
use 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
};
1614
use multitool_sdk::models::{DeploymentState, UpdateDeploymentStateRequest};
1715
use tokio::sync::mpsc::Sender;
18-
use tokio::task::JoinSet;
1916
use tokio::time::Duration;
2017

2118
pub(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.

src/subsystems/controller/monitor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ const DEFAULT_MAX_BATCH_SIZE: usize = 512;
3131
/// For AWS Cloudwatch, they update their autocollcted metrics every
3232
/// minute. So polling every 30s cuts down on the time between
3333
/// when the data is uploaded and when we receive it.
34-
const DEFAULT_POLL_INTERVAL: Duration = Duration::from_secs(30);
34+
const DEFAULT_POLL_INTERVAL: Duration = Duration::from_secs(60);
3535
/// The frequency with which we emit data from the controller,
3636
/// (usually to go to the backend).
37-
const DEFAULT_EMIT_INTERVAL: Duration = Duration::from_secs(60);
37+
const DEFAULT_EMIT_INTERVAL: Duration = Duration::from_secs(30);
3838

3939
pub const MONITOR_CONTROLLER_SUBSYSTEM_NAME: &str = "controller/monitor";
4040

0 commit comments

Comments
 (0)