blob: c8b5f481f32f09c4b9a85b8a0287eb165d388a23 [file] [log] [blame]
TRM-coding882dc442025-06-18 20:13:21 +08001from models.user import User as users
2from models.post import Post as post
3import secrets
4import hashlib
5from datetime import datetime, timedelta
6from sqlalchemy.orm import Session
7from models.logs import Log
8from models.syscost import PerformanceData
9class Fpost:
10 def __init__(self,session:Session):
11 self.session=session
12 return
13
14
15 def getlist(self):
16 results = self.session.query(post.id, post.title,post.status)
17 return results
18
19 def getuserlist(self):
20 results= self.session.query(users.id, users.username, users.role)
21 return results
22
23 def giveadmin(self,userid):
24 res=self.session.query(users).filter(users.id==userid).first()
25 if not res:
26 return False
27 res.role='admin'
28 self.session.commit()
29 return True
30
31 def giveuser(self,userid):
32 res=self.session.query(users).filter(users.id==userid).first()
33 if not res:
34 return False
35 res.role='user'
36 self.session.commit()
37 return True
38
39 def givesuperadmin(self,userid):
40 res=self.session.query(users).filter(users.id==userid).first()
41 if not res:
42 return False
43 res.role='superadmin'
44 self.session.commit()
45 return True
46
47
48 def getpost(self,postid):
49 res=self.session.query(post).filter(post.id==postid).first()
50 return res
51 def checkid(self,userid,status=''):
52 res=self.session.query(users).filter(users.id==userid).first()
53 if(not res):
54 return False
55 if res.role !=status:
56 return False
57 return True
58
59 def review(self,postid,status):
60 print(status)
61 res=self.session.query(post).filter(post.id==postid).first()
62 if not res:
63 return False
64 res.status=status
65 self.session.commit()
66 return True
67
68 def createtoken(self, userid):
69 """
70 根据userid创建token并插入到数据库
71 :param userid: 用户ID
72 :return: 生成的token字符串
73 """
74 # 生成随机盐值
75 salt = secrets.token_hex(16)
76
77 # 创建哈希值:userid + 当前时间戳 + 随机盐值
78 current_time = str(datetime.now().timestamp())
79 hash_input = f"{userid}_{current_time}_{salt}"
80
81 # 生成SHA256哈希值作为token
82 token = hashlib.sha256(hash_input.encode()).hexdigest()
83
84 # 设置时间
85 created_time = datetime.now()
86 expires_time = created_time + timedelta(days=1) # 一天后过期
87
88 try:
89 # 创建新的token记录
90 new_token = Token(
91 token=token,
92 expires_at=expires_time,
93 created_at=created_time
94 )
95
96 # 假设self.session是数据库会话对象
97 self.session.add(new_token)
98 self.session.commit()
99
100 return token
101
102 except Exception as e:
103 self.session.rollback()
104 raise Exception(f"创建token失败: {str(e)}")
105
106 def recordlog(self,user_id,log_type,content,ip):
107 """
108 记录日志
109 :param user_id: 用户ID
110 :param log_type: 日志类型,'access','error','behavior','system'
111 :param content: 日志内容
112 :param ip: IP地址
113 """
114 try:
115 new_log = Log(
116 user_id=user_id,
117 type=log_type,
118 content=content,
119 ip=ip
120 )
121 self.session.add(new_log)
122 self.session.commit()
123 except Exception as e:
124 self.session.rollback()
125 raise Exception(f"记录日志失败: {str(e)}")
126
127 def getrecordlog(self):
128 res= self.session.query(Log).all()
129 return res
130
131 def recordsyscost(self, endpoint: str, elapsed_time: float, cpu_user: float, cpu_system: float, memory_rss: int):
132 """
133 记录系统性能消耗到 performance_data 表
134 :param endpoint: 请求接口路径
135 :param elapsed_time: 总耗时(秒)
136 :param cpu_user: 用户态 CPU 时间差(秒)
137 :param cpu_system: 系统态 CPU 时间差(秒)
138 :param memory_rss: RSS 内存增量(字节)
139 """
140 try:
141 new_record = PerformanceData(
142 endpoint=endpoint,
143 elapsed_time=elapsed_time,
144 cpu_user=cpu_user,
145 cpu_system=cpu_system,
146 memory_rss=memory_rss
147 )
148 self.session.add(new_record)
149 self.session.commit()
150 except Exception as e:
151 self.session.rollback()
152 raise Exception(f"记录系统性能消耗失败: {e}")
153
154 def getsyscost(self):
155 res= self.session.query(PerformanceData).all()
156 return res