From 9df00fdde0a333dc232e7d66c7ed6a3320cba64e Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Tue, 31 Mar 2026 21:51:45 +0200 Subject: [PATCH] feat(clickhouse): wire ClickHouseStatsStore with cameleer.storage.stats feature flag (default: clickhouse) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../server/app/config/StorageBeanConfig.java | 11 +++++++++++ .../server/app/storage/PostgresStatsStore.java | 2 ++ .../src/main/resources/application.yml | 1 + deploy/base/server.yaml | 2 ++ 4 files changed, 16 insertions(+) diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java index ab733408..c0cf7c5d 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java @@ -2,6 +2,7 @@ package com.cameleer3.server.app.config; import com.cameleer3.server.app.storage.ClickHouseMetricsQueryStore; import com.cameleer3.server.app.storage.ClickHouseMetricsStore; +import com.cameleer3.server.app.storage.ClickHouseStatsStore; import com.cameleer3.server.app.storage.PostgresMetricsQueryStore; import com.cameleer3.server.app.storage.PostgresMetricsStore; import com.cameleer3.server.core.admin.AuditRepository; @@ -16,6 +17,7 @@ import com.cameleer3.server.core.ingestion.IngestionService; import com.cameleer3.server.core.ingestion.MergedExecution; import com.cameleer3.server.core.ingestion.WriteBuffer; import com.cameleer3.server.core.storage.*; +import com.cameleer3.server.core.storage.StatsStore; import com.cameleer3.server.core.storage.model.MetricsSnapshot; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; @@ -118,4 +120,13 @@ public class StorageBeanConfig { @Qualifier("clickHouseJdbcTemplate") JdbcTemplate clickHouseJdbc) { return new ClickHouseSearchIndex(clickHouseJdbc); } + + // ── ClickHouse Stats Store ───────────────────────────────────────── + + @Bean + @ConditionalOnProperty(name = "cameleer.storage.stats", havingValue = "clickhouse", matchIfMissing = true) + public StatsStore clickHouseStatsStore( + @Qualifier("clickHouseJdbcTemplate") JdbcTemplate clickHouseJdbc) { + return new ClickHouseStatsStore(clickHouseJdbc); + } } diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresStatsStore.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresStatsStore.java index 563c5893..638b2da5 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresStatsStore.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresStatsStore.java @@ -5,6 +5,7 @@ import com.cameleer3.server.core.search.StatsTimeseries; import com.cameleer3.server.core.search.StatsTimeseries.TimeseriesBucket; import com.cameleer3.server.core.search.TopError; import com.cameleer3.server.core.storage.StatsStore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @@ -18,6 +19,7 @@ import java.util.List; import java.util.Map; @Repository +@ConditionalOnProperty(name = "cameleer.storage.stats", havingValue = "postgres") public class PostgresStatsStore implements StatsStore { private final JdbcTemplate jdbc; diff --git a/cameleer3-server-app/src/main/resources/application.yml b/cameleer3-server-app/src/main/resources/application.yml index 55cd27e1..fb33265c 100644 --- a/cameleer3-server-app/src/main/resources/application.yml +++ b/cameleer3-server-app/src/main/resources/application.yml @@ -51,6 +51,7 @@ cameleer: storage: metrics: ${CAMELEER_STORAGE_METRICS:postgres} search: ${CAMELEER_STORAGE_SEARCH:opensearch} + stats: ${CAMELEER_STORAGE_STATS:clickhouse} security: access-token-expiry-ms: 3600000 diff --git a/deploy/base/server.yaml b/deploy/base/server.yaml index 06c131a3..0f76b3fb 100644 --- a/deploy/base/server.yaml +++ b/deploy/base/server.yaml @@ -93,6 +93,8 @@ spec: value: "postgres" - name: CAMELEER_STORAGE_SEARCH value: "opensearch" + - name: CAMELEER_STORAGE_STATS + value: "clickhouse" resources: requests: