relay_server/endpoints/
batch_metrics.rs

1use axum::http::StatusCode;
2use axum::response::IntoResponse;
3use serde::{Deserialize, Serialize};
4
5use crate::extractors::{ReceivedAt, SignedBytes};
6use crate::service::ServiceState;
7use crate::services::processor::{BucketSource, ProcessBatchedMetrics};
8
9#[derive(Debug, Serialize, Deserialize)]
10struct SendMetricsResponse {}
11
12pub async fn handle(
13    state: ServiceState,
14    ReceivedAt(received_at): ReceivedAt,
15    body: SignedBytes,
16) -> impl IntoResponse {
17    if !body.relay.internal {
18        return StatusCode::FORBIDDEN.into_response();
19    }
20
21    state.processor().send(ProcessBatchedMetrics {
22        payload: body.body,
23        source: BucketSource::Internal,
24        received_at,
25        sent_at: None,
26    });
27
28    (StatusCode::ACCEPTED, axum::Json(SendMetricsResponse {})).into_response()
29}