TRM-coding | 882dc44 | 2025-06-18 20:13:21 +0800 | [diff] [blame^] | 1 | from models.user import User as users |
| 2 | from models.post import Post as post |
| 3 | import secrets |
| 4 | import hashlib |
| 5 | from datetime import datetime, timedelta |
| 6 | from sqlalchemy.orm import Session |
| 7 | from models.logs import Log |
| 8 | from models.syscost import PerformanceData |
| 9 | class 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 |