初始提交: Qihu-AIFlow v2.0.1 完整项目

- 前端 React+TypeScript (源码+构建产物)
- 后端 Python FastAPI
- 数据库迁移 001-015
- Docker部署配置
- 微信ClawBot API频道绑定
- 项目文档 README.md
This commit is contained in:
qyyfw committed 2026-07-02 14:40:46 +08:00
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()