feat(01-01): add ClickHouse dependencies, Docker Compose, schema, and app config
- Add clickhouse-jdbc, springdoc-openapi, actuator, testcontainers deps - Add slf4j-api to core module - Create Docker Compose with ClickHouse service on ports 8123/9000 - Create ClickHouse DDL: route_executions, route_diagrams, agent_metrics - Configure application.yml with datasource, ingestion buffer, springdoc Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,11 +27,47 @@
|
|||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-websocket</artifactId>
|
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-jdbc</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.clickhouse</groupId>
|
||||||
|
<artifactId>clickhouse-jdbc</artifactId>
|
||||||
|
<version>0.9.7</version>
|
||||||
|
<classifier>all</classifier>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springdoc</groupId>
|
||||||
|
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
||||||
|
<version>2.8.6</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>testcontainers-clickhouse</artifactId>
|
||||||
|
<version>2.0.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>junit-jupiter</artifactId>
|
||||||
|
<version>2.0.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.awaitility</groupId>
|
||||||
|
<artifactId>awaitility</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@@ -1,2 +1,38 @@
|
|||||||
server:
|
server:
|
||||||
port: 8081
|
port: 8081
|
||||||
|
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
url: jdbc:ch://localhost:8123/cameleer3
|
||||||
|
username: cameleer
|
||||||
|
password: cameleer_dev
|
||||||
|
driver-class-name: com.clickhouse.jdbc.ClickHouseDriver
|
||||||
|
jackson:
|
||||||
|
serialization:
|
||||||
|
write-dates-as-timestamps: false
|
||||||
|
deserialization:
|
||||||
|
fail-on-unknown-properties: false
|
||||||
|
|
||||||
|
ingestion:
|
||||||
|
buffer-capacity: 50000
|
||||||
|
batch-size: 5000
|
||||||
|
flush-interval-ms: 1000
|
||||||
|
|
||||||
|
clickhouse:
|
||||||
|
ttl-days: 30
|
||||||
|
|
||||||
|
springdoc:
|
||||||
|
api-docs:
|
||||||
|
path: /api/v1/api-docs
|
||||||
|
swagger-ui:
|
||||||
|
path: /api/v1/swagger-ui
|
||||||
|
|
||||||
|
management:
|
||||||
|
endpoints:
|
||||||
|
web:
|
||||||
|
base-path: /api/v1
|
||||||
|
exposure:
|
||||||
|
include: health
|
||||||
|
endpoint:
|
||||||
|
health:
|
||||||
|
show-details: always
|
||||||
|
|||||||
@@ -23,6 +23,10 @@
|
|||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.junit.jupiter</groupId>
|
<groupId>org.junit.jupiter</groupId>
|
||||||
<artifactId>junit-jupiter</artifactId>
|
<artifactId>junit-jupiter</artifactId>
|
||||||
|
|||||||
57
clickhouse/init/01-schema.sql
Normal file
57
clickhouse/init/01-schema.sql
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
-- Cameleer3 ClickHouse Schema
|
||||||
|
-- Tables for route executions, route diagrams, and agent metrics.
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS route_executions (
|
||||||
|
execution_id String,
|
||||||
|
route_id LowCardinality(String),
|
||||||
|
agent_id LowCardinality(String),
|
||||||
|
status LowCardinality(String),
|
||||||
|
start_time DateTime64(3, 'UTC'),
|
||||||
|
end_time Nullable(DateTime64(3, 'UTC')),
|
||||||
|
duration_ms UInt64,
|
||||||
|
correlation_id String,
|
||||||
|
exchange_id String,
|
||||||
|
error_message Nullable(String),
|
||||||
|
error_stacktrace Nullable(String),
|
||||||
|
-- Nested processor executions stored as parallel arrays
|
||||||
|
processor_ids Array(String),
|
||||||
|
processor_types Array(LowCardinality(String)),
|
||||||
|
processor_starts Array(DateTime64(3, 'UTC')),
|
||||||
|
processor_ends Array(DateTime64(3, 'UTC')),
|
||||||
|
processor_durations Array(UInt64),
|
||||||
|
processor_statuses Array(LowCardinality(String)),
|
||||||
|
-- Metadata
|
||||||
|
server_received_at DateTime64(3, 'UTC') DEFAULT now64(3, 'UTC'),
|
||||||
|
-- Skip indexes
|
||||||
|
INDEX idx_correlation correlation_id TYPE bloom_filter GRANULARITY 4,
|
||||||
|
INDEX idx_error error_message TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 4
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree()
|
||||||
|
PARTITION BY toYYYYMMDD(start_time)
|
||||||
|
ORDER BY (agent_id, status, start_time, execution_id)
|
||||||
|
TTL start_time + INTERVAL 30 DAY
|
||||||
|
SETTINGS ttl_only_drop_parts = 1;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS route_diagrams (
|
||||||
|
content_hash String,
|
||||||
|
route_id LowCardinality(String),
|
||||||
|
agent_id LowCardinality(String),
|
||||||
|
definition String,
|
||||||
|
created_at DateTime64(3, 'UTC') DEFAULT now64(3, 'UTC')
|
||||||
|
)
|
||||||
|
ENGINE = ReplacingMergeTree(created_at)
|
||||||
|
ORDER BY (content_hash);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS agent_metrics (
|
||||||
|
agent_id LowCardinality(String),
|
||||||
|
collected_at DateTime64(3, 'UTC'),
|
||||||
|
metric_name LowCardinality(String),
|
||||||
|
metric_value Float64,
|
||||||
|
tags Map(String, String),
|
||||||
|
server_received_at DateTime64(3, 'UTC') DEFAULT now64(3, 'UTC')
|
||||||
|
)
|
||||||
|
ENGINE = MergeTree()
|
||||||
|
PARTITION BY toYYYYMMDD(collected_at)
|
||||||
|
ORDER BY (agent_id, metric_name, collected_at)
|
||||||
|
TTL collected_at + INTERVAL 30 DAY
|
||||||
|
SETTINGS ttl_only_drop_parts = 1;
|
||||||
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
services:
|
||||||
|
clickhouse:
|
||||||
|
image: clickhouse/clickhouse-server:25.3
|
||||||
|
ports:
|
||||||
|
- "8123:8123"
|
||||||
|
- "9000:9000"
|
||||||
|
volumes:
|
||||||
|
- clickhouse-data:/var/lib/clickhouse
|
||||||
|
- ./clickhouse/init:/docker-entrypoint-initdb.d
|
||||||
|
environment:
|
||||||
|
CLICKHOUSE_USER: cameleer
|
||||||
|
CLICKHOUSE_PASSWORD: cameleer_dev
|
||||||
|
CLICKHOUSE_DB: cameleer3
|
||||||
|
ulimits:
|
||||||
|
nofile:
|
||||||
|
soft: 262144
|
||||||
|
hard: 262144
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
clickhouse-data:
|
||||||
Reference in New Issue
Block a user