2022-05-24 02:25:59 +08:00
|
|
|
import time
|
|
|
|
import traceback
|
|
|
|
|
|
|
|
from flask import request
|
|
|
|
from werkzeug.exceptions import BadRequest
|
|
|
|
|
|
|
|
from DBHelper.MongoHelperInstance import DB_GUA
|
|
|
|
|
|
|
|
|
|
|
|
def get_req_detail(req, param_type):
|
|
|
|
"""
|
|
|
|
获取请求参数信息
|
|
|
|
若异常请求则返回空字符串
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
if param_type == 'args':
|
|
|
|
return req.args.__str__()
|
|
|
|
elif param_type == 'json':
|
|
|
|
return req.json.__str__()
|
|
|
|
else:
|
|
|
|
return ''
|
|
|
|
except BadRequest:
|
|
|
|
return ''
|
|
|
|
|
|
|
|
|
|
|
|
class JustThrowError(RuntimeError):
|
|
|
|
"""自定义抛出异常信息"""
|
|
|
|
|
|
|
|
def __init__(self, error_info):
|
|
|
|
self.error_info = error_info
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.error_info
|
|
|
|
|
|
|
|
|
|
|
|
class APIReturnError(RuntimeError):
|
|
|
|
"""接口返回异常信息"""
|
|
|
|
def __init__(self, error_info, status_code):
|
|
|
|
self.error_info = error_info # 异常信息
|
|
|
|
self.status_code = status_code # 状态码
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.error_info
|
|
|
|
|
|
|
|
|
2022-05-25 14:41:58 +08:00
|
|
|
class AttrCheckError(RuntimeError):
|
|
|
|
"""属性检查异常"""
|
|
|
|
|
|
|
|
def __init__(self, error_info):
|
|
|
|
self.error_info = error_info
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.error_info
|
|
|
|
|
|
|
|
|
2022-05-24 02:25:59 +08:00
|
|
|
class CheckFailed(RuntimeError):
|
|
|
|
"""检查异常"""
|
|
|
|
|
|
|
|
def __init__(self, failed_info, status_code):
|
|
|
|
self.failed_info = failed_info # 失败信息
|
|
|
|
self.status_code = status_code # 状态码
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return self.failed_info
|
|
|
|
|
|
|
|
def log_error(self):
|
|
|
|
|
|
|
|
info = {
|
|
|
|
"ip": request.remote_addr,
|
|
|
|
"request_info": {
|
|
|
|
"path": request.path,
|
|
|
|
"method": request.method,
|
|
|
|
"headers": request.headers.__str__(),
|
|
|
|
"args": get_req_detail(request, 'args'),
|
|
|
|
"json": get_req_detail(request, 'json')
|
|
|
|
},
|
|
|
|
"traceback": traceback.format_exc(),
|
|
|
|
"exception": type(self).__name__,
|
|
|
|
"is_solved": "no",
|
|
|
|
"time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
|
|
|
}
|
|
|
|
|
|
|
|
DB_GUA.insert_single_data(
|
|
|
|
"日志",
|
|
|
|
"异常日志",
|
|
|
|
info
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class LogConditionCheckFailed(CheckFailed):
|
|
|
|
"""直接记录检查异常"""
|
|
|
|
|
|
|
|
def __init__(self, failed_info, status_code):
|
|
|
|
self.failed_info = failed_info # 失败信息
|
|
|
|
self.status_code = status_code # 状态码
|
|
|
|
self.log_error()
|
|
|
|
|
|
|
|
|
|
|
|
class ReturnConditionCheckFailed(CheckFailed):
|
|
|
|
"""条件检查失败 抛出异常 接口返回失败原因和状态码"""
|