'表格api调用失败日志写入,失败原因写入'
This commit is contained in:
parent
93f12f8d5a
commit
104198e918
@ -19,4 +19,4 @@ sync_interval = 30
|
||||
# 企业微信应用ID
|
||||
agentid = 1000615
|
||||
# 接收人列表(用户ID,多个用|分隔,@all表示全部成员)
|
||||
receivers = 046364
|
||||
receivers = 04636 4
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
{
|
||||
"access_token": "LKCPU6VM1ckPpMUcnhs_71hNs0gn9zhRO5yZvSshEQ4_ISK4g74xBH8B9YBicKkOxdn9CIxvJ_Pt3Hg7L9tyKdgNibMproAE90aS9YWg83dAcjZHv-vt7_flcvMMC3ytOaHy1PiKuJZ2YWk137ojcXpYv_6GHLdXpiTMyyEPjmuWQrSmV0k20q3m_c_lD-XhX_uUrbGs9ag8d21JhJx-2H2H_yXHurXu3K1EdSbePdQ",
|
||||
"fetch_time": 1768366140.5126395
|
||||
"access_token": "wTDckSfv2tq6P_xM2lBqSirg8qEsUHRjLqisLLQxNX4ZDEhOxXhR9v5dLF0nV5obkkTSa87p1R_Cu-FLcVp439_xVYbFb66ENSmuJcTT-2sYoJ_4JkSbAPmfKy_8-6jqF995MOmJcoCbZU1PdB0QbLyIWe_U1du7nnZ3o0uqFdPI_cAVa1EWPLjWNvkxYrjW5rVWBIPwPvlK7VaACfsSzevBwvEO89-UbHBrZLn07dI",
|
||||
"fetch_time": 1768380602.07453
|
||||
}
|
||||
51
src/main.py
51
src/main.py
@ -20,6 +20,7 @@ from src.mapper import FieldMapper, BugCreationResult
|
||||
from src.token_manager import TokenManager
|
||||
from src.status_mapper import BugStatusMapper
|
||||
from src.wework_notifier import WeWorkNotifier
|
||||
from src.api_logger import get_logger
|
||||
|
||||
|
||||
def parse_arguments():
|
||||
@ -388,6 +389,17 @@ def create_tapd_bugs(valid_records: list, workspace_id: str, reporter: str, test
|
||||
error_msg = f"字段映射失败: {e}"
|
||||
print(f" ✗ {error_msg}")
|
||||
|
||||
# 记录失败日志
|
||||
logger = get_logger()
|
||||
logger.log_api_call(
|
||||
api_type="task1",
|
||||
operation="create_bug_failure",
|
||||
request_data={"record_id": record_id, "title": title},
|
||||
response_data={},
|
||||
success=False,
|
||||
error_message=error_msg
|
||||
)
|
||||
|
||||
result = BugCreationResult(
|
||||
record_id=record_id,
|
||||
success=False,
|
||||
@ -400,6 +412,17 @@ def create_tapd_bugs(valid_records: list, workspace_id: str, reporter: str, test
|
||||
error_msg = f"TAPD API调用失败: {e}"
|
||||
print(f" ✗ {error_msg}")
|
||||
|
||||
# 记录失败日志
|
||||
logger = get_logger()
|
||||
logger.log_api_call(
|
||||
api_type="task1",
|
||||
operation="create_bug_failure",
|
||||
request_data={"record_id": record_id, "title": title},
|
||||
response_data={},
|
||||
success=False,
|
||||
error_message=error_msg
|
||||
)
|
||||
|
||||
result = BugCreationResult(
|
||||
record_id=record_id,
|
||||
success=False,
|
||||
@ -412,6 +435,17 @@ def create_tapd_bugs(valid_records: list, workspace_id: str, reporter: str, test
|
||||
error_msg = f"未预期的错误: {type(e).__name__}: {e}"
|
||||
print(f" ✗ {error_msg}")
|
||||
|
||||
# 记录失败日志
|
||||
logger = get_logger()
|
||||
logger.log_api_call(
|
||||
api_type="task1",
|
||||
operation="create_bug_failure",
|
||||
request_data={"record_id": record_id, "title": title},
|
||||
response_data={},
|
||||
success=False,
|
||||
error_message=error_msg
|
||||
)
|
||||
|
||||
result = BugCreationResult(
|
||||
record_id=record_id,
|
||||
success=False,
|
||||
@ -638,11 +672,26 @@ def run_once(config_manager: ConfigManager, access_token: str, verbose: bool = F
|
||||
for invalid_record in validation_result['invalid_records']:
|
||||
record_data = invalid_record['record_data']
|
||||
missing_fields = invalid_record['missing_fields']
|
||||
error_msg = f"校验失败,缺失字段: {', '.join(missing_fields)}"
|
||||
|
||||
# 记录校验失败日志
|
||||
logger = get_logger()
|
||||
logger.log_api_call(
|
||||
api_type="task1",
|
||||
operation="validation_failure",
|
||||
request_data={
|
||||
"record_id": record_data.get('record_id', '未知'),
|
||||
"title": record_data.get('标题', '(无标题)')
|
||||
},
|
||||
response_data={},
|
||||
success=False,
|
||||
error_message=error_msg
|
||||
)
|
||||
|
||||
validation_failed_result = BugCreationResult(
|
||||
record_id=record_data.get('record_id', '未知'),
|
||||
success=False,
|
||||
error_message=f"校验失败,缺失字段: {', '.join(missing_fields)}"
|
||||
error_message=error_msg
|
||||
)
|
||||
validation_failed_results.append(validation_failed_result)
|
||||
|
||||
|
||||
45
src2/smartsheet.py
Normal file
45
src2/smartsheet.py
Normal file
@ -0,0 +1,45 @@
|
||||
"""
|
||||
任务二专用的智能表格API模块
|
||||
继承自任务一的 SmartSheetAPI,使用任务二专用的日志记录器
|
||||
|
||||
设计说明:
|
||||
- 继承 src.smartsheet.SmartSheetAPI 的所有功能
|
||||
- 重写 __init__ 方法,使用 get_task2_logger() 替代 get_logger()
|
||||
- 确保所有智能表格 API 调用日志写入 logs2/ 目录
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# 将项目根目录添加到 Python 路径
|
||||
project_root = Path(__file__).parent.parent
|
||||
sys.path.insert(0, str(project_root))
|
||||
|
||||
from src.smartsheet import SmartSheetAPI
|
||||
from src2.logger import get_task2_logger
|
||||
|
||||
|
||||
class SmartSheetAPITask2(SmartSheetAPI):
|
||||
"""任务二专用的智能表格API类"""
|
||||
|
||||
def __init__(self, access_token: str, docid: str, test_mode: bool = False):
|
||||
"""
|
||||
初始化智能表格API(任务二专用)
|
||||
|
||||
Args:
|
||||
access_token: 企业微信access_token
|
||||
docid: 智能表格文档ID
|
||||
test_mode: 是否启用测试模式(显示API返回结果)
|
||||
"""
|
||||
# 调用父类初始化
|
||||
super().__init__(access_token, docid, test_mode)
|
||||
|
||||
# 替换为任务二专用的日志记录器
|
||||
self.logger = get_task2_logger()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("=== 任务二智能表格API模块 ===\n")
|
||||
print("此模块继承自 src.smartsheet.SmartSheetAPI")
|
||||
print("使用任务二专用的日志记录器,日志写入 logs2/ 目录")
|
||||
print("\n请通过 SmartSheetSync 类使用此模块")
|
||||
@ -18,7 +18,7 @@ from typing import Dict, List, Any, Optional, Tuple
|
||||
project_root = Path(__file__).parent.parent
|
||||
sys.path.insert(0, str(project_root))
|
||||
|
||||
from src.smartsheet import SmartSheetAPI
|
||||
from src2.smartsheet import SmartSheetAPITask2
|
||||
from src2.link_parser import parse_tapd_link, extract_story_id
|
||||
from src2.logger import get_task2_logger
|
||||
|
||||
@ -58,7 +58,7 @@ class SmartSheetSync:
|
||||
docid: 智能表格文档ID
|
||||
test_mode: 是否启用测试模式
|
||||
"""
|
||||
self.api = SmartSheetAPI(access_token, docid, test_mode)
|
||||
self.api = SmartSheetAPITask2(access_token, docid, test_mode)
|
||||
self.logger = get_task2_logger()
|
||||
self.test_mode = test_mode
|
||||
|
||||
|
||||
@ -357,6 +357,18 @@ class SyncService:
|
||||
# 检查链接解析结果
|
||||
if not record_info["parse_success"]:
|
||||
record_result["error_message"] = record_info.get("parse_error", "链接解析失败")
|
||||
# 记录链接解析失败日志
|
||||
self.logger.log_api_call(
|
||||
api_type="task2",
|
||||
operation="link_parse_failure",
|
||||
request_data={
|
||||
"record_id": record_info["record_id"],
|
||||
"tapd_link": record_info["tapd_link"]
|
||||
},
|
||||
response_data={},
|
||||
success=False,
|
||||
error_message=record_result["error_message"]
|
||||
)
|
||||
return record_result
|
||||
|
||||
story_id = record_info["story_id"]
|
||||
@ -400,6 +412,18 @@ class SyncService:
|
||||
|
||||
except Exception as e:
|
||||
record_result["error_message"] = str(e)
|
||||
# 记录TAPD查询失败日志
|
||||
self.logger.log_api_call(
|
||||
api_type="task2",
|
||||
operation="sync_record_failure",
|
||||
request_data={
|
||||
"record_id": record_info["record_id"],
|
||||
"story_id": story_id
|
||||
},
|
||||
response_data={},
|
||||
success=False,
|
||||
error_message=record_result["error_message"]
|
||||
)
|
||||
|
||||
return record_result
|
||||
|
||||
@ -518,6 +542,19 @@ class SyncService:
|
||||
|
||||
except Exception as e:
|
||||
result["failed"] += 1
|
||||
error_msg = str(e)
|
||||
# 记录持续同步失败日志
|
||||
self.logger.log_api_call(
|
||||
api_type="task2",
|
||||
operation="continuous_sync_failure",
|
||||
request_data={
|
||||
"record_id": record_info["record_id"],
|
||||
"story_id": record_info["story_id"]
|
||||
},
|
||||
response_data={},
|
||||
success=False,
|
||||
error_message=error_msg
|
||||
)
|
||||
if self.test_mode:
|
||||
print(f" ✗ 记录 {record_info['record_id']} 更新失败: {e}")
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user