blob: 22378156d5d57801c3fee9aa73458674b98fb299 [file] [log] [blame]
TRM-codingd1cbf672025-06-18 15:15:08 +08001from ..models.users 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
TRM-codingc4b4f3d2025-06-18 19:02:46 +08007from ..models.logs import Log
8from ..models.syscost import PerformanceData
TRM-codingd1cbf672025-06-18 15:15:08 +08009class 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()
TRM-codingc4b4f3d2025-06-18 19:02:46 +0800104 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