chore: rename cameleer3 to cameleer
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:
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user