chore: initialize qiming workspace repository

This commit is contained in:
Codex
2026-05-29 14:22:48 +08:00
commit bfd67a0f2c
10750 changed files with 1885711 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
package com.xspaceagi.log.web.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xspaceagi.log.sdk.request.DocumentSearchRequest;
import com.xspaceagi.log.sdk.service.ISearchRpcService;
import com.xspaceagi.log.sdk.vo.LogDocument;
import com.xspaceagi.log.sdk.vo.SearchResult;
import com.xspaceagi.log.web.controller.base.BaseController;
import com.xspaceagi.log.web.controller.dto.LogDetailQueryDto;
import com.xspaceagi.log.web.controller.dto.LogQueryDto;
import com.xspaceagi.system.sdk.permission.SpacePermissionService;
import com.xspaceagi.system.spec.annotation.RequireResource;
import com.xspaceagi.system.spec.common.RequestContext;
import com.xspaceagi.system.spec.dto.ReqResult;
import com.xspaceagi.system.spec.page.PageQueryVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.xspaceagi.system.spec.enums.ResourceEnum.SPACE_LOG_QUERY_DETAIL;
import static com.xspaceagi.system.spec.enums.ResourceEnum.SPACE_LOG_QUERY_LIST;
@Tag(name = "日志平台-搜索接口")
@RestController
@RequestMapping("/api/requestLogs")
@Slf4j
public class LogQueryController extends BaseController {
@Resource
private ISearchRpcService iSearchRpcService;
@Resource
private SpacePermissionService spacePermissionService;
@RequireResource(SPACE_LOG_QUERY_LIST)
@Operation(summary = "统一日志查询(工作空间)")
@RequestMapping(path = "/list", method = RequestMethod.POST)
public ReqResult<IPage<LogDocument>> search(@RequestBody PageQueryVo<LogQueryDto> pageQueryVo) {
var filter = pageQueryVo.getQueryFilter();
if (filter == null) {
return ReqResult.error("查询条件不能为空");
}
if (filter.getSpaceId() == null) {
return ReqResult.error("空间ID不能为空");
}
spacePermissionService.checkSpaceUserPermission(filter.getSpaceId());
return search0(pageQueryVo);
}
@Operation(summary = "统一日志查询API调用")
@RequestMapping(path = "/apikey/list", method = RequestMethod.POST)
public ReqResult<IPage<LogDocument>> apiInvokeSearch(@RequestBody PageQueryVo<LogQueryDto> pageQueryVo) {
var filter = pageQueryVo.getQueryFilter();
if (filter == null) {
pageQueryVo.setQueryFilter(new LogQueryDto());
filter = pageQueryVo.getQueryFilter();
}
filter.setTargetType("ApiKey");
filter.setUserId(RequestContext.get().getUserId());
return search0(pageQueryVo);
}
@RequireResource(SPACE_LOG_QUERY_DETAIL)
@Operation(summary = "日志详情")
@RequestMapping(path = "/detail", method = RequestMethod.POST)
public ReqResult<LogDocument> detail(@RequestBody LogDetailQueryDto logDetailQueryDto) {
DocumentSearchRequest.DocumentSearchRequestBuilder builder = DocumentSearchRequest.builder();
builder.searchDocumentClazz(LogDocument.class);
List<Map<String, Object>> filterFieldsAndValues = new ArrayList<>();
builder.filterFieldsAndValues(filterFieldsAndValues);
if (StringUtils.isNoneBlank(logDetailQueryDto.getId())) {
filterFieldsAndValues.add(Map.of("id", logDetailQueryDto.getId()));
}
SearchResult search = iSearchRpcService.search(builder.build());
LogDocument logDocument = search.getItems().stream().map(item -> (LogDocument) item.getDocument()).findFirst().orElse(null);
if (logDocument == null) {
return ReqResult.error("日志不存在");
}
if (!RequestContext.get().getUserId().equals(logDocument.getUserId())) {
spacePermissionService.checkSpaceUserPermission(logDocument.getSpaceId());
}
return ReqResult.success(logDocument);
}
}

View File

