feat: add new storage interfaces for PostgreSQL/OpenSearch backends
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
package com.cameleer3.server.core.storage;
|
||||||
|
|
||||||
|
import com.cameleer3.common.graph.RouteGraph;
|
||||||
|
import com.cameleer3.server.core.ingestion.TaggedDiagram;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface DiagramStore {
|
||||||
|
|
||||||
|
void store(TaggedDiagram diagram);
|
||||||
|
|
||||||
|
Optional<RouteGraph> findByContentHash(String contentHash);
|
||||||
|
|
||||||
|
Optional<String> findContentHashForRoute(String routeId, String agentId);
|
||||||
|
|
||||||
|
Optional<String> findContentHashForRouteByAgents(String routeId, List<String> agentIds);
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.cameleer3.server.core.storage;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface ExecutionStore {
|
||||||
|
|
||||||
|
void upsert(ExecutionRecord execution);
|
||||||
|
|
||||||
|
void upsertProcessors(String executionId, Instant startTime,
|
||||||
|
String groupName, String routeId,
|
||||||
|
List<ProcessorRecord> processors);
|
||||||
|
|
||||||
|
Optional<ExecutionRecord> findById(String executionId);
|
||||||
|
|
||||||
|
List<ProcessorRecord> findProcessors(String executionId);
|
||||||
|
|
||||||
|
record ExecutionRecord(
|
||||||
|
String executionId, String routeId, String agentId, String groupName,
|
||||||
|
String status, String correlationId, String exchangeId,
|
||||||
|
Instant startTime, Instant endTime, Long durationMs,
|
||||||
|
String errorMessage, String errorStacktrace, String diagramContentHash
|
||||||
|
) {}
|
||||||
|
|
||||||
|
record ProcessorRecord(
|
||||||
|
String executionId, String processorId, String processorType,
|
||||||
|
String diagramNodeId, String groupName, String routeId,
|
||||||
|
int depth, String parentProcessorId, String status,
|
||||||
|
Instant startTime, Instant endTime, Long durationMs,
|
||||||
|
String errorMessage, String errorStacktrace,
|
||||||
|
String inputBody, String outputBody, String inputHeaders, String outputHeaders
|
||||||
|
) {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.cameleer3.server.core.storage;
|
||||||
|
|
||||||
|
import com.cameleer3.server.core.storage.model.MetricsSnapshot;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface MetricsStore {
|
||||||
|
|
||||||
|
void insertBatch(List<MetricsSnapshot> snapshots);
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.cameleer3.server.core.storage;
|
||||||
|
|
||||||
|
import com.cameleer3.server.core.search.ExecutionSummary;
|
||||||
|
import com.cameleer3.server.core.search.SearchRequest;
|
||||||
|
import com.cameleer3.server.core.search.SearchResult;
|
||||||
|
import com.cameleer3.server.core.storage.model.ExecutionDocument;
|
||||||
|
|
||||||
|
public interface SearchIndex {
|
||||||
|
|
||||||
|
SearchResult<ExecutionSummary> search(SearchRequest request);
|
||||||
|
|
||||||
|
long count(SearchRequest request);
|
||||||
|
|
||||||
|
void index(ExecutionDocument document);
|
||||||
|
|
||||||
|
void delete(String executionId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.cameleer3.server.core.storage;
|
||||||
|
|
||||||
|
import com.cameleer3.server.core.search.ExecutionStats;
|
||||||
|
import com.cameleer3.server.core.search.StatsTimeseries;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface StatsStore {
|
||||||
|
|
||||||
|
// Global stats (stats_1m_all)
|
||||||
|
ExecutionStats stats(Instant from, Instant to);
|
||||||
|
|
||||||
|
// Per-app stats (stats_1m_app)
|
||||||
|
ExecutionStats statsForApp(Instant from, Instant to, String groupName);
|
||||||
|
|
||||||
|
// Per-route stats (stats_1m_route), optionally scoped to specific agents
|
||||||
|
ExecutionStats statsForRoute(Instant from, Instant to, String routeId, List<String> agentIds);
|
||||||
|
|
||||||
|
// Per-processor stats (stats_1m_processor)
|
||||||
|
ExecutionStats statsForProcessor(Instant from, Instant to, String routeId, String processorType);
|
||||||
|
|
||||||
|
// Global timeseries
|
||||||
|
StatsTimeseries timeseries(Instant from, Instant to, int bucketCount);
|
||||||
|
|
||||||
|
// Per-app timeseries
|
||||||
|
StatsTimeseries timeseriesForApp(Instant from, Instant to, int bucketCount, String groupName);
|
||||||
|
|
||||||
|
// Per-route timeseries, optionally scoped to specific agents
|
||||||
|
StatsTimeseries timeseriesForRoute(Instant from, Instant to, int bucketCount,
|
||||||
|
String routeId, List<String> agentIds);
|
||||||
|
|
||||||
|
// Per-processor timeseries
|
||||||
|
StatsTimeseries timeseriesForProcessor(Instant from, Instant to, int bucketCount,
|
||||||
|
String routeId, String processorType);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user