blob: 1e521f30bdc8dab041c4c3498e8c97621fa7ab60 [file] [log] [blame]
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from app.models.gpu_usage import GpuUsage
import logging
class GpuWriter:
def __init__(self, database_url):
"""
初始化 GpuWriter
:param database_url: 数据库连接URL
"""
self.engine = create_engine(database_url)
self.Session = sessionmaker(bind=self.engine)
def write_gpu_usage(self, gpu_id, gpu_usage, gpu_memory_usage):
"""
写入GPU使用情况到数据库
:param gpu_id: GPU编号
:param gpu_usage: GPU使用率(百分比)
:param gpu_memory_usage: GPU内存用量(MB)
:return: bool 是否写入成功
"""
session = self.Session()
try:
gpu_record = GpuUsage(
gpu_id=gpu_id,
gpu_usage=gpu_usage,
gpu_memory_usage=gpu_memory_usage
)
session.add(gpu_record)
session.commit()
return True
except Exception as e:
session.rollback()
logging.error(f"写入GPU使用情况失败: {e}")
return False
finally:
session.close()
def get_latest_gpu_usage(self, limit=100):
"""
获取最新的GPU使用情况记录
:param limit: 获取记录条数,默认100条
:return: list 包含GPU使用记录的字典列表
"""
session = self.Session()
try:
records = session.query(GpuUsage)\
.order_by(GpuUsage.timestamp.desc())\
.limit(limit)\
.all()
result = []
for record in records:
result.append({
'id': record.id,
'gpu_id': record.gpu_id,
'gpu_usage': record.gpu_usage,
'gpu_memory_usage': record.gpu_memory_usage,
'timestamp': record.timestamp.isoformat() if record.timestamp else None
})
return result
except Exception as e:
logging.error(f"获取GPU使用情况失败: {e}")
return []
finally:
session.close()