82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
"""
|
|
日志服务 - 记录各类操作日志
|
|
实现日志不可删除策略
|
|
"""
|
|
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, trace_id: str = None):
|
|
"""记录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,
|
|
trace_id=trace_id,
|
|
)
|
|
db.add(log)
|
|
db.commit()
|
|
finally:
|
|
db.close()
|