补充 release SpacetimeDB 健康检查与巡检防回退
增加 SpacetimeDB 阶段化健康检查与 /readyz 阶段输出 记录 procedure/reducer/read 失败的阶段和耗时 补充 release 健康巡检 systemd timer 与生产 ops 预检 同步 API 构建部署、provision 脚本和运维文档
This commit is contained in:
@@ -269,6 +269,7 @@ mod tests {
|
||||
};
|
||||
use reqwest::Client;
|
||||
use serde_json::Value;
|
||||
use spacetime_client::{SpacetimeClientHealthSnapshot, SpacetimeClientStage};
|
||||
use time::OffsetDateTime;
|
||||
use tokio::net::TcpListener;
|
||||
use tower::ServiceExt;
|
||||
@@ -724,6 +725,45 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn readyz_reports_spacetime_health_stage() {
|
||||
let state = AppState::new(AppConfig::default()).expect("state should build");
|
||||
state.set_test_spacetime_health(SpacetimeClientHealthSnapshot {
|
||||
ok: false,
|
||||
stage: SpacetimeClientStage::ProcedureResult,
|
||||
checked_at_micros: 1_713_680_000_000_000,
|
||||
elapsed_ms: 2_000,
|
||||
timeout_ms: 2_000,
|
||||
error: Some("SpacetimeDB procedure 调用超时".to_string()),
|
||||
last_success_at_micros: Some(1_713_679_999_000_000),
|
||||
last_error: Some("SpacetimeDB procedure 调用超时".to_string()),
|
||||
});
|
||||
let app = build_router(state);
|
||||
|
||||
let response = app
|
||||
.oneshot(
|
||||
Request::builder()
|
||||
.uri("/readyz")
|
||||
.header("x-request-id", "req-ready-spacetime")
|
||||
.body(Body::empty())
|
||||
.expect("readyz request should build"),
|
||||
)
|
||||
.await
|
||||
.expect("readyz request should succeed");
|
||||
|
||||
assert_eq!(response.status(), StatusCode::SERVICE_UNAVAILABLE);
|
||||
let body = read_json_response(response).await;
|
||||
assert_eq!(body["error"]["details"]["reason"], "spacetime_unhealthy");
|
||||
assert_eq!(
|
||||
body["error"]["details"]["spacetime"]["stage"],
|
||||
"procedure_result"
|
||||
);
|
||||
assert_eq!(
|
||||
body["error"]["details"]["spacetime"]["timeoutMs"],
|
||||
Value::from(2_000)
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn creative_agent_draft_edit_rejects_unconfirmed_template_session() {
|
||||
let app = build_internal_creative_agent_app();
|
||||
|
||||
Reference in New Issue
Block a user