blob: 248ed13975b0b67c10bd0d1a8feebe9272ddb7f3 [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-coding2a8fd602025-06-19 19:33:16 +08009# from ..models.token import Token
10from config import Config
11import requests
12
TRM-codingd1cbf672025-06-18 15:15:08 +080013class Fpost:
14 def __init__(self,session:Session):
15 self.session=session
16 return
17
18
19 def getlist(self):
20 results = self.session.query(post.id, post.title,post.status)
21 return results
22
23 def getuserlist(self):
24 results= self.session.query(users.id, users.username, users.role)
25 return results
26
27 def giveadmin(self,userid):
28 res=self.session.query(users).filter(users.id==userid).first()
29 if not res:
30 return False
31 res.role='admin'
32 self.session.commit()
33 return True
34
35 def giveuser(self,userid):
36 res=self.session.query(users).filter(users.id==userid).first()
37 if not res:
38 return False
39 res.role='user'
40 self.session.commit()
41 return True
42
43 def givesuperadmin(self,userid):
44 res=self.session.query(users).filter(users.id==userid).first()
45 if not res:
46 return False
47 res.role='superadmin'
48 self.session.commit()
49 return True
50
51
52 def getpost(self,postid):
53 res=self.session.query(post).filter(post.id==postid).first()
54 return res
TRM-coding2a8fd602025-06-19 19:33:16 +080055 def checkid(self, token, status=''):
56 """
57 使用前端传来的 token 调用 /verify_user 接口校验,
58 如果接口返回 success=False 或者角色不匹配则返回 False,否则 True。
59 """
60 print("---------------------------------------------------------")
61 try:
62 url = f"{Config.API_BASE_URL}/verify_user"
63 headers = {
64 'Authorization': f'Bearer {token}',
65 'Content-Type': 'application/json'
66 }
67 payload = {'token': token}
68 resp = requests.post(url, headers=headers, json=payload)
69
70 print(resp.json())
71 if resp.status_code != 200:
72 return False
73 data = resp.json()
74 if not data.get('success'):
75 return False
76 return data.get('role') == status,data.get('user_id')
77 except Exception:
TRM-codingd1cbf672025-06-18 15:15:08 +080078 return False
TRM-codingd1cbf672025-06-18 15:15:08 +080079
80 def review(self,postid,status):
81 print(status)
82 res=self.session.query(post).filter(post.id==postid).first()
83 if not res:
84 return False
85 res.status=status
86 self.session.commit()
87 return True
88
TRM-coding2a8fd602025-06-19 19:33:16 +080089 # def createtoken(self, userid):
90 # """
91 # 根据userid创建token并插入到数据库
92 # :param userid: 用户ID
93 # :return: 生成的token字符串
94 # """
95 # # 生成随机盐值
96 # salt = secrets.token_hex(16)
TRM-codingd1cbf672025-06-18 15:15:08 +080097
TRM-coding2a8fd602025-06-19 19:33:16 +080098 # # 创建哈希值:userid + 当前时间戳 + 随机盐值
99 # current_time = str(datetime.now().timestamp())
100 # hash_input = f"{userid}_{current_time}_{salt}"
TRM-codingd1cbf672025-06-18 15:15:08 +0800101
TRM-coding2a8fd602025-06-19 19:33:16 +0800102 # # 生成SHA256哈希值作为token
103 # token = hashlib.sha256(hash_input.encode()).hexdigest()
TRM-codingd1cbf672025-06-18 15:15:08 +0800104
TRM-coding2a8fd602025-06-19 19:33:16 +0800105 # # 设置时间
106 # created_time = datetime.now()
107 # expires_time = created_time + timedelta(days=1) # 一天后过期
TRM-codingd1cbf672025-06-18 15:15:08 +0800108
TRM-coding2a8fd602025-06-19 19:33:16 +0800109 # try:
110 # # 创建新的token记录
111 # new_token = Token(
112 # token=token,
113 # expires_at=expires_time,
114 # created_at=created_time
115 # )
TRM-codingd1cbf672025-06-18 15:15:08 +0800116
TRM-coding2a8fd602025-06-19 19:33:16 +0800117 # # 假设self.session是数据库会话对象
118 # self.session.add(new_token)
119 # self.session.commit()
TRM-codingd1cbf672025-06-18 15:15:08 +0800120
TRM-coding2a8fd602025-06-19 19:33:16 +0800121 # return token
TRM-codingd1cbf672025-06-18 15:15:08 +0800122
TRM-coding2a8fd602025-06-19 19:33:16 +0800123 # except Exception as e:
124 # self.session.rollback()
125 # raise Exception(f"创建token失败: {str(e)}")
TRM-codingc4b4f3d2025-06-18 19:02:46 +0800126
127 def recordlog(self,user_id,log_type,content,ip):
128 """
129 记录日志
130 :param user_id: 用户ID
131 :param log_type: 日志类型,'access','error','behavior','system'
132 :param content: 日志内容
133 :param ip: IP地址
134 """
135 try:
136 new_log = Log(
137 user_id=user_id,
138 type=log_type,
139 content=content,
140 ip=ip
141 )
142 self.session.add(new_log)
143 self.session.commit()
144 except Exception as e:
145 self.session.rollback()
146 raise Exception(f"记录日志失败: {str(e)}")
147
148 def getrecordlog(self):
149 res= self.session.query(Log).all()
150 return res
151
152 def recordsyscost(self, endpoint: str, elapsed_time: float, cpu_user: float, cpu_system: float, memory_rss: int):
153 """
154 记录系统性能消耗到 performance_data 表
155 :param endpoint: 请求接口路径
156 :param elapsed_time: 总耗时(秒)
157 :param cpu_user: 用户态 CPU 时间差(秒)
158 :param cpu_system: 系统态 CPU 时间差(秒)
159 :param memory_rss: RSS 内存增量(字节)
160 """
161 try:
162 new_record = PerformanceData(
163 endpoint=endpoint,
164 elapsed_time=elapsed_time,
165 cpu_user=cpu_user,
166 cpu_system=cpu_system,
167 memory_rss=memory_rss
168 )
169 self.session.add(new_record)
170 self.session.commit()
171 except Exception as e:
172 self.session.rollback()
173 raise Exception(f"记录系统性能消耗失败: {e}")
174
175 def getsyscost(self):
TRM-coding2a8fd602025-06-19 19:33:16 +0800176 res = self.session.query(PerformanceData).order_by(PerformanceData.record_time.desc()).limit(200).all()
TRM-codingc4b4f3d2025-06-18 19:02:46 +0800177 return res