From 21991b6cf81b9199ac4a398a997b837350c8d7a4 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Tue, 31 Mar 2026 17:07:35 +0200 Subject: [PATCH] feat: wire MetricsStore and MetricsQueryStore with feature flag Co-Authored-By: Claude Sonnet 4.6 --- .../server/app/config/StorageBeanConfig.java | 28 ++++++++++++++++++- .../app/storage/PostgresMetricsStore.java | 2 -- 2 files changed, 27 insertions(+), 3 deletions(-) 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 44a78555..71b5bf7d 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 @@ -1,6 +1,9 @@ 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.PostgresMetricsQueryStore; +import com.cameleer3.server.app.storage.PostgresMetricsStore; import com.cameleer3.server.core.admin.AuditRepository; import com.cameleer3.server.core.admin.AuditService; import com.cameleer3.server.core.detail.DetailService; @@ -9,7 +12,9 @@ import com.cameleer3.server.core.ingestion.IngestionService; import com.cameleer3.server.core.ingestion.WriteBuffer; import com.cameleer3.server.core.storage.*; import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; @@ -45,7 +50,28 @@ public class StorageBeanConfig { } @Bean - public MetricsQueryStore metricsQueryStore(JdbcTemplate jdbc) { + @ConditionalOnProperty(name = "cameleer.storage.metrics", havingValue = "clickhouse") + public MetricsStore clickHouseMetricsStore( + @Qualifier("clickHouseJdbcTemplate") JdbcTemplate clickHouseJdbc) { + return new ClickHouseMetricsStore(clickHouseJdbc); + } + + @Bean + @ConditionalOnProperty(name = "cameleer.storage.metrics", havingValue = "postgres", matchIfMissing = true) + public MetricsStore postgresMetricsStore(JdbcTemplate jdbc) { + return new PostgresMetricsStore(jdbc); + } + + @Bean + @ConditionalOnProperty(name = "cameleer.storage.metrics", havingValue = "clickhouse") + public MetricsQueryStore clickHouseMetricsQueryStore( + @Qualifier("clickHouseJdbcTemplate") JdbcTemplate clickHouseJdbc) { + return new ClickHouseMetricsQueryStore(clickHouseJdbc); + } + + @Bean + @ConditionalOnProperty(name = "cameleer.storage.metrics", havingValue = "postgres", matchIfMissing = true) + public MetricsQueryStore postgresMetricsQueryStore(JdbcTemplate jdbc) { return new PostgresMetricsQueryStore(jdbc); } } diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsStore.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsStore.java index 8b8fed63..9d63e638 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsStore.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsStore.java @@ -5,12 +5,10 @@ import com.cameleer3.server.core.storage.model.MetricsSnapshot; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Repository; import java.sql.Timestamp; import java.util.List; -@Repository public class PostgresMetricsStore implements MetricsStore { private static final ObjectMapper MAPPER = new ObjectMapper();