@@ -0,0 +1,73 @@
package com.xspaceagi.log.web.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xspaceagi.log.sdk.request.DocumentSearchRequest;
import com.xspaceagi.log.sdk.service.ISearchRpcService;
import com.xspaceagi.log.sdk.vo.LogDocument;
import com.xspaceagi.log.sdk.vo.SearchResult;
import com.xspaceagi.log.web.controller.base.BaseController;
import com.xspaceagi.log.web.controller.dto.LogDetailQueryDto;
import com.xspaceagi.log.web.controller.dto.LogQueryDto;
import com.xspaceagi.system.spec.annotation.RequireResource;
import com.xspaceagi.system.spec.common.RequestContext;
import com.xspaceagi.system.spec.dto.ReqResult;
import com.xspaceagi.system.spec.exception.LogPlatformException;
import com.xspaceagi.system.spec.page.PageQueryVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.xspaceagi.system.spec.enums.ResourceEnum.SYSTEM_RUNNING_LOG_QUERY_DETAIL;
import static com.xspaceagi.system.spec.enums.ResourceEnum.SYSTEM_RUNNING_LOG_QUERY_LIST;
@Tag(name = "日志平台管理端-搜索接口")
@RestController
@RequestMapping("/api/system/requestLogs")
@Slf4j
public class LogQueryManController extends BaseController {
@Resource
private ISearchRpcService iSearchRpcService;
@RequireResource({SYSTEM_RUNNING_LOG_QUERY_LIST})
@Operation(summary = "统一日志查询")
@RequestMapping(path = "/list", method = RequestMethod.POST)
public ReqResult<IPage<LogDocument>> search(@RequestBody PageQueryVo<LogQueryDto> pageQueryVo) {
return search0(pageQueryVo);
}
@RequireResource({SYSTEM_RUNNING_LOG_QUERY_DETAIL})
@Operation(summary = "日志详情")
@RequestMapping(path = "/detail", method = RequestMethod.POST)
public ReqResult<LogDocument> detail(@RequestBody LogDetailQueryDto logDetailQueryDto) {
DocumentSearchRequest.DocumentSearchRequestBuilder builder = DocumentSearchRequest.builder();
builder.searchDocumentClazz(LogDocument.class);
List<Map<String, Object>> filterFieldsAndValues = new ArrayList<>();
builder.filterFieldsAndValues(filterFieldsAndValues);
if (StringUtils.isNoneBlank(logDetailQueryDto.getId())) {
filterFieldsAndValues.add(Map.of("id", logDetailQueryDto.getId()));
}
SearchResult search = iSearchRpcService.search(builder.build());
LogDocument logDocument = search.getItems().stream().map(item -> (LogDocument) item.getDocument()).findFirst().orElse(null);
if (logDocument == null) {
return ReqResult.error("日志不存在");
}
return ReqResult.success(logDocument);
}
}

View File

