18 KiB
GasFlux Web API 端点参考
概述
GasFlux Web API 是一个基于 Flask 的 RESTful API,用于上传数据文件、执行气体通量分析处理,并下载处理结果。
基础信息:
- 基础 URL:
http://localhost:5000 - 认证: 无需认证
- 数据格式: JSON
- 文件大小限制: 100MB
- 支持的文件类型:
.xlsx,.xls,.yaml,.yml
🔍 监控和健康检查
1. 获取健康状态
端点: GET /health
描述: 获取 API 的健康状态、系统信息和性能指标。
响应示例 (200):
{
"code": 200,
"message": "健康检查完成",
"data": {
"status": "healthy",
"version": "1.0.0",
"timestamp": 1705257600.123,
"uptime": "2h 30m 15s",
"storage": {
"uploads_writable": true,
"outputs_writable": true
},
"tasks": {
"active_count": 2,
"total_tracked": 15,
"total_processed": 13,
"success_rate_percent": 92.31
},
"performance": {
"requests_per_second": 0.08,
"avg_response_time_ms": 234.56,
"error_rate_percent": 1.5
}
}
}
响应示例 (503):
{
"code": 503,
"message": "服务不可用",
"data": {
"status": "degraded",
"version": "1.0.0",
"timestamp": 1705257600.123,
"uptime": "1h 30m 45s",
"storage": {
"uploads_writable": true,
"outputs_writable": true
},
"tasks": {
"active_count": 0,
"total_tracked": 5,
"total_processed": 3,
"success_rate_percent": 60.0
},
"performance": {
"requests_per_second": 0.12,
"avg_response_time_ms": 145.67,
"error_rate_percent": 50.0
},
"issues": [
"错误率过高 (50.0%)",
"活跃任务数量过多 (25)"
]
}
}
状态码:
200: API 健康503: API 不健康
2. 获取系统统计信息
端点: GET /stats
描述: 获取详细的 API 统计信息、性能指标和系统监控数据。
响应示例 (200):
{
"code": 200,
"message": "统计信息获取成功",
"data": {
"summary": {
"uptime_seconds": 3600.5,
"uptime_formatted": "1h 0m 0s",
"requests_total": 150,
"requests_per_second": 0.04,
"error_rate_percent": 2.0,
"active_tasks": 1
},
"requests": {
"by_method": {
"GET": 120,
"POST": 30
},
"by_status": {
"200": 145,
"400": 3,
"500": 2
},
"top_endpoints": {
"/task/abc123": 45,
"/health": 30,
"/": 25
}
},
"tasks": {
"total_created": 25,
"total_completed": 20,
"total_failed": 2,
"success_rate_percent": 90.91,
"by_status": {
"pending": 1,
"processing": 1,
"completed": 20,
"failed": 2
}
},
"performance": {
"avg_response_time_ms": 245.67,
"max_response_time_ms": 1250.34,
"min_response_time_ms": 12.45
},
"system": {
"memory_usage_percent": 45.2,
"memory_used_gb": 7.3,
"memory_total_gb": 16.0,
"disk_usage_percent": 23.1,
"disk_used_gb": 46.8,
"disk_total_gb": 203.2
},
"recent_tasks": [
{
"task_id": "abc123-def456",
"status": "completed",
"age_seconds": 45.2,
"message": "处理完成成功"
}
]
}
}
状态码:
200: 成功
3. 重置统计信息
端点: POST /stats/reset
描述: 重置所有 API 统计数据(管理员功能)。
响应示例 (200):
{
"code": 200,
"message": "统计信息重置成功",
"data": {
"timestamp": 1705257600.123
}
}
状态码:
200: 成功
4. 获取配置信息
端点: GET /config
描述: 获取当前应用配置信息和支持的环境变量。
响应示例 (200):
{
"code": 200,
"message": "配置信息获取成功",
"data": {
"configuration": {
"host": "0.0.0.0",
"port": 5000,
"debug": false,
"base_dir": "/app",
"upload_folder": "/app/web_api_data/uploads",
"output_folder": "/app/web_api_data/outputs",
"max_content_length": 104857600,
"log_level": "INFO",
"log_file": "logs/gasflux_api.log",
"cors_origins": ["*"],
"task_cleanup_interval": 3600,
"max_task_age": 86400,
"threads": 8,
"connection_limit": 100,
"channel_timeout": 300
},
"environment_variables": {
"supported": [
"GASFLUX_HOST", "GASFLUX_PORT", "GASFLUX_DEBUG",
"GASFLUX_UPLOAD_FOLDER", "GASFLUX_OUTPUT_FOLDER",
"GASFLUX_MAX_CONTENT_LENGTH", "GASFLUX_LOG_LEVEL",
"GASFLUX_LOG_FILE", "GASFLUX_CORS_ORIGINS",
"GASFLUX_TASK_CLEANUP_INTERVAL", "GASFLUX_MAX_TASK_AGE",
"GASFLUX_THREADS", "GASFLUX_CONNECTION_LIMIT",
"GASFLUX_CHANNEL_TIMEOUT"
],
"current_values": {
"GASFLUX_HOST": "0.0.0.0",
"GASFLUX_PORT": "5000",
"GASFLUX_DEBUG": "false"
}
}
}
}
状态码:
200: 成功
📤 文件上传和管理
5. 文件上传和处理
端点: POST /upload
描述: 上传数据文件并启动异步处理任务。
请求参数 (multipart/form-data):
file(必需): 数据文件 (.xlsx 或 .xls 格式)config(可选): 配置文件 (.yaml 或 .yml 格式)
响应示例 (202):
{
"code": 202,
"message": "任务已接受并加入处理队列",
"data": {
"status": "accepted",
"job_id": "abc123-def456-ghi789",
"task_status_url": "/task/abc123-def456-ghi789"
}
}
错误响应示例 (400):
{
"code": 400,
"message": "无效的数据文件类型。只允许 .xlsx 和 .xls 格式。",
"data": {}
}
错误响应示例 (413):
{
"code": 413,
"message": "文件过大。最大尺寸为 100MB。",
"data": {}
}
状态码:
202: 任务已接受400: 请求参数错误413: 文件过大
📊 任务管理和监控
6. 分页查询任务列表
端点: GET /tasks
描述: 分页查询所有任务,支持按状态过滤、排序和分页。返回体为前端友好的瘦身结构:仅包含任务状态信息;当任务已完成时会包含 downloads 直达下载链接。
查询参数:
page(可选): 页码 (默认: 1)page_size(可选): 每页任务数量 (默认: 20, 最大: 100)sort_by(可选): 排序字段 ('created_at', 'updated_at', 'status') (默认: 'updated_at')sort_order(可选): 排序顺序 ('asc', 'desc') (默认: 'desc')status(可选): 按任务状态过滤,支持多个状态用逗号分隔
响应示例 (200):
{
"code": 200,
"message": "任务列表查询成功",
"data": {
"tasks": [
{
"task_id": "abc123-def456-ghi789",
"status": "completed",
"message": "Processing completed successfully",
"updated_at": 1705257700.456,
"downloads": {
"data_xlsx": "/download/abc123-def456-ghi789/08_34_01_5m.processed_data.xlsx",
"report_ch4": "/download/abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html",
"report_co2": "/download/abc123-def456-ghi789/08_34_01_5m.processed_co2_report.html",
"config": "/download/abc123-def456-ghi789/08_34_01_5m.processed_config.yaml",
"metadata": "/download/abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json"
}
},
{
"task_id": "xyz789-abc123-def456",
"status": "processing",
"message": "正在进行数据分析...",
"updated_at": 1705257650.321
}
],
"total": 25,
"page": 1,
"page_size": 20,
"total_pages": 2,
"has_next": true,
"has_prev": false
}
}
状态码:
200: 成功400: 参数无效
7. 获取任务池统计信息
端点: GET /tasks/stats
描述: 获取任务池的统计信息,包括各状态任务数量、活跃任务数等。
响应示例 (200):
{
"code": 200,
"message": "任务池统计信息查询成功",
"data": {
"total_tasks": 25,
"status_counts": {
"pending": 3,
"processing": 2,
"completed": 18,
"failed": 2
},
"active_tasks": 2,
"queued_tasks": 3,
"completed_tasks": 18,
"failed_tasks": 2
}
}
状态码:
200: 成功
8. 获取活跃任务列表
端点: GET /tasks/active
描述: 获取当前正在处理的任务列表(瘦身结构)。当列表中包含已完成任务时会附带 downloads 直达下载链接。
响应示例 (200):
{
"code": 200,
"message": "活跃任务查询成功",
"data": {
"active_tasks": [
{
"task_id": "abc123-def456-ghi789",
"status": "processing",
"message": "正在生成报告...",
"updated_at": 1705257650.321
},
{
"task_id": "completed-task-123",
"status": "completed",
"message": "Processing completed successfully",
"updated_at": 1705257550.456,
"downloads": {
"data_xlsx": "/download/completed-task-123/processed_data.xlsx",
"report_html": "/download/completed-task-123/data_report.html"
}
}
],
"count": 2
}
}
状态码:
200: 成功
9. 获取队列任务列表
端点: GET /tasks/queue
描述: 获取等待处理的任务队列(瘦身结构)。当列表中包含已完成任务时会附带 downloads 直达下载链接。
响应示例 (200):
{
"code": 200,
"message": "队列任务查询成功",
"data": {
"queued_tasks": [
{
"task_id": "xyz789-abc123-def456",
"status": "pending",
"message": "等待处理",
"updated_at": 1705257400.123
},
{
"task_id": "completed-queued-task",
"status": "completed",
"message": "Processing completed successfully",
"updated_at": 1705257450.321,
"downloads": {
"data_xlsx": "/download/completed-queued-task/processed_data.xlsx",
"report_html": "/download/completed-queued-task/analysis_report.html"
}
}
],
"count": 2,
"queue_position_info": "任务按创建时间排序,较早的任务优先处理"
}
}
状态码:
200: 成功
10. 查询任务状态
端点: GET /task/{task_id}
描述: 查询异步处理任务的当前状态和进度信息。
路径参数:
task_id: 任务 ID (UUID 格式)
响应示例 - 处理中 (200):
{
"code": 200,
"message": "任务查询成功",
"data": {
"task_id": "abc123-def456-ghi789",
"status": "processing",
"message": "GasFlux 分析完成,正在生成报告...",
"updated_at": 1705257600.123
}
}
响应示例 - 处理完成 (200):
{
"code": 200,
"message": "任务查询成功",
"data": {
"task_id": "abc123-def456-ghi789",
"status": "completed",
"message": "处理完成成功",
"updated_at": 1705257600.123,
"results": [
{
"name": "08_34_01_5m.processed_ch4_report.html",
"rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html",
"size": 245760,
"type": "report"
},
{
"name": "08_34_01_5m.processed_data.xlsx",
"rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_data.xlsx",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_data.xlsx",
"size": 153600,
"type": "data"
},
{
"name": "08_34_01_5m.processed_config.yaml",
"rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_config.yaml",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_config.yaml",
"size": 2048,
"type": "config"
},
{
"name": "08_34_01_5m.processed_output_vars.json",
"rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json",
"size": 4096,
"type": "metadata"
}
],
"downloads": {
"data_xlsx": "/download/abc123-def456-ghi789/08_34_01_5m.processed_data.xlsx",
"report_ch4": "/download/abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html",
"report_co2": "/download/abc123-def456-ghi789/08_34_01_5m.processed_co2_report.html",
"config": "/download/abc123-def456-ghi789/08_34_01_5m.processed_config.yaml",
"metadata": "/download/abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json"
}
}
}
响应示例 - 任务不存在 (404):
{
"code": 404,
"message": "任务未找到",
"data": {}
}
状态码:
200: 成功404: 任务不存在
11. 更新任务状态
端点: PUT /task/{task_id}
描述: 更新任务的状态、信息或优先级。
路径参数:
task_id: 任务 ID (UUID 格式)
请求参数 (JSON):
status(可选): 新的任务状态message(可选): 状态消息或错误描述priority(可选): 任务优先级 (normal/high/low)
响应示例 (200):
{
"code": 200,
"message": "任务更新成功",
"data": {
"task_id": "abc123-def456-ghi789",
"status": "updated",
"task_info": {
"status": "completed",
"message": "手动标记为完成",
"updated_at": 1705257600.123,
"priority": "normal"
}
}
}
错误响应示例 (404):
{
"code": 404,
"message": "任务未找到",
"data": {}
}
错误响应示例 (400):
{
"code": 400,
"message": "无效状态。必须是以下之一: pending, processing, completed, failed",
"data": {}
}
状态码:
200: 成功400: 无效请求404: 任务不存在
12. 删除任务
端点: DELETE /task/{task_id}
描述: 删除任务及其所有相关的文件和数据。
路径参数:
task_id: 任务 ID (UUID 格式)
响应示例 (200):
{
"code": 200,
"message": "任务及相关文件删除成功",
"data": {
"task_id": "abc123-def456-ghi789",
"status": "deleted",
"details": {
"folders_deleted": 1,
"total_size_deleted": 307200,
"task_status": "completed"
}
}
}
错误响应示例 (404):
{
"code": 404,
"message": "任务未找到",
"data": {}
}
错误响应示例 (409):
{
"code": 409,
"message": "无法删除当前正在处理或等待处理的任务",
"data": {
"task_status": "processing"
}
}
状态码:
200: 成功404: 任务不存在409: 任务正在处理
📋 报告管理和查询
13. 分页查询已生成报告
端点: GET /reports
描述: 分页查询所有已生成的处理报告,支持排序和过滤。
查询参数:
page(可选): 页码 (默认: 1)per_page(可选): 每页报告数量 (默认: 20, 最大: 100)sort_by(可选): 排序字段 (默认: created_at)sort_order(可选): 排序顺序 (默认: desc)status(可选): 按任务状态过滤
响应示例 (200):
{
"code": 200,
"message": "报告列表获取成功",
"data": {
"reports": [
{
"task_id": "abc123-def456-ghi789",
"report_name": "08_34_01_5m",
"status": "completed",
"created_at": 1705257600.123,
"file_count": 4,
"total_size": 307200,
"processing_time_seconds": 125.67,
"main_report": {
"name": "08_34_01_5m.processed_ch4_report.html",
"size": 245760,
"type": "report",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_ch4_report.html"
},
"all_files": [
{
"name": "08_34_01_5m.processed_ch4_report.html",
"size": 245760,
"type": "report",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_ch4_report.html"
},
{
"name": "08_34_01_5m.processed_data.csv",
"size": 153600,
"type": "data",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_data.csv"
},
{
"name": "08_34_01_5m.processed_config.yaml",
"size": 2048,
"type": "config",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_config.yaml"
},
{
"name": "08_34_01_5m.processed_output_vars.json",
"size": 4096,
"type": "metadata",
"download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_output_vars.json"
}
],
"run_directory": "abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run"
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total_reports": 45,
"total_pages": 3,
"has_next": true,
"has_prev": false
},
"filters": {
"sort_by": "created_at",
"sort_order": "desc",
"status": null
}
}
}
错误响应示例 (400):
{
"code": 400,
"message": "Invalid parameter: per_page must be between 1 and 100",
"data": {}
}
状态码:
200: 成功400: 参数无效
📁 文件下载
14. 下载处理结果
端点: GET /download/{filename}
描述: 下载处理后的结果文件,支持传入完整文件路径。
路径参数:
filename: 文件的完整路径或相对路径 (包含任务ID)
状态码:
200: 成功下载文件403: 访问被拒绝404: 文件不存在400: 路径不是文件
🌐 Web 界面
15. Web 管理界面
端点: GET /
描述: 访问用户友好的 Web 界面,支持文件上传、任务监控和结果下载。
状态码:
200: 成功
最后更新: 2026年1月29日
GasFlux Web API 版本: 1.0.0