You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
5.2 KiB

import asyncio
import os
import time
import logging
from tortoise import Tortoise
import uvicorn
from fastapi import FastAPI, Request
from fastapi.exceptions import RequestValidationError
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from tortoise.exceptions import DoesNotExist, DBConnectionError
from conf import setting, register_mysql
from agvtask.agvtasks import start_scheduler
from endpoints import plane
# from endpoints import cab, plane, web, cabinet, terminal
# from endpoints.cabinet import router
# from helper import respond_to
# from helper.websocket_manage import manager
# from models.cabinet import Cabinet
# from task.cabinet import start_scheduler
# from task.empty_drug import start_empty_scheduler
# from endpoints.web.tempvoc import startTempVocListenerThread
from logic import assignment, order, task, warehouse, agv
# Tortoise.init_models(["models.agv", "models.assignment", "models.order", "models.task", "models.user", "models.warehouse"], "models")
# Tortoise.init_models(["models.agv", "models.assignment", "models.order", "models.task", "models.user", "models.warehouse"], "models")
app = FastAPI(debug=setting.DEBUG_MODE)
app.mount('/static', StaticFiles(directory="static"), name='static')
def enable_debug_sql():
import logging, sys
fmt = logging.Formatter(
fmt="%(asctime)s - %(name)s:%(lineno)d - %(levelname)s - %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
sh = logging.StreamHandler(sys.stdout)
sh.setLevel(logging.DEBUG)
sh.setFormatter(fmt)
# will print debug sql
logger_db_client = logging.getLogger("tortoise.db_client")
logger_db_client.setLevel(logging.DEBUG)
if setting.SQL_DEBUG_MODE:
enable_debug_sql()
# 注册连接数据库
register_mysql(app)
Tortoise.init_models(["models.agv", "models.assignment", "models.order", "models.task", "models.user", "models.warehouse"], "models")
# Tortoise.init_models(["__main__"], "models")
# 异常捕获
# app.add_exception_handler(401, lambda request, exc: respond_to(code=401, desc='访问资源受限'))
# app.add_exception_handler(404, lambda request, exc: respond_to(code=404, desc='对应接口暂未实现'))
# app.add_exception_handler(DoesNotExist, lambda request, exc: respond_to(code=404, desc='查询不到对应记录'))
# app.add_exception_handler(405, lambda request, exc: respond_to(code=405, desc=f'请求参数错误{exc}'))
# app.add_exception_handler(RequestValidationError, lambda request, exc: respond_to(code=422, desc=f'请求参数错误{exc}'))
# app.add_exception_handler(DBConnectionError, lambda request, exc: respond_to(code=500, desc='无法连接远程数据库'))
# @app.on_event("startup")
# async def startup():
# if setting.ENVIRONMENT_TASK_ENABLE:
# await start_scheduler()
# start_empty_scheduler()
# # startTempVocListener()
# # loop = asyncio.get_event_loop()
# # await loop.run_in_executor(None, startTempVocListener)
# # from arcsoft.arcface import FaceRecognitionEngine
# # engine = FaceRecognitionEngine()
# # engine.activation()
# @app.on_event("startup")
# async def startup_message_check_event():
# await manager.start_message_check()
# @app.on_event("shutdown")
# async def shutdown_event():
# await manager.stop_message_check()
@app.on_event("startup")
async def startup():
await start_scheduler()
# 执行时间中间件
@app.middleware('http')
async def process_time_header(request: Request, next):
start_time = time.time()
response = await next(request)
process_time = time.time() - start_time
response.headers['X-Process-Time'] = str(process_time)
return response
@app.on_event("startup")
async def startup_log_event():
logger = logging.getLogger("uvicorn.access")
access_error = logging.getLogger("uvicorn.error")
handler = logging.handlers.TimedRotatingFileHandler('logs/server.log', when='midnight', backupCount=30)
handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
logger.addHandler(handler)
logger.setLevel(logging.WARNING)
access_error.addHandler(handler)
# 定义异步启动任务
# async def start_background_tasks():
# # 这里异步启动你的监听器
# await startTempVocListenerThread()
# 注册启动事件
# @app.on_event("startup")
# async def startup_event():
# # 启动异步任务
# asyncio.create_task(start_background_tasks())
# # 虹软设置网口
# os.system("sudo ip link set dev lo down && sudo ip link set dev lo address 00:90:27:e3:90:6b && sudo ip link set dev lo up")
# 跨域中间件
app.add_middleware(
CORSMiddleware, allow_origins=setting.YANEI_CORS_ORIGINS, allow_credentials=True, allow_methods=['*'], allow_headers=['*']
)
# # 路由
# app.include_router(cab.router)
# app.include_router(web.router)
# app.include_router(cabinet.router)
# app.include_router(plane.router)
# app.include_router(terminal.router)
app.include_router(plane.router)
app.include_router(assignment.router)
app.include_router(order.router)
app.include_router(task.router)
app.include_router(warehouse.router)
app.include_router(agv.router)
if __name__ == '__main__':
uvicorn.run(app='main:app', host='0.0.0.0', port=setting.PORT, reload=setting.DEBUG_DEV_MODE)