@@ -0,0 +1,116 @@
package com.xspaceagi.log.web.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xspaceagi.domain.model.AgentLogModel;
import com.xspaceagi.domain.model.valueobj.AgentLogSearchParams;
import com.xspaceagi.log.app.service.LogPlatformApplicationService;
import com.xspaceagi.log.sdk.request.AgentLogDetailParamsRequest;
import com.xspaceagi.log.web.controller.base.BaseController;
import com.xspaceagi.log.web.controller.dto.AgentLogSearchParamsRequest;
import com.xspaceagi.system.sdk.operate.ActionType;
import com.xspaceagi.system.sdk.operate.OperationLogReporter;
import com.xspaceagi.system.sdk.operate.SystemEnum;
import com.xspaceagi.system.spec.dto.ReqResult;
import com.xspaceagi.system.spec.exception.LogPlatformException;
import com.xspaceagi.system.spec.page.PageQueryVo;
import com.xspaceagi.system.application.service.SpaceApplicationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "日志平台-搜索接口")
@RestController
@RequestMapping("/api/logPlatform/agent")
@Slf4j
public class LogSearchController extends BaseController {
@Resource
private SpaceApplicationService spaceApplicationService;
@Resource
private LogPlatformApplicationService logPlatformApplicationService;
@OperationLogReporter(actionType = ActionType.QUERY, action = "数据列表查询", objectName = "智能体日志", systemCode = SystemEnum.LOG_PLATFORM)
@Operation(summary = "日志查询")
@RequestMapping(path = "/list", method = RequestMethod.POST)
public ReqResult<IPage<AgentLogModel>> search(
@RequestBody PageQueryVo<AgentLogSearchParamsRequest> pageQueryVo) {
var userContext = this.getUser();
var userId = userContext.getUserId();
var filter = pageQueryVo.getQueryFilter();
if (filter == null) {
return ReqResult.error("查询条件不能为空");
}
// 查询用户有权限的空间,限制访问空间
var spaceList = this.spaceApplicationService.queryListByUserId(userId);
var authSpaceIds = spaceList.stream().map(space -> String.valueOf(space.getId())).toList();
var tenantId = userContext.getTenantId();
// 转换前端请求为领域模型
AgentLogSearchParams searchParams = AgentLogSearchParamsRequest.convertFrom(filter);
// 设置租户ID从用户上下文获取
searchParams.setTenantId(tenantId.toString());
searchParams.setSpaceId(authSpaceIds);
try {
// 使用 logPlatformApplicationService 接口查询日志
IPage<AgentLogModel> result = logPlatformApplicationService.searchAgentLogs(
searchParams,
pageQueryVo.getCurrent(),
pageQueryVo.getPageSize());
return ReqResult.success(result);
} catch (LogPlatformException e) {
log.error("Log search failed: {}", e.getMessage(), e);
return ReqResult.error(e.getCode(), e.getMessage());
} catch (Exception e) {
log.error("Unknown error during log search", e);
return ReqResult.error("日志搜索发生未知错误: " + e.getMessage());
}
}
@OperationLogReporter(actionType = ActionType.QUERY, action = "数据列表查询", objectName = "智能体日志", systemCode = SystemEnum.LOG_PLATFORM)
@Operation(summary = "日志详情")
@RequestMapping(path = "/detail", method = RequestMethod.POST)
public ReqResult<AgentLogModel> detail(
@RequestBody AgentLogDetailParamsRequest request) {
var userContext = this.getUser();
var userId = userContext.getUserId();
// 查询用户有权限的空间,限制访问空间
var spaceList = this.spaceApplicationService.queryListByUserId(userId);
var authSpaceIds = spaceList.stream().map(space -> String.valueOf(space.getId())).toList();
var tenantId = userContext.getTenantId();
// 转换前端请求为领域模型
AgentLogSearchParams searchParams = AgentLogSearchParamsRequest.convertFrom(request);
// 设置租户ID从用户上下文获取
searchParams.setTenantId(tenantId.toString());
searchParams.setSpaceId(authSpaceIds);
try {
// 使用 logPlatformApplicationService 接口查询日志
AgentLogModel result = logPlatformApplicationService.queryOneAgentLog(searchParams);
return ReqResult.success(result);
} catch (LogPlatformException e) {
log.error("日志详情失败: {}", e.getMessage(), e);
return ReqResult.error(e.getCode(), e.getMessage());
} catch (Exception e) {
log.error("Unknown error while loading log detail", e);
return ReqResult.error("日志搜索发生未知错误: " + e.getMessage());
}
}
}

View File

