Server-side sorting for execution search results
All checks were successful
CI / build (push) Successful in 1m12s
CI / docker (push) Successful in 50s
CI / deploy (push) Successful in 33s

Sorting now applies to the entire result set via ClickHouse ORDER BY
instead of only sorting the current page client-side. Default sort
order is timestamp descending. Supported sort columns: startTime,
status, agentId, routeId, correlationId, durationMs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-14 19:34:22 +01:00
parent 31b8695420
commit b64edaa16f
7 changed files with 83 additions and 44 deletions

View File

@@ -47,7 +47,9 @@ public class SearchController {
@RequestParam(required = false) String agentId,
@RequestParam(required = false) String processorType,
@RequestParam(defaultValue = "0") int offset,
@RequestParam(defaultValue = "50") int limit) {
@RequestParam(defaultValue = "50") int limit,
@RequestParam(required = false) String sortField,
@RequestParam(required = false) String sortDir) {
SearchRequest request = new SearchRequest(
status, timeFrom, timeTo,
@@ -55,7 +57,8 @@ public class SearchController {
correlationId,
text, null, null, null,
routeId, agentId, processorType,
offset, limit
offset, limit,
sortField, sortDir
);
return ResponseEntity.ok(searchService.search(request));

View File

@@ -51,10 +51,11 @@ public class ClickHouseSearchEngine implements SearchEngine {
// Data query
params.add(request.limit());
params.add(request.offset());
String orderDir = "asc".equalsIgnoreCase(request.sortDir()) ? "ASC" : "DESC";
String dataSql = "SELECT execution_id, route_id, agent_id, status, start_time, end_time, " +
"duration_ms, correlation_id, error_message, diagram_content_hash " +
"FROM route_executions" + where +
" ORDER BY start_time DESC LIMIT ? OFFSET ?";
" ORDER BY " + request.sortColumn() + " " + orderDir + " LIMIT ? OFFSET ?";
List<ExecutionSummary> data = jdbcTemplate.query(dataSql, (rs, rowNum) -> {
Timestamp endTs = rs.getTimestamp("end_time");