feat(saas): correlate mutation diagnostics
req: operations/001 req: operations/003 req: security/008
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use axum::body::Body;
|
||||
use axum::extract::{DefaultBodyLimit, Form, Query, State};
|
||||
use axum::http::{HeaderMap, StatusCode};
|
||||
use axum::http::{HeaderMap, HeaderValue, StatusCode};
|
||||
use axum::response::{IntoResponse, Response};
|
||||
use axum::routing::{get, post};
|
||||
use axum::Router;
|
||||
@@ -80,6 +80,7 @@ async fn create_project(
|
||||
Form(form): Form<BTreeMap<String, String>>,
|
||||
) -> Response {
|
||||
let started = Instant::now();
|
||||
let request_id = ctx.next_request_id();
|
||||
let bearer = headers
|
||||
.get("authorization")
|
||||
.and_then(|value| value.to_str().ok())
|
||||
@@ -96,17 +97,18 @@ async fn create_project(
|
||||
{
|
||||
let current_fingerprint = ui::BUILD_FINGERPRINT.0.to_string();
|
||||
if client_fingerprint != current_fingerprint {
|
||||
ctx.record_mutation("mismatch", started.elapsed());
|
||||
ctx.record_mutation(request_id.clone(), "mismatch", started.elapsed());
|
||||
return Response::builder()
|
||||
.status(StatusCode::CONFLICT)
|
||||
.header("content-type", "application/problem+json")
|
||||
.header("x-hemx-recovery", "reload")
|
||||
.header("x-hemx-fingerprint", current_fingerprint)
|
||||
.header("x-request-id", request_id.to_string())
|
||||
.body(Body::from("{\"code\":\"deployment-mismatch\"}"))
|
||||
.expect("deployment mismatch response");
|
||||
}
|
||||
}
|
||||
let (outcome, response) = match ctx.create_project_authorized(name, bearer, csrf, origin) {
|
||||
let (outcome, mut response) = match ctx.create_project_authorized(name, bearer, csrf, origin) {
|
||||
Ok(_) => (
|
||||
"succeeded",
|
||||
(StatusCode::SEE_OTHER, [("location", "/")], "").into_response(),
|
||||
@@ -128,7 +130,11 @@ async fn create_project(
|
||||
problem(StatusCode::SERVICE_UNAVAILABLE, "storage-unavailable"),
|
||||
),
|
||||
};
|
||||
ctx.record_mutation(outcome, started.elapsed());
|
||||
ctx.record_mutation(request_id.clone(), outcome, started.elapsed());
|
||||
response.headers_mut().insert(
|
||||
"x-request-id",
|
||||
HeaderValue::from_str(&request_id.to_string()).expect("generated request ID is a header"),
|
||||
);
|
||||
response
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user