@@ -0,0 +1,149 @@
package com.xspaceagi.log.web.controller.base;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xspaceagi.log.sdk.request.DocumentSearchRequest;
import com.xspaceagi.log.sdk.service.ISearchRpcService;
import com.xspaceagi.log.sdk.vo.LogDocument;
import com.xspaceagi.log.web.controller.dto.LogQueryDto;
import com.xspaceagi.system.spec.common.RequestContext;
import com.xspaceagi.system.spec.common.UserContext;
import com.xspaceagi.system.application.dto.UserDto;
import com.xspaceagi.system.infra.dao.entity.User;
import com.xspaceagi.system.spec.dto.ReqResult;
import com.xspaceagi.system.spec.exception.LogPlatformException;
import com.xspaceagi.system.spec.page.PageQueryVo;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
public abstract class BaseController {
@Resource
private ISearchRpcService iSearchRpcService;
/**
* 获取当前登录用户信息
*
* @return
*/
public UserContext getUser() {
var userDto = (UserDto) RequestContext.get().getUser();
return UserContext.builder()
.userId(userDto.getId())
.userName(userDto.getUserName())
.nickName(userDto.getNickName())
.email(userDto.getEmail())
.phone(userDto.getPhone())
.status(userDto.getStatus() == User.Status.Enabled ? 1 : -1)
.tenantId(userDto.getTenantId())
.tenantName(null)
.orgId(null)
.orgName(null)
.roleType(null)
.build();
}
protected ReqResult<IPage<LogDocument>> search0(@RequestBody PageQueryVo<LogQueryDto> pageQueryVo) {
var filter = pageQueryVo.getQueryFilter();
if (filter == null) {
filter = new LogQueryDto();
}
if (pageQueryVo.getPageSize() == null || pageQueryVo.getPageSize() <= 0) {
pageQueryVo.setPageSize(10L);
}
if (pageQueryVo.getCurrent() == null || pageQueryVo.getCurrent() <= 0) {
pageQueryVo.setCurrent(1L);
}
// 避免到最后一页报错
if (pageQueryVo.getCurrent() * pageQueryVo.getPageSize() > 10000) {
pageQueryVo.setCurrent(pageQueryVo.getCurrent() - 1);
}
DocumentSearchRequest.DocumentSearchRequestBuilder builder = DocumentSearchRequest.builder();
builder.searchDocumentClazz(LogDocument.class);
builder.from((int) (pageQueryVo.getPageSize() * (pageQueryVo.getCurrent() - 1)));
builder.size(pageQueryVo.getPageSize().intValue());
List<Map<String, Object>> filterFieldsAndValues = new ArrayList<>();
builder.filterFieldsAndValues(filterFieldsAndValues);
filterFieldsAndValues.add(Map.of("tenantId", RequestContext.get().getTenantId()));
if (StringUtils.isNoneBlank(filter.getInput())) {
filterFieldsAndValues.add(Map.of("input", Map.of("express", "match", "query", filter.getInput())));
}
if (StringUtils.isNoneBlank(filter.getOutput())) {
filterFieldsAndValues.add(Map.of("output", Map.of("express", "match", "query", filter.getOutput())));
}
if (StringUtils.isNoneBlank(filter.getProcessData())) {
filterFieldsAndValues.add(Map.of("processData", filter.getProcessData()));
}
if (StringUtils.isNoneBlank(filter.getRequestId())) {
filterFieldsAndValues.add(Map.of("requestId", filter.getRequestId()));
}
if (StringUtils.isNoneBlank(filter.getResultCode())) {
filterFieldsAndValues.add(Map.of("resultCode", filter.getResultCode()));
}
if (StringUtils.isNoneBlank(filter.getConversationId())) {
filterFieldsAndValues.add(Map.of("conversationId", filter.getConversationId()));
}
if (StringUtils.isNoneBlank(filter.getTargetId())) {
filterFieldsAndValues.add(Map.of("targetId", filter.getTargetId()));
}
if (StringUtils.isNoneBlank(filter.getTargetName())) {
filterFieldsAndValues.add(Map.of("targetName", filter.getTargetName()));
}
if (StringUtils.isNoneBlank(filter.getTargetType())) {
filterFieldsAndValues.add(Map.of("targetType", filter.getTargetType()));
}
if (StringUtils.isNoneBlank(filter.getUserName())) {
filterFieldsAndValues.add(Map.of("userName", filter.getUserName()));
}
if (StringUtils.isNoneBlank(filter.getFrom())) {
filterFieldsAndValues.add(Map.of("from", filter.getFrom()));
}
if (filter.getUserId() != null) {
filterFieldsAndValues.add(Map.of("userId", filter.getUserId()));
}
if (filter.getSpaceId() != null) {
filterFieldsAndValues.add(Map.of("spaceId", filter.getSpaceId()));
}
Map<String, Object> createTimeRange = new HashMap<>();
if (filter.getCreateTimeGt() != null) {
createTimeRange.put("gt", filter.getCreateTimeGt());
}
if (filter.getCreateTimeLt() != null) {
createTimeRange.put("lt", filter.getCreateTimeLt());
}
if (!createTimeRange.isEmpty()) {
createTimeRange.put("express", "range");
filterFieldsAndValues.add(Map.of("createTime", createTimeRange));
}
builder.sortFieldsAndValues(Map.of("createTime", "Desc"));
var result = iSearchRpcService.search(builder.build());
try {
IPage<LogDocument> page = new Page<>(pageQueryVo.getCurrent().intValue(), pageQueryVo.getPageSize().intValue());
page.setTotal(result.getTotal());
page.setRecords(result.getItems().stream().map(item -> {
LogDocument document = (LogDocument) item.getDocument();
document.setProcessData(null);
return document;
}).collect(Collectors.toList()));
return ReqResult.success(page);
} catch (LogPlatformException e) {
log.error("Log search failed: {}", e.getMessage(), e);
return ReqResult.error(e.getCode(), e.getMessage());
} catch (Exception e) {
log.error("Unknown error during log search", e);
return ReqResult.error("日志搜索发生未知错误: " + e.getMessage());
}
}
}

