""" System API Module 提供系统管理相关的API接口 """ from flask import jsonify, request from app.api.system import bp from app.models.result import success, failed import logging from app.core.system import ( check_neo4j_connection, check_system_health, get_system_info, get_system_config, validate_config, register_user, login_user, get_user_by_username ) from app.core.common.functions import translate_and_parse logger = logging.getLogger("app") # 健康检查接口 @bp.route('/health', methods=['GET']) def health_check(): """ 系统健康状态检查 检查关键依赖组件的连接状态 Returns: JSON: 系统健康状态信息 """ try: # 获取系统健康状态 status = check_system_health() return jsonify(success(status)) except Exception as e: logger.error(f"健康检查失败: {str(e)}") return jsonify(failed(str(e))) # 系统配置信息 @bp.route('/config', methods=['GET']) def system_config(): """ 获取系统配置信息 返回非敏感的系统配置项 Returns: JSON: 系统配置信息 """ try: # 获取系统配置信息 config_info = get_system_config() return jsonify(success(config_info)) except Exception as e: logger.error(f"获取系统配置失败: {str(e)}") return jsonify(failed(str(e))) # 系统信息接口 @bp.route('/info', methods=['GET']) def system_info(): """ 获取系统运行环境信息 包括操作系统、Python版本、资源使用情况等 Returns: JSON: 系统运行环境详细信息 """ try: # 获取系统详细信息 info = get_system_info() return jsonify(success(info)) except Exception as e: logger.error(f"获取系统信息失败: {str(e)}") return jsonify(failed(str(e))) # 配置验证接口 @bp.route('/config/validate', methods=['GET']) def config_validate(): """ 验证系统配置的有效性 检查必要的配置项是否存在且有效 Returns: JSON: 配置验证结果 """ try: is_valid, errors = validate_config() result = { "valid": is_valid, "errors": errors } return jsonify(success(result)) except Exception as e: logger.error(f"配置验证失败: {str(e)}") return jsonify(failed(str(e))) # 用户注册接口 @bp.route('/auth/register', methods=['POST']) def user_register(): """ 用户注册 请求参数: username: 用户名 password: 密码 Returns: JSON: 注册结果 """ try: # 获取请求参数 data = request.json username = data.get('username') password = data.get('password') # 参数验证 if not username or not password: return jsonify(failed("用户名和密码不能为空", code=400)) # 注册用户 success_flag, message = register_user(username, password) if success_flag: return jsonify(success(message="注册成功")) else: return jsonify(failed(message, code=400)) except Exception as e: logger.error(f"用户注册失败: {str(e)}") return jsonify(failed(str(e))) # 用户登录接口 @bp.route('/auth/login', methods=['POST']) def user_login(): """ 用户登录 请求参数: username: 用户名 password: 密码 Returns: JSON: 登录结果,包含用户信息 """ try: # 获取请求参数 data = request.json username = data.get('username') password = data.get('password') # 参数验证 if not username or not password: return jsonify(failed("用户名和密码不能为空", code=400)) # 登录验证 success_flag, result = login_user(username, password) if success_flag: return jsonify(success(result, "登录成功")) else: return jsonify(failed(result, code=401)) except Exception as e: logger.error(f"用户登录失败: {str(e)}") return jsonify(failed(str(e))) # 获取用户信息接口 @bp.route('/auth/user/', methods=['GET']) def get_user(username): """ 获取用户信息 Args: username: 用户名 Returns: JSON: 用户信息 """ try: user = get_user_by_username(username) if user: return jsonify(success(user)) else: return jsonify(failed("用户不存在", code=404)) except Exception as e: logger.error(f"获取用户信息失败: {str(e)}") return jsonify(failed(str(e))) # 翻译接口 @bp.route('/translate', methods=['POST']) def translate(): """ 翻译节点名称 请求参数: node_name: 需要翻译的节点名称 Returns: JSON: 翻译结果 """ try: # 获取请求参数 data = request.json node_name = data.get('node_name') # 参数验证 if not node_name: return jsonify(failed("node_name参数不能为空", code=400)) # 调用翻译函数 translated_result = translate_and_parse(node_name) # 返回翻译结果 result = { "original": node_name, "translated": translated_result if translated_result else node_name, "translated_list": translated_result } return jsonify(success(result, "翻译成功")) except Exception as e: logger.error(f"翻译失败: {str(e)}") return jsonify(failed(f"翻译失败: {str(e)}"))