chore: rename cameleer3 to cameleer
Some checks failed
CI / cleanup-branch (push) Has been skipped
CI / build (push) Failing after 18s
CI / docker (push) Has been skipped
CI / deploy (push) Has been skipped
CI / deploy-feature (push) Has been skipped

Rename Java packages from com.cameleer3 to com.cameleer, module
directories from cameleer3-* to cameleer-*, and all references
throughout workflows, Dockerfiles, docs, migrations, and pom.xml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-15 15:28:42 +02:00
parent 1077293343
commit cb3ebfea7c
569 changed files with 4356 additions and 3245 deletions

View File

@@ -16,20 +16,20 @@
| Action | File | Responsibility |
|--------|------|----------------|
| Modify | `cameleer3-server-app/pom.xml` | Add clickhouse-jdbc + testcontainers-clickhouse dependencies |
| Modify | `cameleer3-server-app/src/main/resources/application.yml` | Add `clickhouse.*` and `cameleer.storage.metrics` config keys |
| Create | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java` | ClickHouse DataSource + JdbcTemplate beans |
| Create | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java` | Config properties class for `clickhouse.*` prefix |
| Create | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java` | Runs idempotent DDL on startup |
| Create | `cameleer3-server-app/src/main/resources/clickhouse/V1__agent_metrics.sql` | DDL for `agent_metrics` table |
| Create | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsStore.java` | `MetricsStore` impl writing to ClickHouse |
| Create | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsQueryStore.java` | Interface: query metrics time-series |
| Create | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsQueryStore.java` | PG impl of MetricsQueryStore (extracted from controller) |
| Create | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java` | CH impl of MetricsQueryStore |
| Modify | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java` | Use MetricsQueryStore instead of raw JdbcTemplate |
| Modify | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java` | Conditional beans for PG vs CH metrics stores |
| Create | `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsStoreTest.java` | Unit test |
| Create | `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStoreTest.java` | Unit test |
| Modify | `cameleer-server-app/pom.xml` | Add clickhouse-jdbc + testcontainers-clickhouse dependencies |
| Modify | `cameleer-server-app/src/main/resources/application.yml` | Add `clickhouse.*` and `cameleer.storage.metrics` config keys |
| Create | `cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java` | ClickHouse DataSource + JdbcTemplate beans |
| Create | `cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseProperties.java` | Config properties class for `clickhouse.*` prefix |
| Create | `cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseSchemaInitializer.java` | Runs idempotent DDL on startup |
| Create | `cameleer-server-app/src/main/resources/clickhouse/V1__agent_metrics.sql` | DDL for `agent_metrics` table |
| Create | `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsStore.java` | `MetricsStore` impl writing to ClickHouse |
| Create | `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsQueryStore.java` | Interface: query metrics time-series |
| Create | `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresMetricsQueryStore.java` | PG impl of MetricsQueryStore (extracted from controller) |
| Create | `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStore.java` | CH impl of MetricsQueryStore |
| Modify | `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java` | Use MetricsQueryStore instead of raw JdbcTemplate |
| Modify | `cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java` | Conditional beans for PG vs CH metrics stores |
| Create | `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsStoreTest.java` | Unit test |
| Create | `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStoreTest.java` | Unit test |
| Create | `deploy/clickhouse.yaml` | K8s StatefulSet + Service for ClickHouse |
| Modify | `deploy/base/server.yaml` | Add CLICKHOUSE_URL env var |
@@ -38,11 +38,11 @@
### Task 1: Add ClickHouse Dependencies
**Files:**
- Modify: `cameleer3-server-app/pom.xml`
- Modify: `cameleer-server-app/pom.xml`
- [ ] **Step 1: Add clickhouse-jdbc and testcontainers-clickhouse to app POM**
In `cameleer3-server-app/pom.xml`, add these two dependencies. Place the runtime dependency after the opensearch dependencies (around line 59), and the test dependency after the opensearch-testcontainers dependency (around line 128):
In `cameleer-server-app/pom.xml`, add these two dependencies. Place the runtime dependency after the opensearch dependencies (around line 59), and the test dependency after the opensearch-testcontainers dependency (around line 128):
```xml
<!-- After opensearch-rest-client dependency, ~line 59 -->
@@ -65,13 +65,13 @@ Note: The `all` classifier bundles the HTTP client, avoiding transitive dependen
- [ ] **Step 2: Verify compilation**
Run: `mvn clean compile -pl cameleer3-server-app -am`
Run: `mvn clean compile -pl cameleer-server-app -am`
Expected: BUILD SUCCESS
- [ ] **Step 3: Commit**
```bash
git add cameleer3-server-app/pom.xml
git add cameleer-server-app/pom.xml
git commit -m "build: add clickhouse-jdbc and testcontainers-clickhouse dependencies"
```
@@ -80,14 +80,14 @@ git commit -m "build: add clickhouse-jdbc and testcontainers-clickhouse dependen
### Task 2: ClickHouse Configuration
**Files:**
- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java`
- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java`
- Modify: `cameleer3-server-app/src/main/resources/application.yml`
- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseProperties.java`
- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java`
- Modify: `cameleer-server-app/src/main/resources/application.yml`
- [ ] **Step 1: Create ClickHouseProperties**
```java
package com.cameleer3.server.app.config;
package com.cameleer.server.app.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -112,7 +112,7 @@ public class ClickHouseProperties {
- [ ] **Step 2: Create ClickHouseConfig**
```java
package com.cameleer3.server.app.config;
package com.cameleer.server.app.config;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -168,15 +168,15 @@ Note: The existing `cameleer:` block already has `body-size-limit` and `retentio
- [ ] **Step 4: Verify compilation**
Run: `mvn clean compile -pl cameleer3-server-app -am`
Run: `mvn clean compile -pl cameleer-server-app -am`
Expected: BUILD SUCCESS
- [ ] **Step 5: Commit**
```bash
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java
git add cameleer3-server-app/src/main/resources/application.yml
git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseProperties.java
git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java
git add cameleer-server-app/src/main/resources/application.yml
git commit -m "feat: add ClickHouse DataSource and JdbcTemplate configuration"
```
@@ -185,12 +185,12 @@ git commit -m "feat: add ClickHouse DataSource and JdbcTemplate configuration"
### Task 3: Schema Initializer + DDL Script
**Files:**
- Create: `cameleer3-server-app/src/main/resources/clickhouse/V1__agent_metrics.sql`
- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java`
- Create: `cameleer-server-app/src/main/resources/clickhouse/V1__agent_metrics.sql`
- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseSchemaInitializer.java`
- [ ] **Step 1: Create DDL script**
File: `cameleer3-server-app/src/main/resources/clickhouse/V1__agent_metrics.sql`
File: `cameleer-server-app/src/main/resources/clickhouse/V1__agent_metrics.sql`
```sql
CREATE TABLE IF NOT EXISTS agent_metrics (
@@ -212,7 +212,7 @@ SETTINGS index_granularity = 8192;
- [ ] **Step 2: Create ClickHouseSchemaInitializer**
```java
package com.cameleer3.server.app.config;
package com.cameleer.server.app.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -268,14 +268,14 @@ public class ClickHouseSchemaInitializer {
- [ ] **Step 3: Verify compilation**
Run: `mvn clean compile -pl cameleer3-server-app -am`
Run: `mvn clean compile -pl cameleer-server-app -am`
Expected: BUILD SUCCESS
- [ ] **Step 4: Commit**
```bash
git add cameleer3-server-app/src/main/resources/clickhouse/V1__agent_metrics.sql
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java
git add cameleer-server-app/src/main/resources/clickhouse/V1__agent_metrics.sql
git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseSchemaInitializer.java
git commit -m "feat: add ClickHouse schema initializer with agent_metrics DDL"
```
@@ -284,15 +284,15 @@ git commit -m "feat: add ClickHouse schema initializer with agent_metrics DDL"
### Task 4: ClickHouseMetricsStore (TDD)
**Files:**
- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsStoreTest.java`
- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsStore.java`
- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsStoreTest.java`
- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsStore.java`
- [ ] **Step 1: Write the failing test**
```java
package com.cameleer3.server.app.storage;
package com.cameleer.server.app.storage;
import com.cameleer3.server.core.storage.model.MetricsSnapshot;
import com.cameleer.server.core.storage.model.MetricsSnapshot;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -406,16 +406,16 @@ class ClickHouseMetricsStoreTest {
- [ ] **Step 2: Run test to verify it fails**
Run: `mvn test -pl cameleer3-server-app -Dtest=ClickHouseMetricsStoreTest -DfailIfNoTests=false`
Run: `mvn test -pl cameleer-server-app -Dtest=ClickHouseMetricsStoreTest -DfailIfNoTests=false`
Expected: FAIL — `ClickHouseMetricsStore` class does not exist
- [ ] **Step 3: Write ClickHouseMetricsStore**
```java
package com.cameleer3.server.app.storage;
package com.cameleer.server.app.storage;
import com.cameleer3.server.core.storage.MetricsStore;
import com.cameleer3.server.core.storage.model.MetricsSnapshot;
import com.cameleer.server.core.storage.MetricsStore;
import com.cameleer.server.core.storage.model.MetricsSnapshot;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.Timestamp;
@@ -459,7 +459,7 @@ Note: ClickHouse JDBC driver handles `Map<String, String>` natively for `Map(Str
- [ ] **Step 4: Run test to verify it passes**
Run: `mvn test -pl cameleer3-server-app -Dtest=ClickHouseMetricsStoreTest`
Run: `mvn test -pl cameleer-server-app -Dtest=ClickHouseMetricsStoreTest`
Expected: PASS — all 4 tests green
If the tags test fails due to JDBC Map handling, adjust `tagsToClickHouseMap` to return a `java.util.HashMap` (ClickHouse JDBC requires a mutable map). If needed, wrap: `return new HashMap<>(tags)`.
@@ -467,8 +467,8 @@ If the tags test fails due to JDBC Map handling, adjust `tagsToClickHouseMap` to
- [ ] **Step 5: Commit**
```bash
git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsStoreTest.java
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsStore.java
git add cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsStoreTest.java
git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsStore.java
git commit -m "feat: add ClickHouseMetricsStore with batch insert"
```
@@ -479,16 +479,16 @@ git commit -m "feat: add ClickHouseMetricsStore with batch insert"
Extract the query logic from `AgentMetricsController` into an interface.
**Files:**
- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsQueryStore.java`
- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsQueryStore.java`
- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java`
- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsQueryStore.java`
- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresMetricsQueryStore.java`
- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java`
- [ ] **Step 1: Create MetricsQueryStore interface**
```java
package com.cameleer3.server.core.storage;
package com.cameleer.server.core.storage;
import com.cameleer3.server.core.storage.model.MetricTimeSeries;
import com.cameleer.server.core.storage.model.MetricTimeSeries;
import java.time.Instant;
import java.util.List;
@@ -515,7 +515,7 @@ public interface MetricsQueryStore {
- [ ] **Step 2: Create MetricTimeSeries.Bucket record**
```java
package com.cameleer3.server.core.storage.model;
package com.cameleer.server.core.storage.model;
import java.time.Instant;
import java.util.List;
@@ -529,10 +529,10 @@ public record MetricTimeSeries(String metricName, List<Bucket> buckets) {
- [ ] **Step 3: Create PostgresMetricsQueryStore (extract from controller)**
```java
package com.cameleer3.server.app.storage;
package com.cameleer.server.app.storage;
import com.cameleer3.server.core.storage.MetricsQueryStore;
import com.cameleer3.server.core.storage.model.MetricTimeSeries;
import com.cameleer.server.core.storage.MetricsQueryStore;
import com.cameleer.server.core.storage.model.MetricTimeSeries;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.Timestamp;
@@ -591,12 +591,12 @@ public class PostgresMetricsQueryStore implements MetricsQueryStore {
Replace the entire `AgentMetricsController.java` content:
```java
package com.cameleer3.server.app.controller;
package com.cameleer.server.app.controller;
import com.cameleer3.server.app.dto.AgentMetricsResponse;
import com.cameleer3.server.app.dto.MetricBucket;
import com.cameleer3.server.core.storage.MetricsQueryStore;
import com.cameleer3.server.core.storage.model.MetricTimeSeries;
import com.cameleer.server.app.dto.AgentMetricsResponse;
import com.cameleer.server.app.dto.MetricBucket;
import com.cameleer.server.core.storage.MetricsQueryStore;
import com.cameleer.server.core.storage.model.MetricTimeSeries;
import org.springframework.web.bind.annotation.*;
import java.time.Instant;
@@ -650,8 +650,8 @@ public class AgentMetricsController {
The refactored `AgentMetricsController` needs a `MetricsQueryStore` bean. Add this to `StorageBeanConfig.java`:
```java
import com.cameleer3.server.app.storage.PostgresMetricsQueryStore;
import com.cameleer3.server.core.storage.MetricsQueryStore;
import com.cameleer.server.app.storage.PostgresMetricsQueryStore;
import com.cameleer.server.core.storage.MetricsQueryStore;
// Add this bean method:
@Bean
@@ -664,17 +664,17 @@ This creates the PG implementation as the default. Task 7 will replace this with
- [ ] **Step 6: Verify compilation**
Run: `mvn clean compile -pl cameleer3-server-app -am`
Run: `mvn clean compile -pl cameleer-server-app -am`
Expected: BUILD SUCCESS
- [ ] **Step 7: Commit**
```bash
git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsQueryStore.java
git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/MetricTimeSeries.java
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsQueryStore.java
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java
git add cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsQueryStore.java
git add cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/MetricTimeSeries.java
git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresMetricsQueryStore.java
git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java
git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java
git commit -m "refactor: extract MetricsQueryStore interface from AgentMetricsController"
```
@@ -683,15 +683,15 @@ git commit -m "refactor: extract MetricsQueryStore interface from AgentMetricsCo
### Task 6: ClickHouseMetricsQueryStore (TDD)
**Files:**
- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStoreTest.java`
- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java`
- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStoreTest.java`
- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStore.java`
- [ ] **Step 1: Write the failing test**
```java
package com.cameleer3.server.app.storage;
package com.cameleer.server.app.storage;
import com.cameleer3.server.core.storage.model.MetricTimeSeries;
import com.cameleer.server.core.storage.model.MetricTimeSeries;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -807,16 +807,16 @@ class ClickHouseMetricsQueryStoreTest {
- [ ] **Step 2: Run test to verify it fails**
Run: `mvn test -pl cameleer3-server-app -Dtest=ClickHouseMetricsQueryStoreTest -DfailIfNoTests=false`
Run: `mvn test -pl cameleer-server-app -Dtest=ClickHouseMetricsQueryStoreTest -DfailIfNoTests=false`
Expected: FAIL — `ClickHouseMetricsQueryStore` class does not exist
- [ ] **Step 3: Write ClickHouseMetricsQueryStore**
```java
package com.cameleer3.server.app.storage;
package com.cameleer.server.app.storage;
import com.cameleer3.server.core.storage.MetricsQueryStore;
import com.cameleer3.server.core.storage.model.MetricTimeSeries;
import com.cameleer.server.core.storage.MetricsQueryStore;
import com.cameleer.server.core.storage.model.MetricTimeSeries;
import org.springframework.jdbc.core.JdbcTemplate;
import java.time.Instant;
@@ -896,14 +896,14 @@ public class ClickHouseMetricsQueryStore implements MetricsQueryStore {
- [ ] **Step 4: Run test to verify it passes**
Run: `mvn test -pl cameleer3-server-app -Dtest=ClickHouseMetricsQueryStoreTest`
Run: `mvn test -pl cameleer-server-app -Dtest=ClickHouseMetricsQueryStoreTest`
Expected: PASS — all 4 tests green
- [ ] **Step 5: Commit**
```bash
git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStoreTest.java
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java
git add cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStoreTest.java
git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStore.java
git commit -m "feat: add ClickHouseMetricsQueryStore with time-bucketed queries"
```
@@ -912,17 +912,17 @@ git commit -m "feat: add ClickHouseMetricsQueryStore with time-bucketed queries"
### Task 7: Wire Feature Flag in StorageBeanConfig
**Files:**
- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java`
- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java`
- [ ] **Step 1: Replace simple beans with conditional MetricsStore and MetricsQueryStore beans**
In `StorageBeanConfig.java`, **remove** the unconditional `metricsQueryStore` bean added in Task 5. Replace with these conditional bean definitions:
```java
import com.cameleer3.server.app.storage.ClickHouseMetricsStore;
import com.cameleer3.server.app.storage.ClickHouseMetricsQueryStore;
import com.cameleer3.server.app.storage.PostgresMetricsQueryStore;
import com.cameleer3.server.core.storage.MetricsQueryStore;
import com.cameleer.server.app.storage.ClickHouseMetricsStore;
import com.cameleer.server.app.storage.ClickHouseMetricsQueryStore;
import com.cameleer.server.app.storage.PostgresMetricsQueryStore;
import com.cameleer.server.core.storage.MetricsQueryStore;
// ... existing beans ...
@@ -959,7 +959,7 @@ Add the necessary imports to `StorageBeanConfig.java`:
```java
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.beans.factory.annotation.Qualifier;
import com.cameleer3.server.core.storage.MetricsStore;
import com.cameleer.server.core.storage.MetricsStore;
```
- [ ] **Step 2: Remove @Repository from PostgresMetricsStore**
@@ -968,19 +968,19 @@ In `PostgresMetricsStore.java`, remove the `@Repository` annotation from the cla
- [ ] **Step 3: Verify compilation**
Run: `mvn clean compile -pl cameleer3-server-app -am`
Run: `mvn clean compile -pl cameleer-server-app -am`
Expected: BUILD SUCCESS
- [ ] **Step 4: Run existing tests to verify no regression**
Run: `mvn test -pl cameleer3-server-app`
Run: `mvn test -pl cameleer-server-app`
Expected: All existing tests pass. The default config (`cameleer.storage.metrics=postgres`) means the PG beans are created, ClickHouse beans are not (ClickHouse DataSource not needed).
- [ ] **Step 5: Commit**
```bash
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java
git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsStore.java
git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java
git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresMetricsStore.java
git commit -m "feat: wire MetricsStore and MetricsQueryStore with feature flag"
```
@@ -1076,7 +1076,7 @@ spec:
- [ ] **Step 2: Add ClickHouse env vars to server.yaml**
Add these env vars to the `cameleer3-server` container in `deploy/base/server.yaml`, after the existing env vars (before `resources:`):
Add these env vars to the `cameleer-server` container in `deploy/base/server.yaml`, after the existing env vars (before `resources:`):
```yaml
- name: CLICKHOUSE_ENABLED
@@ -1102,7 +1102,7 @@ git commit -m "deploy: add ClickHouse StatefulSet and server env vars"
### Task 9: Integration Smoke Test
**Files:**
- Modify: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractPostgresIT.java` (add ClickHouse container)
- Modify: `cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractPostgresIT.java` (add ClickHouse container)
- [ ] **Step 1: Update AbstractPostgresIT to optionally start ClickHouse**
@@ -1129,13 +1129,13 @@ registry.add("clickhouse.password", clickhouse::getPassword);
- [ ] **Step 2: Run all integration tests**
Run: `mvn verify -pl cameleer3-server-app`
Run: `mvn verify -pl cameleer-server-app`
Expected: All ITs pass. ClickHouse schema initializer runs and creates the `agent_metrics` table. The `MetricsControllerIT` still uses PG (default storage flag is `postgres`).
- [ ] **Step 3: Commit**
```bash
git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractPostgresIT.java
git add cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractPostgresIT.java
git commit -m "test: add ClickHouse testcontainer to integration test base"
```
@@ -1162,7 +1162,7 @@ curl "http://localhost:8123/" --data "CREATE DATABASE IF NOT EXISTS cameleer"
Start the server with ClickHouse enabled:
```bash
CLICKHOUSE_ENABLED=true CAMELEER_STORAGE_METRICS=clickhouse java -jar cameleer3-server-app/target/cameleer3-server-app-1.0-SNAPSHOT.jar
CLICKHOUSE_ENABLED=true CAMELEER_STORAGE_METRICS=clickhouse java -jar cameleer-server-app/target/cameleer-server-app-1.0-SNAPSHOT.jar
```
Verify schema initialization in the logs: `Executing ClickHouse schema script: V1__agent_metrics.sql`