class SecureObservableHarness:
"""整合安全性和可观测性的Harness"""
def __init__(
self,
permission_manager: PermissionManager,
audit_logger: AuditLogger,
observability: ObservabilityManager
):
self.permission_manager = permission_manager
self.audit_logger = audit_logger
self.observability = observability
async def execute_tool_safely(
self,
agent_id: str,
tool_name: str,
params: dict
) -> ToolResult:
"""安全且可观测的工具执行"""
# 1. 权限检查
allowed, reason = await self.permission_manager.check_permission(
agent_id=agent_id,
resource_id=f"tool://{tool_name}",
action="execute"
)
if not allowed:
# 记录被拒绝的尝试
await self.audit_logger.log(AuditLog(
timestamp=datetime.now(),
agent_id=agent_id,
action_type="permission_check",
resource=f"tool://{tool_name}",
operation="execute",
status="denied",
details={"reason": reason}
))
return ToolResult(
status="permission_denied",
error=reason
)
# 2. 记录尝试
await self.audit_logger.log(AuditLog(
timestamp=datetime.now(),
agent_id=agent_id,
action_type="tool_execution_start",
resource=f"tool://{tool_name}",
operation="execute",
status="started"
))
# 3. 执行工具
start_time = time.time()
try:
result = await tool.execute(**params)
duration_ms = (time.time() - start_time) * 1000
# 4. 记录成功
await self.audit_logger.log(AuditLog(
timestamp=datetime.now(),
agent_id=agent_id,
action_type="tool_execution_complete",
resource=f"tool://{tool_name}",
operation="execute",
status="success"
))
# 5. 记录可观测性数据
await self.observability.record_tool_execution(
tool_name=tool_name,
params=params,
result=result,
duration_ms=duration_ms
)
return result
except Exception as e:
duration_ms = (time.time() - start_time) * 1000
# 记录错误
await self.audit_logger.log(AuditLog(
timestamp=datetime.now(),
agent_id=agent_id,
action_type="tool_execution_error",
resource=f"tool://{tool_name}",
operation="execute",
status="error",
details={"error": str(e)}
))
await self.observability.record_tool_execution(
tool_name=tool_name,
params=params,
result=ToolResult(status="error", error=str(e)),
duration_ms=duration_ms
)
raise