初始提交: Qihu-AIFlow v2.0.1 完整项目
- 前端 React+TypeScript (源码+构建产物) - 后端 Python FastAPI - 数据库迁移 001-015 - Docker部署配置 - 微信ClawBot API频道绑定 - 项目文档 README.md
This commit is contained in:
commit
78ff261b5a
199 files changed
+69126
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,26 @@
|
||||
"""
|
||||
AIFlow 日志中间件
|
||||
- 记录用户操作日志
|
||||
- 记录API调用日志(Token消耗)
|
||||
- 操作日志和审计日志不可删除
|
||||
"""
|
||||
from fastapi import Request
|
||||
from .log_service import LogService
|
||||
|
||||
|
||||
async def log_operation(user_id: str, username: str, action: str, target: str = None,
|
||||
target_id: str = None, detail: str = None, ip: str = None):
|
||||
"""记录用户操作日志(异步安全)"""
|
||||
try:
|
||||
LogService.log_operation(user_id, username, action, target, target_id, detail, ip)
|
||||
except Exception as e:
|
||||
print(f"[LogError] 操作日志记录失败: {e}")
|
||||
|
||||
|
||||
async def log_audit(admin_id: str, admin_name: str, action: str,
|
||||
target_type: str = None, target_id: str = None, detail: str = None):
|
||||
"""记录管理员审计日志"""
|
||||
try:
|
||||
LogService.log_audit(admin_id, admin_name, action, target_type, target_id, detail)
|
||||
except Exception as e:
|
||||
print(f"[AuditError] 审计日志记录失败: {e}")
|
||||
@@ -0,0 +1,80 @@
|
||||
"""
|
||||
日志服务 - 记录各类操作日志
|
||||
实现日志不可删除策略
|
||||
"""
|
||||
from ..database import SessionLocal
|
||||
from ..models import OperationLog, AuditLog, TokenUsageLog
|
||||
import uuid
|
||||
|
||||
|
||||
class LogService:
|
||||
|
||||
@staticmethod
|
||||
def log_operation(user_id: str, username: str, action: str,
|
||||
target: str = None, target_id: str = None,
|
||||
detail: str = None, ip: str = None):
|
||||
"""记录用户操作日志"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
log = OperationLog(
|
||||
id=str(uuid.uuid4()),
|
||||
user_id=user_id,
|
||||
username=username,
|
||||
action=action,
|
||||
target=target,
|
||||
target_id=target_id,
|
||||
detail=detail,
|
||||
ip=ip,
|
||||
)
|
||||
db.add(log)
|
||||
db.commit()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@staticmethod
|
||||
def log_audit(admin_id: str, admin_name: str, action: str,
|
||||
target_type: str = None, target_id: str = None,
|
||||
detail: str = None):
|
||||
"""记录管理员审计日志"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
log = AuditLog(
|
||||
id=str(uuid.uuid4()),
|
||||
admin_id=admin_id,
|
||||
admin_name=admin_name,
|
||||
action=action,
|
||||
target_type=target_type,
|
||||
target_id=target_id,
|
||||
detail=detail,
|
||||
)
|
||||
db.add(log)
|
||||
db.commit()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@staticmethod
|
||||
def log_token_usage(user_id: str, model_id: str = None, model_name: str = None,
|
||||
app_id: str = None, app_name: str = None,
|
||||
conversation_id: str = None, prompt_tokens: int = 0,
|
||||
completion_tokens: int = 0, total_tokens: int = 0,
|
||||
cost: float = 0):
|
||||
"""记录Token消耗日志"""
|
||||
db = SessionLocal()
|
||||
try:
|
||||
log = TokenUsageLog(
|
||||
id=str(uuid.uuid4()),
|
||||
user_id=user_id,
|
||||
model_id=model_id,
|
||||
model_name=model_name,
|
||||
app_id=app_id,
|
||||
app_name=app_name,
|
||||
conversation_id=conversation_id,
|
||||
prompt_tokens=prompt_tokens,
|
||||
completion_tokens=completion_tokens,
|
||||
total_tokens=total_tokens,
|
||||
cost=cost,
|
||||
)
|
||||
db.add(log)
|
||||
db.commit()
|
||||
finally:
|
||||
db.close()
|
||||
Reference in new issue
Block a user