增加接口请求日志,修改报工接口获取机台id
This commit is contained in:
@@ -2,7 +2,7 @@ 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
|
from odoo.addons.sf_base.decorators.api_log import api_log
|
||||||
|
|
||||||
class MainController(http.Controller):
|
class MainController(http.Controller):
|
||||||
|
|
||||||
@@ -13,11 +13,11 @@ class MainController(http.Controller):
|
|||||||
人工线下加工传输编程文件
|
人工线下加工传输编程文件
|
||||||
"""
|
"""
|
||||||
data = json.loads(request.httprequest.data)
|
data = json.loads(request.httprequest.data)
|
||||||
maintenance_equipment_name = data.get('maintenance_equipment_name')
|
maintenance_equipment_id = data.get('maintenance_equipment_id')
|
||||||
model_id = data.get('model_id')
|
model_id = data.get('model_id')
|
||||||
if not maintenance_equipment_name or not model_id:
|
if not maintenance_equipment_id or not model_id:
|
||||||
return {'code': 400, 'message': '参数错误'}
|
return {'code': 400, 'message': '参数错误'}
|
||||||
maintenance_equipment = request.env['maintenance.equipment'].sudo().search([('name', '=', maintenance_equipment_name)], limit=1)
|
maintenance_equipment = request.env['maintenance.equipment'].sudo().browse(int(maintenance_equipment_id))
|
||||||
if not maintenance_equipment:
|
if not maintenance_equipment:
|
||||||
return {'code': 400, 'message': '机台不存在,请扫描正确的机台二维码'}
|
return {'code': 400, 'message': '机台不存在,请扫描正确的机台二维码'}
|
||||||
product = request.env['product.template'].sudo().search([('model_id', '=', model_id)], limit=1)
|
product = request.env['product.template'].sudo().search([('model_id', '=', model_id)], limit=1)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
from . import models
|
from . import models
|
||||||
from . import commons
|
from . import commons
|
||||||
from . import controllers
|
from . import controllers
|
||||||
|
from . import decorators
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
import base64
|
|
||||||
import functools
|
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
|
||||||
from odoo import http
|
from odoo import http
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
|
|
||||||
@@ -56,56 +53,3 @@ 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
|
|
||||||
1
sf_base/decorators/__init__.py
Normal file
1
sf_base/decorators/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import api_log
|
||||||
59
sf_base/decorators/api_log.py
Normal file
59
sf_base/decorators/api_log.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
|
||||||
|
import functools
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
|
from odoo.http import request
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
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_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
|
||||||
Reference in New Issue
Block a user