xfy 65a7b1226f style: 全项目格式规范化(cargo fmt)+ Docker daemon 断连容错
- 全项目 .rs 统一 cargo fmt 排版(换行/缩进/参数分行/导入排序)
- infra/docker: DOCKER_CLIENT 连接失败不 panic,降级返回 None
  (博客不依赖 Docker,panic=abort 下会导致整个进程崩溃)
- infra/mod: 去除多余空行
- database/mod: 模块声明按字母序重新排序
2026-07-15 17:22:06 +08:00

83 lines
2.8 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//! 代码运行接口Code Runner
//!
//! 三层架构的最上层 API 模块:
//! - [`mod@code_runner`] 本文件双目标server / wasm共享的可序列化数据结构。
//! - `progress`内存任务缓冲表DashMap + GCserver-only。
//! - `languages`:语言注册表与围栏代码块 info 解析server-only。
//! - `execute`Dioxus server functionStartExec / GetExecResultserver-only。
//!
//! 为避免 WASM 构建引入 server 依赖,数据结构在模块顶层无 cfg 门禁定义,
//! 而引用的 `ResourceLimits` 同样位于无门禁的 [`crate::infra::runner_config`]。
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::infra::runner_config::ResourceLimits;
/// 一次代码执行请求。
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct ExecRequest {
/// 语言标识(与 [`crate::api::code_runner::languages::LANGUAGES`] 的 key 对应)。
pub language: String,
/// 源代码文本。
pub source: String,
/// 作者/读者可覆盖的资源限制;最终仍会被 [`crate::infra::runner_config::clamp_limits`] 钳制。
pub overrides: Option<ResourceLimits>,
}
/// 执行状态枚举。
///
/// 既用于任务当前状态([`ExecTask::status`]),也用于最终结果([`ExecResult::status`])。
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
pub enum ExecStatus {
/// 已入队,等待并发槽位。
Queued,
/// 已获得槽位,容器运行中。
Running,
/// 正常结束且退出码为 0。
Success,
/// 超过 timeout_secs 被强制终止。
Timeout,
/// 触发内核 OOM killer。
OomKilled,
/// 容器执行出错(非 0 退出码)。
Error,
/// 系统层失败(拉起容器异常、排队超时等)。
Failed,
/// 触发速率限制。
RateLimited,
}
/// 一次执行的最终结果。
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct ExecResult {
pub status: ExecStatus,
pub stdout: String,
pub stderr: String,
pub exit_code: Option<i64>,
pub duration_ms: u64,
pub language: String,
}
/// 任务条目,供前端轮询查询执行进度。
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct ExecTask {
pub id: String,
pub status: ExecStatus,
/// 人类可读的当前阶段描述(如「启动容器」「执行完毕」)。
pub stage: String,
pub created_at: DateTime<Utc>,
/// 终态时填充。
pub result: Option<ExecResult>,
}
// execute.rs 含 server function需对双目标可见不能 cfg-gate其 server-only
// 依赖在文件内单独 gate。languages / progress 是纯 server 辅助,整体 gate。
pub mod execute;
#[cfg(feature = "server")]
pub mod languages;
#[cfg(feature = "server")]
pub mod progress;
#[cfg(feature = "server")]
pub mod sse;