View File

@@ -0,0 +1,173 @@
package com.xspaceagi.log.web.controller.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.xspaceagi.domain.model.valueobj.AgentLogSearchParams;
import com.xspaceagi.log.sdk.request.AgentLogDetailParamsRequest;
import com.xspaceagi.log.spec.FlexibleDateTimeDeserializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
/**
* 日志搜索请求参数
* 对应 Rust 的 AgentLogSearchParams 结构
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AgentLogSearchParamsRequest {
/**
* 请求ID
*/
@Schema(description = "请求ID")
private String requestId;
/**
* 消息ID
*/
@Schema(description = "消息ID")
private String messageId;
/**
* 智能体ID
*/
@Schema(description = "智能体ID")
private String agentId;
/**
* 会话ID
*/
@Schema(description = "会话ID")
private String conversationId;
/**
* 用户UID
*/
@Schema(description = "用户UID")
private String userUid;
/**
* 用户输入,需要支持全文检索支持多个关键字AND关系
*/
@Schema(description = "用户输入,需要支持全文检索支持多个关键字AND关系")
private List<String> userInput;
/**
* 系统输出,需要支持全文检索支持多个关键字AND关系
*/
@Schema(description = "系统输出,需要支持全文检索支持多个关键字AND关系")
private List<String> output;
/**
* 开始时间
*/
@Schema(description = "开始时间支持RFC 3339格式例如2024-05-15T10:30:00Z")
@JsonDeserialize(using = FlexibleDateTimeDeserializer.class)
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", shape = JsonFormat.Shape.STRING)
private LocalDateTime startTime;
/**
* 结束时间
*/
@Schema(description = "结束时间支持RFC 3339格式例如2024-05-15T10:30:00Z")
@JsonDeserialize(using = FlexibleDateTimeDeserializer.class)
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss'Z'", shape = JsonFormat.Shape.STRING)
private LocalDateTime endTime;
/**
* 租户ID用于租户隔离确保只查询特定租户的日志
*/
@Schema(description = "租户ID用于租户隔离确保只查询特定租户的日志")
private String tenantId;
/**
* 空间ID可选用于查询特定空间的日志支持多个IDOR关系
*/
@Schema(description = "空间ID可选用于查询特定空间的日志支持多个IDOR关系")
private List<String> spaceId;
public static AgentLogSearchParams convertFrom(AgentLogSearchParamsRequest request) {
if (request == null) {
return null;
}
// request 处理下面的String字段的2边的空白,使用trim(),如果不为空的话
if (request.getRequestId() != null) {
request.setRequestId(request.getRequestId().trim());
}
if (request.getMessageId() != null) {
request.setMessageId(request.getMessageId().trim());
}
if (request.getAgentId() != null) {
request.setAgentId(request.getAgentId().trim());
}
if (request.getConversationId() != null) {
request.setConversationId(request.getConversationId().trim());
}
if (request.getUserUid() != null) {
request.setUserUid(request.getUserUid().trim());
}
if (request.getTenantId() != null) {
request.setTenantId(request.getTenantId().trim());
}
if (request.getSpaceId() != null) {
var spaceId = request.getSpaceId().stream().map(item -> {
if (item != null) {
item = item.trim();
}
return item;
}).toList();
request.setSpaceId(spaceId);
}
if (request.getUserInput() != null) {
var userInput = request.getUserInput().stream().map(item -> {
if (item != null) {
item = item.trim();
}
return item;
}).toList();
request.setUserInput(userInput);
}
if (request.getOutput() != null) {
var output = request.getOutput().stream().map(item -> {
if (item != null) {
item = item.trim();
}
return item;
}).toList();
request.setOutput(output);
}
return AgentLogSearchParams.builder()
.requestId(request.getRequestId())
.messageId(request.getMessageId())
.agentId(request.getAgentId())
.conversationId(request.getConversationId())
.userUid(request.getUserUid())
.tenantId(request.getTenantId())
.spaceId(request.getSpaceId())
.userInput(request.getUserInput())
.output(request.getOutput())
.startTime(request.getStartTime())
.endTime(request.getEndTime())
.build();
}
public static AgentLogSearchParams convertFrom(AgentLogDetailParamsRequest request) {
return AgentLogSearchParams.builder()
.requestId(request.getRequestId())
.messageId(null)
.agentId(request.getAgentId())
.conversationId(null)
.userUid(null)
.tenantId(null)
.spaceId(null)
.build();
}
}

