from app import create_app
from flask_cors import CORS
import os
import psutil
import time
import GPUtil
from flask import g, request
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from config import Config
from app.utils.gpuwriter import GpuWriter

app = create_app()
CORS(app,
     resources={r"/*": {"origins": "*"}},
     supports_credentials=True,
     allow_headers=["Content-Type", "Authorization"]
)

proc = psutil.Process(os.getpid())

@app.before_request
def before_request():
    g.start_time = time.time()
    g.start_cpu = proc.cpu_times()
    g.start_mem = proc.memory_info()

@app.after_request
def after_request(response):
    try:
        # 记录GPU使用情况
        gpu_writer = GpuWriter(Config.SQLURL)
        gpus = GPUtil.getGPUs()
        
        for gpu in gpus:
            gpu_writer.write_gpu_usage(
                gpu_id=gpu.id,
                gpu_usage=gpu.load * 100,  # 转换为百分比
                gpu_memory_usage=gpu.memoryUsed  # MB
            )
    except Exception as e:
        print(f"GPU使用情况记录失败: {e}")
    
    return response

if __name__ == "__main__":
    app.run(debug=True,port=8082,host='0.0.0.0')