from typing import Optional from datetime import datetime from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel from db import DB app = FastAPI(title='梅州插件日志记录', description='梅州插件日志记录') app.add_middleware( CORSMiddleware, # 允许跨域的源列表 allow_origins=["*"], # 跨域请求是否支持cookie allow_credentials=False, # 允许跨域的请求方法 allow_methods=["*"], # 允许跨域请求的请求头列表 allow_headers=["*"], # 可以被浏览器访问的响应头 expose_headers=["*"], # 设定浏览器缓存CORS响应的最长时间 max_age=1000 ) class Recorder(BaseModel): record_Time: datetime current_Url: str full_Url: str sim_Url: Optional[str] = None user_Id: str device_Id: str request_Method: str event_Type: str form_Data: Optional[str] = None json_Data: Optional[str] = None value_Data: Optional[str] = None status_Code: Optional[str] = None target_Url: Optional[str] = None iframe_Url: Optional[str] = None button_Text: Optional[str] = None @app.post(path='/record', summary='日志记录', description='接收插件日志记录') def record(recorder: Recorder): recorder_dict = recorder.dict() # print(recorder_dict) record_time, current_url, full_url, sim_url, user_id, device_id, request_nethod,event_type, form_data, json_data, value_data, status_code, target_url, iframe_url, button_text = recorder_dict['record_Time'], recorder_dict['current_Url'], recorder_dict['full_Url'], recorder_dict['sim_Url'], recorder_dict['user_Id'], recorder_dict['device_Id'], recorder_dict['request_Method'], recorder_dict['event_Type'], recorder_dict['form_Data'], recorder_dict['json_Data'], recorder_dict['value_Data'], recorder_dict['status_Code'], recorder_dict['target_Url'], recorder_dict['iframe_Url'], recorder_dict['button_Text'] db, cursor = DB().get_cursor() db.ping(reconnect=True) try: sql = """INSERT INTO recoder( record_time, current_url, full_url, sim_url, user_id, device_id, request_method,event_type, form_data, json_data, value_data, status_code, target_url, iframe_url, button_text ) VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )""" % ( record_time, current_url, full_url, sim_url, user_id, device_id, request_nethod,event_type, form_data, json_data, value_data, status_code, target_url, iframe_url, button_text ) # print(sql) cursor.execute(sql) db.commit() except Exception as e: print('--->', e) db.rollback() return {"status": "failed"} cursor.close() db.close() return {"status": "success"} # if __name__ == '__main__': # # uvicorn main:app --host 0.0.0.0 --port 8000 --workers 20 --log-level warning # uvicorn.run(app, host='0.0.0.0', port=7900, workers=1) # # db, cursor = DB().get_cursor()