View File

@@ -0,0 +1,8 @@
package com.xspaceagi.log.web.controller.dto;
import lombok.Data;
@Data
public class LogDetailQueryDto {
private String id;
}

View File

@@ -0,0 +1,63 @@
package com.xspaceagi.log.web.controller.dto;
import com.xspaceagi.log.sdk.annotation.SearchField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class LogQueryDto {
@Schema(description = "请求唯一标识可以用于关联一次请求中所有相关的操作")
@SearchField(keyword = true)
private String requestId;
@Schema(description = "日志产生对象所在的空间ID")
private Long spaceId;
@Schema(description = "请求发起的用户ID")
private Long userId;
@Schema(description = "用户名")
@SearchField(keyword = true)
private String userName;
@Schema(description = "日志对象类型Agent、Plugin、Workflow、Mcp")
@SearchField(keyword = true)
private String targetType;
@Schema(description = "日志对象名称")
@SearchField(keyword = true)
private String targetName;
@Schema(description = "日志对象ID")
@SearchField(keyword = true)
private String targetId;
@Schema(description = "会话ID")
@SearchField(keyword = true)
private String conversationId;
@Schema(description = "输入参数")
@SearchField(store = true)
private String input;
@Schema(description = "执行结果")
@SearchField(store = true)
private String output;
@Schema(description = "执行过程数据")
@SearchField(store = true)
private String processData;
@Schema(description = "执行结果码 0000为成功")
@SearchField(keyword = true)
private String resultCode;
@Schema(description = "日志产生时间(大于)")
private Long createTimeGt;
@Schema(description = "日志产生时间(小于)")
private Long createTimeLt;
@Schema(description = "日志产生来源task_center 任务中心(从任务中心点击查看详情时带上该参数)")
private String from;
}

View File

@@ -0,0 +1,32 @@
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>repack</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<!--
重新打包需要包含的jar包,这个过程会解压所有的jar包并按照jar的规则重新组合成一个jar包
这里需要包含当前这个工程 ,格式是{groupId}:{artifactId}
-->
<includes>
<!-- 包含项目自己 -->
<include>com.xspaceagi:app-platform-log-web</include>
<include>com.xspaceagi:app-platform-log-application</include>
<include>com.xspaceagi:app-platform-log-domain</include>
<include>com.xspaceagi:app-platform-log-infra</include>
<include>com.xspaceagi:app-platform-log-spec</include>
</includes>
<!-- 打包结果目录:/ 表示target/ -->
<outputDirectory>/</outputDirectory>
<!-- 是否解压依赖 -->
<unpack>true</unpack>
<!-- 打包的scope -->
<!-- <scope>system</scope>-->
</dependencySet>
</dependencySets>
</assembly>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>app-platform-log-web</artifactId>
<groupId>com.xspaceagi</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>app-platform-log-web</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>