parent
a734c3c74b
commit
5bfe885140
4 changed files with 22 additions and 22 deletions
|
|
@ -77,17 +77,17 @@ pub async fn submit_build_request(
|
||||||
|
|
||||||
#[derive(Deserialize, JsonSchema)]
|
#[derive(Deserialize, JsonSchema)]
|
||||||
pub struct BuildStatusRequest {
|
pub struct BuildStatusRequest {
|
||||||
pub id: String,
|
pub build_request_id: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_build_status(
|
pub async fn get_build_status(
|
||||||
State(service): State<ServiceState>,
|
State(service): State<ServiceState>,
|
||||||
Path(request): Path<BuildStatusRequest>,
|
Path(BuildStatusRequest { build_request_id }): Path<BuildStatusRequest>,
|
||||||
) -> Result<Json<BuildStatusResponse>, (StatusCode, Json<ErrorResponse>)> {
|
) -> Result<Json<BuildStatusResponse>, (StatusCode, Json<ErrorResponse>)> {
|
||||||
// Get build request state
|
// Get build request state
|
||||||
let build_state = {
|
let build_state = {
|
||||||
let active_builds = service.active_builds.read().await;
|
let active_builds = service.active_builds.read().await;
|
||||||
active_builds.get(&request.id).cloned()
|
active_builds.get(&build_request_id).cloned()
|
||||||
};
|
};
|
||||||
|
|
||||||
let build_state = match build_state {
|
let build_state = match build_state {
|
||||||
|
|
@ -103,7 +103,7 @@ pub async fn get_build_status(
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get events for this build request
|
// Get events for this build request
|
||||||
let events = match service.event_log.get_build_request_events(&request.id, None).await {
|
let events = match service.event_log.get_build_request_events(&build_request_id, None).await {
|
||||||
Ok(events) => events.into_iter().map(|e| BuildEventSummary {
|
Ok(events) => events.into_iter().map(|e| BuildEventSummary {
|
||||||
event_id: e.event_id,
|
event_id: e.event_id,
|
||||||
timestamp: e.timestamp,
|
timestamp: e.timestamp,
|
||||||
|
|
@ -117,7 +117,7 @@ pub async fn get_build_status(
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(Json(BuildStatusResponse {
|
Ok(Json(BuildStatusResponse {
|
||||||
build_request_id: request.id,
|
build_request_id,
|
||||||
status: BuildGraphService::status_to_string(build_state.status),
|
status: BuildGraphService::status_to_string(build_state.status),
|
||||||
requested_partitions: build_state.requested_partitions,
|
requested_partitions: build_state.requested_partitions,
|
||||||
created_at: build_state.created_at,
|
created_at: build_state.created_at,
|
||||||
|
|
@ -128,17 +128,17 @@ pub async fn get_build_status(
|
||||||
|
|
||||||
#[derive(Deserialize, JsonSchema)]
|
#[derive(Deserialize, JsonSchema)]
|
||||||
pub struct CancelBuildRequest {
|
pub struct CancelBuildRequest {
|
||||||
pub id: String,
|
pub build_request_id: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn cancel_build_request(
|
pub async fn cancel_build_request(
|
||||||
State(service): State<ServiceState>,
|
State(service): State<ServiceState>,
|
||||||
Path(request): Path<CancelBuildRequest>,
|
Path(CancelBuildRequest { build_request_id }): Path<CancelBuildRequest>,
|
||||||
) -> Result<Json<serde_json::Value>, (StatusCode, Json<ErrorResponse>)> {
|
) -> Result<Json<serde_json::Value>, (StatusCode, Json<ErrorResponse>)> {
|
||||||
// Update build request state
|
// Update build request state
|
||||||
{
|
{
|
||||||
let mut active_builds = service.active_builds.write().await;
|
let mut active_builds = service.active_builds.write().await;
|
||||||
if let Some(build_state) = active_builds.get_mut(&request.id) {
|
if let Some(build_state) = active_builds.get_mut(&build_request_id) {
|
||||||
build_state.status = BuildRequestStatus::BuildRequestCancelled;
|
build_state.status = BuildRequestStatus::BuildRequestCancelled;
|
||||||
build_state.updated_at = current_timestamp_nanos();
|
build_state.updated_at = current_timestamp_nanos();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -153,7 +153,7 @@ pub async fn cancel_build_request(
|
||||||
|
|
||||||
// Log cancellation event
|
// Log cancellation event
|
||||||
let event = create_build_event(
|
let event = create_build_event(
|
||||||
request.id.clone(),
|
build_request_id.clone(),
|
||||||
crate::build_event::EventType::BuildRequestEvent(BuildRequestEvent {
|
crate::build_event::EventType::BuildRequestEvent(BuildRequestEvent {
|
||||||
status: BuildRequestStatus::BuildRequestCancelled as i32,
|
status: BuildRequestStatus::BuildRequestCancelled as i32,
|
||||||
requested_partitions: vec![],
|
requested_partitions: vec![],
|
||||||
|
|
@ -165,11 +165,11 @@ pub async fn cancel_build_request(
|
||||||
error!("Failed to log build request cancelled event: {}", e);
|
error!("Failed to log build request cancelled event: {}", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
info!("Build request {} cancelled", request.id);
|
info!("Build request {} cancelled", build_request_id);
|
||||||
|
|
||||||
Ok(Json(serde_json::json!({
|
Ok(Json(serde_json::json!({
|
||||||
"cancelled": true,
|
"cancelled": true,
|
||||||
"build_request_id": request.id
|
"build_request_id": build_request_id
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use crate::*;
|
||||||
use crate::event_log::{BuildEventLog, BuildEventLogError, create_build_event_log};
|
use crate::event_log::{BuildEventLog, BuildEventLogError, create_build_event_log};
|
||||||
use aide::{
|
use aide::{
|
||||||
axum::{
|
axum::{
|
||||||
routing::{get, get_with, post, delete},
|
routing::{get, post, delete},
|
||||||
ApiRouter,
|
ApiRouter,
|
||||||
},
|
},
|
||||||
openapi::OpenApi,
|
openapi::OpenApi,
|
||||||
|
|
@ -119,10 +119,10 @@ impl BuildGraphService {
|
||||||
// Create API router with all routes to generate OpenAPI spec
|
// Create API router with all routes to generate OpenAPI spec
|
||||||
let _ = ApiRouter::new()
|
let _ = ApiRouter::new()
|
||||||
.api_route("/api/v1/builds", post(handlers::submit_build_request))
|
.api_route("/api/v1/builds", post(handlers::submit_build_request))
|
||||||
.api_route("/api/v1/builds/{id}", get(handlers::get_build_status))
|
.api_route("/api/v1/builds/:build_request_id", get(handlers::get_build_status))
|
||||||
.api_route("/api/v1/builds/{id}", delete(handlers::cancel_build_request))
|
.api_route("/api/v1/builds/:build_request_id", delete(handlers::cancel_build_request))
|
||||||
.api_route("/api/v1/partitions/{ref}/status", get(handlers::get_partition_status))
|
.api_route("/api/v1/partitions/:ref/status", get(handlers::get_partition_status))
|
||||||
.api_route("/api/v1/partitions/{ref}/events", get(handlers::get_partition_events))
|
.api_route("/api/v1/partitions/:ref/events", get(handlers::get_partition_events))
|
||||||
.api_route("/api/v1/analyze", post(handlers::analyze_build_graph))
|
.api_route("/api/v1/analyze", post(handlers::analyze_build_graph))
|
||||||
.finish_api(&mut api);
|
.finish_api(&mut api);
|
||||||
|
|
||||||
|
|
@ -134,10 +134,10 @@ impl BuildGraphService {
|
||||||
|
|
||||||
let router = ApiRouter::new()
|
let router = ApiRouter::new()
|
||||||
.api_route("/api/v1/builds", post(handlers::submit_build_request))
|
.api_route("/api/v1/builds", post(handlers::submit_build_request))
|
||||||
.api_route("/api/v1/builds/{id}", get(handlers::get_build_status))
|
.api_route("/api/v1/builds/:build_request_id", get(handlers::get_build_status))
|
||||||
.api_route("/api/v1/builds/{id}", delete(handlers::cancel_build_request))
|
.api_route("/api/v1/builds/:build_request_id", delete(handlers::cancel_build_request))
|
||||||
.api_route("/api/v1/partitions/{ref}/status", get(handlers::get_partition_status))
|
.api_route("/api/v1/partitions/:ref/status", get(handlers::get_partition_status))
|
||||||
.api_route("/api/v1/partitions/{ref}/events", get(handlers::get_partition_events))
|
.api_route("/api/v1/partitions/:ref/events", get(handlers::get_partition_events))
|
||||||
.api_route("/api/v1/analyze", post(handlers::analyze_build_graph))
|
.api_route("/api/v1/analyze", post(handlers::analyze_build_graph))
|
||||||
.route("/api/v1/openapi.json", get(Self::openapi_spec))
|
.route("/api/v1/openapi.json", get(Self::openapi_spec))
|
||||||
.with_state(Arc::new(self))
|
.with_state(Arc::new(self))
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ for i in {1..60}; do
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "[WARN] Unknown status: $STATUS"
|
echo "[WARN] Unknown status: $STATUS"
|
||||||
sleep 2
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ for i in {1..30}; do
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "[WARN] Unknown status: $STATUS"
|
echo "[WARN] Unknown status: $STATUS"
|
||||||
sleep 2
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue