feat(api_client): 增加详细的API请求和响应日志记录

增加对test_sql_with_schema接口的详细日志记录功能,
包括传入数据和返回数据的完整信息,便于调试和问题排查。

fix(utils): 修复sqlParams为空时的处理逻辑

修改process_skill_response函数中对空sqlParams的处理,
避免在sqlParams为None时导致JSON解析错误,并注释掉默认参数设置逻辑。

chore(config): 更新环境配置和项目版本

更新多个项目的数据库ID、数据源ID和后端基础URL配置,
并将lzwcai-mcp-sqlexecutor版本从0.1.8升级到0.10。

chore(logger): 改进日志目录创建逻辑

修改LoggerConfig类中的日志目录创建方法,使用mkdir(parents=True, exist_ok=True)
确保所有父目录都被创建。
This commit is contained in:
2026-01-26 09:50:09 +08:00
parent 59a7f13781
commit a47ab6df07
6 changed files with 46 additions and 15 deletions

View File

@@ -128,6 +128,19 @@ class DataSourceAPIClient:
Exception: 请求失败时抛出 Exception: 请求失败时抛出
""" """
try: try:
# 详细记录传入的数据
logger.info("=" * 80)
logger.info("test_sql_with_schema 接口接收到的数据:")
logger.info(f"数据类型: {type(request_data)}")
logger.info(f"数据内容: {json.dumps(request_data, ensure_ascii=False, indent=2)}")
logger.info(f"数据源ID: {request_data.get('datasourceId')}")
logger.info(f"业务名称: {request_data.get('businessName')}")
logger.info(f"业务描述: {request_data.get('businessDescription')}")
logger.info(f"SQL模板: {request_data.get('sqlTemplate')}")
logger.info(f"参数定义: {request_data.get('parameters')}")
logger.info(f"测试参数: {request_data.get('testParams')}")
logger.info("=" * 80)
url = f"{self.base_url}/datasource/sqlExecutionLog/testSqlWithSchema" url = f"{self.base_url}/datasource/sqlExecutionLog/testSqlWithSchema"
# 构建请求头包含Content-Type # 构建请求头包含Content-Type
@@ -151,8 +164,19 @@ class DataSourceAPIClient:
# 解析JSON响应 # 解析JSON响应
data = response.json() data = response.json()
# 详细记录返回的数据
logger.info("=" * 80)
logger.info("test_sql_with_schema 接口返回的数据:")
logger.info(f"HTTP状态码: {response.status_code}")
logger.info(f"响应数据类型: {type(data)}")
logger.info(f"响应数据内容: {json.dumps(data, ensure_ascii=False, indent=2)}")
if isinstance(data, dict):
logger.info(f"响应code: {data.get('code')}")
logger.info(f"响应msg: {data.get('msg')}")
logger.info(f"响应data: {data.get('data')}")
logger.info("=" * 80)
logger.info(f"测试SQL API调用成功") logger.info(f"测试SQL API调用成功")
logger.debug(f"响应数据: {json.dumps(data, ensure_ascii=False, indent=2)}")
return data return data
@@ -267,7 +291,8 @@ def process_skill_response(response: Dict[str, Any]) -> List[Dict[str, Any]]:
queries = [] queries = []
for skill in data_list: for skill in data_list:
# 解析sqlParams字符串为JSON对象 # 解析sqlParams字符串为JSON对象
sql_params = json.loads(skill.get("sqlParams", "{}")) sql_params_str = skill.get("sqlParams") or "{}"
sql_params = json.loads(sql_params_str)
# 判断sqlParams是否为空对象 # 判断sqlParams是否为空对象
is_empty_params = ( is_empty_params = (
@@ -278,10 +303,10 @@ def process_skill_response(response: Dict[str, Any]) -> List[Dict[str, Any]]:
len(sql_params.get("required", [])) == 0 len(sql_params.get("required", [])) == 0
) )
# 如果是空对象使用默认的员工ID参数 # # 如果是空对象使用默认的员工ID参数
if is_empty_params: # if is_empty_params:
logger.info(f"技能 {skill.get('name')} (ID: {skill.get('id')}) 的sqlParams为空使用默认员工ID参数") # logger.info(f"技能 {skill.get('name')} (ID: {skill.get('id')}) 的sqlParams为空使用默认员工ID参数")
sql_params = default_employee_schema # sql_params = default_employee_schema
# 映射字段 # 映射字段
query = { query = {

View File

@@ -29,8 +29,8 @@ class LoggerConfig:
project_root = Path(__file__).parent.parent project_root = Path(__file__).parent.parent
self.logs_dir = project_root / "logs" self.logs_dir = project_root / "logs"
# 创建日志目录 # 创建日志目录(包括父目录)
self.logs_dir.mkdir(exist_ok=True) self.logs_dir.mkdir(parents=True, exist_ok=True)
# 日志格式 # 日志格式
self.log_format = '%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s' self.log_format = '%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s'

View File

@@ -2,8 +2,13 @@
Entry point for lzwcai-mcp-sqlexecutor Entry point for lzwcai-mcp-sqlexecutor
Runs the MCP server for SQL query execution Runs the MCP server for SQL query execution
""" """
import os
os.environ["databaseId"] = "12"
os.environ["skillId"] = "2013848312313335809"
os.environ["backendBaseUrl"] = "http://192.168.11.24:8088"
if __name__ == "__main__": if __name__ == "__main__":
# Import and run the actual MCP server # Import and run the actual MCP server
from lzwcai_mcp_sqlexecutor.main import main from lzwcai_mcp_sqlexecutor.main import main
main() main()

View File

@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project] [project]
name = "lzwcai-mcp-sqlexecutor" name = "lzwcai-mcp-sqlexecutor"
version = "0.1.8" version = "0.1.10"
description = "MCP server for executing business SQL queries with dynamic tool generation" description = "MCP server for executing business SQL queries with dynamic tool generation"
readme = "README.md" readme = "README.md"
requires-python = ">=3.13" requires-python = ">=3.13"

View File

@@ -4,9 +4,9 @@ Runs the MCP server for manufacturing data intelligence
""" """
import os import os
os.environ["databaseId"] = "19" os.environ["databaseId"] = "57"
os.environ["datasourceId"] = "19" os.environ["datasourceId"] = "57"
os.environ["backendBaseUrl"] = "http://192.168.11.24:8088" os.environ["backendBaseUrl"] = "http://192.167.30.2:8088"
if __name__ == "__main__": if __name__ == "__main__":
# Import and run the actual MCP server # Import and run the actual MCP server
from lzwcai_mcpskills_mfg_data_agent.main import main from lzwcai_mcpskills_mfg_data_agent.main import main

View File

@@ -4,9 +4,10 @@ Runs the MCP server for manufacturing data intelligence
""" """
import os import os
os.environ["databaseId"] = "19"
os.environ["datasourceId"] = "19" os.environ["databaseId"] = "57"
os.environ["backendBaseUrl"] = "http://192.168.11.24:8088" os.environ["datasourceId"] = "57"
os.environ["backendBaseUrl"] = "http://192.167.30.2:8088"
if __name__ == "__main__": if __name__ == "__main__":
# Import and run the actual MCP server # Import and run the actual MCP server
from lzwcai_mcpskills_mfg_data_agentv2.main import main from lzwcai_mcpskills_mfg_data_agentv2.main import main