blob: 6c589d6b48a5526e626eed09045d4370c6af90e3 [file] [log] [blame]
TRM-coding106204b2025-06-28 00:37:46 +08001from sqlalchemy.orm import sessionmaker
2from sqlalchemy import create_engine
3from app.models.gpu_usage import GpuUsage
4import logging
5
6class GpuWriter:
7 def __init__(self, database_url):
8 """
9 初始化 GpuWriter
10 :param database_url: 数据库连接URL
11 """
12 self.engine = create_engine(database_url)
13 self.Session = sessionmaker(bind=self.engine)
14
15 def write_gpu_usage(self, gpu_id, gpu_usage, gpu_memory_usage):
16 """
17 写入GPU使用情况到数据库
18 :param gpu_id: GPU编号
19 :param gpu_usage: GPU使用率(百分比)
20 :param gpu_memory_usage: GPU内存用量(MB)
21 :return: bool 是否写入成功
22 """
23 session = self.Session()
24 try:
25 gpu_record = GpuUsage(
26 gpu_id=gpu_id,
27 gpu_usage=gpu_usage,
28 gpu_memory_usage=gpu_memory_usage
29 )
30 session.add(gpu_record)
31 session.commit()
32 return True
33 except Exception as e:
34 session.rollback()
35 logging.error(f"写入GPU使用情况失败: {e}")
36 return False
37 finally:
38 session.close()
39
40 def get_latest_gpu_usage(self, limit=100):
41 """
42 获取最新的GPU使用情况记录
43 :param limit: 获取记录条数,默认100条
44 :return: list 包含GPU使用记录的字典列表
45 """
46 session = self.Session()
47 try:
48 records = session.query(GpuUsage)\
TRM-coding3920c392025-06-28 01:06:02 +080049 .order_by(GpuUsage.created_at.desc())\
TRM-coding106204b2025-06-28 00:37:46 +080050 .limit(limit)\
51 .all()
52
53 result = []
54 for record in records:
55 result.append({
TRM-coding3920c392025-06-28 01:06:02 +080056 'id': record.gpu_id, # 使用gpu_id作为id
TRM-coding106204b2025-06-28 00:37:46 +080057 'gpu_id': record.gpu_id,
58 'gpu_usage': record.gpu_usage,
59 'gpu_memory_usage': record.gpu_memory_usage,
TRM-coding3920c392025-06-28 01:06:02 +080060 'timestamp': record.created_at.isoformat() if record.created_at else None
TRM-coding106204b2025-06-28 00:37:46 +080061 })
62
63 return result
64 except Exception as e:
65 logging.error(f"获取GPU使用情况失败: {e}")
66 return []
67 finally:
68 session.close()