diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramStore.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramStore.java new file mode 100644 index 00000000..12ff6d7d --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramStore.java @@ -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 findByContentHash(String contentHash); + + Optional findContentHashForRoute(String routeId, String agentId); + + Optional findContentHashForRouteByAgents(String routeId, List agentIds); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java new file mode 100644 index 00000000..ae45577e --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java @@ -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 processors); + + Optional findById(String executionId); + + List 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 + ) {} +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsStore.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsStore.java new file mode 100644 index 00000000..b7af4122 --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsStore.java @@ -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 snapshots); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/SearchIndex.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/SearchIndex.java new file mode 100644 index 00000000..e06379ac --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/SearchIndex.java @@ -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 search(SearchRequest request); + + long count(SearchRequest request); + + void index(ExecutionDocument document); + + void delete(String executionId); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/StatsStore.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/StatsStore.java new file mode 100644 index 00000000..05931a86 --- /dev/null +++ b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/StatsStore.java @@ -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 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 agentIds); + + // Per-processor timeseries + StatsTimeseries timeseriesForProcessor(Instant from, Instant to, int bucketCount, + String routeId, String processorType); +}