## 主要修复 - 修复Creo软件运行状态检测失败问题 - 添加完整的软件停止功能支持 - 改进多进程软件的进程管理逻辑 ## 技术改进 - 更新软件配置支持多进程名称检测 - 优化进程停止逻辑,增加超时配置 - 新增 stop_software WebSocket消息类型 - 完善错误处理和日志记录 ## 配置更新 - configs/software_config.yaml: 支持进程名称列表和停止超时 - 添加Revit 2017配置支持 ## 文档更新 - README.md: 更新软件配置说明和API列表 - frontend-api-docs.md: 添加停止软件API文档 - CHECKPOINT.md: 记录修复进展和解决方案 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
98 lines
3.2 KiB
Python
98 lines
3.2 KiB
Python
"""
|
||
操作日志数据模型
|
||
用于记录用户操作和系统操作日志
|
||
"""
|
||
from typing import Optional, Dict, Any
|
||
from datetime import datetime
|
||
from enum import Enum
|
||
from pydantic import BaseModel
|
||
|
||
|
||
class LogType(str, Enum):
|
||
"""日志类型枚举"""
|
||
SYSTEM_OPERATION = "system_operation" # 系统操作(启动软件、重启等)
|
||
USER_OPERATION = "user_operation" # 用户自定义操作(前端发送的操作)
|
||
|
||
|
||
class LogLevel(str, Enum):
|
||
"""日志级别枚举"""
|
||
INFO = "info"
|
||
WARNING = "warning"
|
||
ERROR = "error"
|
||
DEBUG = "debug"
|
||
|
||
|
||
class ActionType(str, Enum):
|
||
"""行为类型枚举"""
|
||
CREATE = "create" # 创建
|
||
READ = "read" # 读取
|
||
UPDATE = "update" # 更新
|
||
DELETE = "delete" # 删除
|
||
EXECUTE = "execute" # 执行
|
||
EXPORT = "export" # 导出
|
||
IMPORT = "import" # 导入
|
||
|
||
|
||
class OperationStatus(str, Enum):
|
||
"""操作状态枚举"""
|
||
SUCCESS = "success" # 成功
|
||
FAILED = "failed" # 失败
|
||
PENDING = "pending" # 进行中
|
||
|
||
|
||
class OperationLog(BaseModel):
|
||
"""操作日志模型"""
|
||
# 基础信息
|
||
id: str # 日志唯一ID
|
||
log_type: LogType # 日志类型
|
||
level: LogLevel = LogLevel.INFO # 日志级别
|
||
|
||
# 用户信息
|
||
user_id: Optional[str] = None # 用户ID/用户名
|
||
client_id: Optional[str] = None # 客户端连接ID
|
||
session_id: Optional[str] = None # 会话ID
|
||
|
||
# 操作信息
|
||
operation: str # 具体操作名称
|
||
operation_category: Optional[str] = None # 操作分类
|
||
action_type: Optional[ActionType] = None # 行为类型
|
||
target_object: Optional[str] = None # 操作目标对象
|
||
details: str # 详细描述
|
||
|
||
# 时间信息
|
||
created_at: datetime # 操作时间
|
||
duration: Optional[int] = None # 操作耗时(毫秒)
|
||
|
||
# 环境信息
|
||
ip_address: Optional[str] = None # 客户端IP地址
|
||
user_agent: Optional[str] = None # 用户代理信息
|
||
software_version: Optional[str] = None # 软件版本
|
||
|
||
# 状态信息
|
||
status: OperationStatus = OperationStatus.SUCCESS # 操作状态
|
||
error_message: Optional[str] = None # 错误信息
|
||
|
||
# 扩展数据
|
||
extra_data: Optional[Dict[str, Any]] = None # 额外的结构化数据
|
||
|
||
class Config:
|
||
# 允许任意类型的字段(用于extra_data)
|
||
arbitrary_types_allowed = True
|
||
|
||
# JSON编码配置
|
||
json_encoders = {
|
||
datetime: lambda v: v.isoformat()
|
||
}
|
||
|
||
|
||
class LogFilter(BaseModel):
|
||
"""日志过滤条件"""
|
||
log_type: Optional[LogType] = None
|
||
operation: Optional[str] = None
|
||
user_id: Optional[str] = None
|
||
client_id: Optional[str] = None
|
||
level: Optional[LogLevel] = None
|
||
start_time: Optional[datetime] = None
|
||
end_time: Optional[datetime] = None
|
||
limit: int = 100 # 查询限制数量
|
||
offset: int = 0 # 查询偏移量 |