将当前仿真资源配置与运行统计快照保存到场景库(按名称 upsert)。 请求体(JSON):: {"name": "场景名称"} # name 必填,最长 128 字符 响应返回完整场景记录。
()
| 1044 | @require_role('admin') |
| 1045 | @rate_limit(20, 60) |
| 1046 | def scenarios_save(): |
| 1047 | """将当前仿真资源配置与运行统计快照保存到场景库(按名称 upsert)。 |
| 1048 | |
| 1049 | 请求体(JSON):: |
| 1050 | |
| 1051 | {"name": "场景名称"} # name 必填,最长 128 字符 |
| 1052 | |
| 1053 | 响应返回完整场景记录。 |
| 1054 | """ |
| 1055 | body = request.get_json(silent=True) or {} |
| 1056 | name = str(body.get("name", "")).strip() |
| 1057 | if not name: |
| 1058 | return error_response("VALIDATION_ERROR", "缺少必填字段 'name'") |
| 1059 | try: |
| 1060 | stats = simulation_engine.get_stats() |
| 1061 | record = _scenario_store.save_scenario(name, simulation_engine, stats) |
| 1062 | except ValueError as ve: |
| 1063 | return error_response("VALIDATION_ERROR", str(ve)) |
| 1064 | except Exception: |
| 1065 | logger.exception("场景库保存失败") |
| 1066 | return error_response("INTERNAL_ERROR") |
| 1067 | return ok(record) |
| 1068 | |
| 1069 | |
| 1070 | @app.route('/api/scenarios/<path:name>', methods=['DELETE']) |
nothing calls this directly
no test coverage detected