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
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)
|