blob: 1e521f30bdc8dab041c4c3498e8c97621fa7ab60 [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)\
49 .order_by(GpuUsage.timestamp.desc())\
50 .limit(limit)\
51 .all()
52
53 result = []
54 for record in records:
55 result.append({
56 'id': record.id,
57 'gpu_id': record.gpu_id,
58 'gpu_usage': record.gpu_usage,
59 'gpu_memory_usage': record.gpu_memory_usage,
60 'timestamp': record.timestamp.isoformat() if record.timestamp else None
61 })
62
63 return result
64 except Exception as e:
65 logging.error(f"获取GPU使用情况失败: {e}")
66 return []
67 finally:
68 session.close()