增加日志
This commit is contained in:
@@ -2,10 +2,12 @@ import json
|
|||||||
from odoo import http
|
from odoo import http
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
from odoo.addons.sf_machine_connect.models.ftp_operate import transfer_nc_files
|
from odoo.addons.sf_machine_connect.models.ftp_operate import transfer_nc_files
|
||||||
|
from odoo.addons.sf_base.controllers.controllers import api_log
|
||||||
|
|
||||||
class MainController(http.Controller):
|
class MainController(http.Controller):
|
||||||
|
|
||||||
@http.route('/api/manual_download_program', type='json', methods=['POST'], auth='public', cors='*')
|
@http.route('/api/manual_download_program', type='json', methods=['POST'], auth='public', cors='*')
|
||||||
|
@api_log('人工线下加工编程文件传输', requester='报工系统')
|
||||||
def manual_download_program(self):
|
def manual_download_program(self):
|
||||||
"""
|
"""
|
||||||
人工线下加工传输编程文件
|
人工线下加工传输编程文件
|
||||||
|
|||||||
@@ -2,9 +2,13 @@
|
|||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
import base64
|
import base64
|
||||||
|
import functools
|
||||||
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
from odoo import http
|
from odoo import http
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class Manufacturing_Connect(http.Controller):
|
class Manufacturing_Connect(http.Controller):
|
||||||
|
|
||||||
@@ -52,3 +56,56 @@ class MultiInheritController():
|
|||||||
cls.__bases__ = (cls._sub_classes[-1],)
|
cls.__bases__ = (cls._sub_classes[-1],)
|
||||||
if cls not in cls._sub_classes:
|
if cls not in cls._sub_classes:
|
||||||
cls._sub_classes.append(cls)
|
cls._sub_classes.append(cls)
|
||||||
|
|
||||||
|
|
||||||
|
def api_log(name=None, requester=None):
|
||||||
|
"""记录API请求日志的装饰器"""
|
||||||
|
def decorator(func):
|
||||||
|
@functools.wraps(func)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
start_time = datetime.now()
|
||||||
|
|
||||||
|
# 获取请求信息
|
||||||
|
try:
|
||||||
|
# 获取请求数据
|
||||||
|
request_data = json.loads(request.httprequest.data) if request.httprequest.data else {}
|
||||||
|
# 获取请求路径
|
||||||
|
path = request.httprequest.path
|
||||||
|
# 获取请求方法
|
||||||
|
method = request.httprequest.method
|
||||||
|
# 获取客户端IP
|
||||||
|
remote_addr = request.httprequest.remote_addr
|
||||||
|
|
||||||
|
# 执行原始函数
|
||||||
|
result = func(*args, **kwargs)
|
||||||
|
|
||||||
|
# 计算响应时间
|
||||||
|
end_time = datetime.now()
|
||||||
|
response_time = (end_time - start_time).total_seconds()
|
||||||
|
|
||||||
|
# 创建日志记录
|
||||||
|
log_vals = {
|
||||||
|
'name': name or func.__name__,
|
||||||
|
'path': path,
|
||||||
|
'method': method,
|
||||||
|
'request_headers': json.dumps(request.httprequest.headers, ensure_ascii=False),
|
||||||
|
'request_data': json.dumps(request_data, ensure_ascii=False),
|
||||||
|
'response_data': json.dumps(result, ensure_ascii=False),
|
||||||
|
'remote_addr': remote_addr,
|
||||||
|
'response_time': response_time,
|
||||||
|
'status': result.get('code', 500),
|
||||||
|
'requester': requester,
|
||||||
|
'responser': '智能工厂'
|
||||||
|
}
|
||||||
|
|
||||||
|
# 异步创建日志记录
|
||||||
|
request.env['api.request.log'].sudo().with_context(tracking_disable=True).create(log_vals)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
_logger.error(f"API日志记录失败: {str(e)}")
|
||||||
|
# 即使日志记录失败,也要返回原始结果
|
||||||
|
return func(*args, **kwargs)
|
||||||
|
return wrapper
|
||||||
|
return decorator
|
||||||
@@ -6,3 +6,4 @@ from . import functional_fixture
|
|||||||
from . import tool_other_features
|
from . import tool_other_features
|
||||||
from . import basic_parameters_fixture
|
from . import basic_parameters_fixture
|
||||||
from . import ir_sequence
|
from . import ir_sequence
|
||||||
|
from . import api_log
|
||||||
|
|||||||
18
sf_base/models/api_log.py
Normal file
18
sf_base/models/api_log.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
from odoo import models, fields, api
|
||||||
|
|
||||||
|
|
||||||
|
class ApiRequestLog(models.Model):
|
||||||
|
_name = 'api.request.log'
|
||||||
|
_description = '接口请求日志'
|
||||||
|
_order = 'id desc'
|
||||||
|
|
||||||
|
name = fields.Char('接口名称')
|
||||||
|
path = fields.Char('请求路径')
|
||||||
|
method = fields.Char('请求方法')
|
||||||
|
request_data = fields.Text('请求数据')
|
||||||
|
response_data = fields.Text('响应数据')
|
||||||
|
remote_addr = fields.Char('客户端IP')
|
||||||
|
response_time = fields.Float('响应时间(秒)', digits=(16, 6))
|
||||||
|
status = fields.Integer('状态码')
|
||||||
|
requester = fields.Char('请求方')
|
||||||
|
responser = fields.Char('响应方')
|
||||||
Reference in New Issue
Block a user