增加中控接口调用日志记录
This commit is contained in:
@@ -11,6 +11,7 @@ class Manufacturing_Connect(http.Controller):
|
||||
|
||||
@http.route('/AutoDeviceApi/MachineToolGroup', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
|
||||
cors="*")
|
||||
@api_log('机床刀具组', requester='中控系统')
|
||||
def get_maintenance_tool_groups_Info(self, **kw):
|
||||
"""
|
||||
机床刀具组接口
|
||||
|
||||
@@ -27,6 +27,9 @@ def api_log(name=None, requester=None):
|
||||
|
||||
# 执行原始函数
|
||||
result = func(*args, **kwargs)
|
||||
origin_result = result
|
||||
if isinstance(result, str):
|
||||
result = json.loads(result)
|
||||
|
||||
# 计算响应时间
|
||||
end_time = datetime.now()
|
||||
@@ -41,7 +44,7 @@ def api_log(name=None, requester=None):
|
||||
'response_data': json.dumps(result, ensure_ascii=False),
|
||||
'remote_addr': remote_addr,
|
||||
'response_time': response_time,
|
||||
'status': result.get('code', 500),
|
||||
'status': result.get('code') or result.get('ErrorCode') or 500,
|
||||
'requester': requester,
|
||||
'responser': '智能工厂'
|
||||
}
|
||||
@@ -49,7 +52,7 @@ def api_log(name=None, requester=None):
|
||||
# 异步创建日志记录
|
||||
request.env['api.request.log'].sudo().with_context(tracking_disable=True).create(log_vals)
|
||||
|
||||
return result
|
||||
return origin_result
|
||||
|
||||
except Exception as e:
|
||||
_logger.error(f"API日志记录失败: {str(e)}")
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
from odoo import models, fields, api
|
||||
import json, ast
|
||||
import logging
|
||||
import requests
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ApiRequestLog(models.Model):
|
||||
@@ -16,3 +21,52 @@ class ApiRequestLog(models.Model):
|
||||
status = fields.Integer('状态码')
|
||||
requester = fields.Char('请求方')
|
||||
responser = fields.Char('响应方')
|
||||
|
||||
@api.model
|
||||
def log_request(self, method, url, name=None, responser=None, **kwargs):
|
||||
# Log the request
|
||||
request_headers = kwargs.get('headers', {})
|
||||
request_body = kwargs.get('json') or kwargs.get('params') or {}
|
||||
|
||||
_logger.info(f"Request: {method} {url} Headers: {request_headers} Body: {request_body}")
|
||||
|
||||
# Make the actual request
|
||||
response = requests.request(method, url, **kwargs)
|
||||
|
||||
# Log the response
|
||||
response_status = response.status_code
|
||||
response_headers = response.headers
|
||||
response_body = response.text
|
||||
response_time = response.elapsed.total_seconds()
|
||||
|
||||
_logger.info(f"Response: Status: {response_status} Headers: {response_headers} Body: {response_body}")
|
||||
|
||||
try:
|
||||
# 如果是字符串,先尝试用 ast.literal_eval 安全地转换成 Python 对象
|
||||
if isinstance(response_body, str):
|
||||
|
||||
response_body_obj = json.loads(response_body)
|
||||
else:
|
||||
response_body_obj = response_body
|
||||
|
||||
# 再使用 json.dumps 转换成标准的 JSON 字符串
|
||||
response_body = json.dumps(response_body_obj, ensure_ascii=False)
|
||||
except Exception as e:
|
||||
_logger.warning(f"转换 response_body 到标准 JSON 失败: {str(e)}")
|
||||
# 如果转换失败,保持原样
|
||||
|
||||
# Save to database
|
||||
self.sudo().create({
|
||||
'name': name,
|
||||
'path': url,
|
||||
'method': method,
|
||||
'request_data': request_body,
|
||||
'response_data': response_body,
|
||||
'remote_addr': None,
|
||||
'response_time': response_time,
|
||||
'status': response_status,
|
||||
'requester': '智能工厂',
|
||||
'responser': responser
|
||||
})
|
||||
|
||||
return response
|
||||
Reference in New Issue
Block a user