2026-03-11 10:06:17 +01:00
|
|
|
server:
|
|
|
|
|
port: 8081
|
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>
2026-03-11 11:47:20 +01:00
|
|
|
|
|
|
|
|
spring:
|
2026-04-08 18:22:39 +02:00
|
|
|
servlet:
|
|
|
|
|
multipart:
|
|
|
|
|
max-file-size: 200MB
|
|
|
|
|
max-request-size: 200MB
|
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>
2026-03-11 11:47:20 +01:00
|
|
|
datasource:
|
2026-04-04 23:24:22 +02:00
|
|
|
url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/cameleer3?currentSchema=tenant_${cameleer.tenant.id}}
|
|
|
|
|
username: ${SPRING_DATASOURCE_USERNAME:cameleer}
|
|
|
|
|
password: ${SPRING_DATASOURCE_PASSWORD:cameleer_dev}
|
2026-03-16 18:15:33 +01:00
|
|
|
driver-class-name: org.postgresql.Driver
|
|
|
|
|
flyway:
|
|
|
|
|
enabled: true
|
|
|
|
|
locations: classpath:db/migration
|
2026-04-04 21:46:57 +02:00
|
|
|
create-schemas: true
|
feat(03-01): add agent registration controller, config, lifecycle monitor
- AgentRegistryConfig: heartbeat, stale, dead, ping, command expiry settings
- AgentRegistryBeanConfig: wires AgentRegistryService as Spring bean
- AgentLifecycleMonitor: @Scheduled lifecycle check + command expiry sweep
- AgentRegistrationController: POST /register, POST /{id}/heartbeat, GET /agents
- Updated Cameleer3ServerApplication with AgentRegistryConfig
- Updated application.yml with agent-registry section and async timeout
- 7 integration tests: register, re-register, heartbeat, list, filter, invalid status
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 18:40:57 +01:00
|
|
|
mvc:
|
|
|
|
|
async:
|
|
|
|
|
request-timeout: -1
|
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>
2026-03-11 11:47:20 +01:00
|
|
|
jackson:
|
|
|
|
|
serialization:
|
|
|
|
|
write-dates-as-timestamps: false
|
|
|
|
|
deserialization:
|
|
|
|
|
fail-on-unknown-properties: false
|
|
|
|
|
|
feat(03-01): add agent registration controller, config, lifecycle monitor
- AgentRegistryConfig: heartbeat, stale, dead, ping, command expiry settings
- AgentRegistryBeanConfig: wires AgentRegistryService as Spring bean
- AgentLifecycleMonitor: @Scheduled lifecycle check + command expiry sweep
- AgentRegistrationController: POST /register, POST /{id}/heartbeat, GET /agents
- Updated Cameleer3ServerApplication with AgentRegistryConfig
- Updated application.yml with agent-registry section and async timeout
- 7 integration tests: register, re-register, heartbeat, list, filter, invalid status
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 18:40:57 +01:00
|
|
|
agent-registry:
|
|
|
|
|
heartbeat-interval-ms: 30000
|
|
|
|
|
stale-threshold-ms: 90000
|
|
|
|
|
dead-threshold-ms: 300000
|
|
|
|
|
ping-interval-ms: 15000
|
|
|
|
|
command-expiry-ms: 60000
|
|
|
|
|
lifecycle-check-interval-ms: 10000
|
|
|
|
|
|
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>
2026-03-11 11:47:20 +01:00
|
|
|
ingestion:
|
|
|
|
|
buffer-capacity: 50000
|
|
|
|
|
batch-size: 5000
|
2026-04-03 22:05:29 +02:00
|
|
|
flush-interval-ms: 5000
|
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>
2026-03-11 11:47:20 +01:00
|
|
|
|
2026-03-16 18:15:33 +01:00
|
|
|
cameleer:
|
2026-04-04 15:00:18 +02:00
|
|
|
tenant:
|
|
|
|
|
id: ${CAMELEER_TENANT_ID:default}
|
2026-04-07 23:47:43 +02:00
|
|
|
runtime:
|
|
|
|
|
enabled: ${CAMELEER_RUNTIME_ENABLED:true}
|
|
|
|
|
jar-storage-path: ${CAMELEER_JAR_STORAGE_PATH:/data/jars}
|
|
|
|
|
base-image: ${CAMELEER_RUNTIME_BASE_IMAGE:cameleer-runtime-base:latest}
|
|
|
|
|
docker-network: ${CAMELEER_DOCKER_NETWORK:cameleer}
|
|
|
|
|
agent-health-port: 9464
|
|
|
|
|
health-check-timeout: 60
|
|
|
|
|
container-memory-limit: ${CAMELEER_CONTAINER_MEMORY_LIMIT:512m}
|
|
|
|
|
container-cpu-shares: ${CAMELEER_CONTAINER_CPU_SHARES:512}
|
|
|
|
|
routing-mode: ${CAMELEER_ROUTING_MODE:path}
|
|
|
|
|
routing-domain: ${CAMELEER_ROUTING_DOMAIN:localhost}
|
2026-03-16 18:15:33 +01:00
|
|
|
body-size-limit: ${CAMELEER_BODY_SIZE_LIMIT:16384}
|
feat: remove OpenSearch, add ClickHouse admin page
Remove all OpenSearch code, dependencies, configuration, deployment
manifests, and CI/CD references. Replace the OpenSearch admin page
with a ClickHouse admin page showing cluster status, table sizes,
performance metrics, and indexer pipeline stats.
- Delete 11 OpenSearch Java files (config, search impl, admin controller, DTOs, tests)
- Delete 3 OpenSearch frontend files (admin page, CSS, query hooks)
- Delete deploy/opensearch.yaml K8s manifest
- Remove opensearch Maven dependencies from pom.xml
- Remove opensearch config from application.yml, Dockerfile, docker-compose
- Remove opensearch from CI workflow (secrets, deploy, cleanup steps)
- Simplify ThresholdConfig (remove OpenSearch thresholds, database-only)
- Change default search backend from opensearch to clickhouse
- Add ClickHouseAdminController with /status, /tables, /performance, /pipeline
- Add ClickHouseAdminPage with StatCards, pipeline ProgressBar, tables DataTable
- Update CLAUDE.md, HOWTO.md, and source comments
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 18:56:06 +02:00
|
|
|
indexer:
|
|
|
|
|
debounce-ms: ${CAMELEER_INDEXER_DEBOUNCE_MS:2000}
|
|
|
|
|
queue-size: ${CAMELEER_INDEXER_QUEUE_SIZE:10000}
|
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>
2026-03-11 11:47:20 +01:00
|
|
|
|
2026-04-07 23:11:02 +02:00
|
|
|
license:
|
|
|
|
|
token: ${CAMELEER_LICENSE_TOKEN:}
|
|
|
|
|
file: ${CAMELEER_LICENSE_FILE:}
|
|
|
|
|
public-key: ${CAMELEER_LICENSE_PUBLIC_KEY:}
|
|
|
|
|
|
2026-03-11 20:08:30 +01:00
|
|
|
security:
|
|
|
|
|
access-token-expiry-ms: 3600000
|
|
|
|
|
refresh-token-expiry-ms: 604800000
|
|
|
|
|
bootstrap-token: ${CAMELEER_AUTH_TOKEN:}
|
|
|
|
|
bootstrap-token-previous: ${CAMELEER_AUTH_TOKEN_PREVIOUS:}
|
Add React UI with Execution Explorer, auth, and standalone deployment
- Scaffold Vite + React + TypeScript frontend in ui/ with full design
system (dark/light themes) matching the HTML mockups
- Implement Execution Explorer page: search filters, results table with
expandable processor tree and exchange detail sidebar, pagination
- Add UI authentication: UiAuthController (login/refresh endpoints),
JWT filter handles ui: subject prefix, CORS configuration
- Shared components: StatusPill, DurationBar, StatCard, AppBadge,
FilterChip, Pagination — all using CSS Modules with design tokens
- API client layer: openapi-fetch with auth middleware, TanStack Query
hooks for search/detail/snapshot queries, Zustand for state
- Standalone deployment: Nginx Dockerfile, K8s Deployment + ConfigMap +
NodePort (30080), runtime config.js for API base URL
- Embedded mode: maven-resources-plugin copies ui/dist into JAR static
resources, SPA forward controller for client-side routing
- CI/CD: UI build step, Docker build/push for server-ui image, K8s
deploy step for UI, UI credential secrets
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 13:59:22 +01:00
|
|
|
ui-user: ${CAMELEER_UI_USER:admin}
|
|
|
|
|
ui-password: ${CAMELEER_UI_PASSWORD:admin}
|
|
|
|
|
ui-origin: ${CAMELEER_UI_ORIGIN:http://localhost:5173}
|
Add RBAC with role-based endpoint authorization and OIDC support
Implement three-phase security upgrade:
Phase 1 - RBAC: Extend JWT with roles claim, populate Spring
GrantedAuthority in filter, enforce role-based access (AGENT for
data/heartbeat/SSE, VIEWER+ for search/diagrams, OPERATOR+ for
commands, ADMIN for user management). Configurable JWT secret via
CAMELEER_JWT_SECRET env var for token persistence across restarts.
Phase 2 - User persistence: ClickHouse users table with
ReplacingMergeTree, UserRepository interface + ClickHouse impl,
UserAdminController for CRUD at /api/v1/admin/users. Local login
upserts user on each authentication.
Phase 3 - OIDC: Token exchange flow where SPA sends auth code,
server exchanges it server-side (keeping client_secret secure),
validates id_token via JWKS, resolves roles (DB override > OIDC
claim > default), issues internal JWT. Conditional on
CAMELEER_OIDC_ENABLED=true. Uses oauth2-oidc-sdk for standards
compliance.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 12:35:45 +01:00
|
|
|
jwt-secret: ${CAMELEER_JWT_SECRET:}
|
2026-04-05 13:06:53 +02:00
|
|
|
oidc-issuer-uri: ${CAMELEER_OIDC_ISSUER_URI:}
|
2026-04-05 21:02:51 +02:00
|
|
|
oidc-jwk-set-uri: ${CAMELEER_OIDC_JWK_SET_URI:}
|
2026-04-05 13:06:53 +02:00
|
|
|
oidc-audience: ${CAMELEER_OIDC_AUDIENCE:}
|
2026-04-06 00:26:40 +02:00
|
|
|
oidc-tls-skip-verify: ${CAMELEER_OIDC_TLS_SKIP_VERIFY:false}
|
2026-04-06 00:41:00 +02:00
|
|
|
cors-allowed-origins: ${CAMELEER_CORS_ALLOWED_ORIGINS:}
|
2026-03-17 13:20:35 +01:00
|
|
|
|
2026-03-11 20:08:30 +01:00
|
|
|
|
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>
2026-03-11 11:47:20 +01:00
|
|
|
springdoc:
|
|
|
|
|
api-docs:
|
|
|
|
|
path: /api/v1/api-docs
|
|
|
|
|
swagger-ui:
|
|
|
|
|
path: /api/v1/swagger-ui
|
|
|
|
|
|
2026-03-31 16:51:14 +02:00
|
|
|
clickhouse:
|
feat: remove TimescaleDB, dead PG stores, and storage feature flags
Complete the ClickHouse migration by removing all PostgreSQL analytics
code. PostgreSQL now serves only RBAC, config, and audit — all
observability data is exclusively in ClickHouse.
- Delete 6 dead PostgreSQL store classes (executions, stats, diagrams,
events, metrics, metrics-query) and 2 integration tests
- Delete RetentionScheduler (ClickHouse TTL handles retention)
- Remove all 7 cameleer.storage.* feature flags from application.yml
- Remove all @ConditionalOnProperty from ClickHouse beans in StorageBeanConfig
- Consolidate 14 Flyway migrations (V1-V14) into single clean V1 with
only RBAC/config/audit tables (no TimescaleDB, no analytics tables)
- Switch from timescale/timescaledb-ha:pg16 to postgres:16 everywhere
(docker-compose, deploy/postgres.yaml, test containers)
- Remove TimescaleDB check and /metrics-pipeline from DatabaseAdminController
- Set clickhouse.enabled default to true
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:10:58 +02:00
|
|
|
enabled: ${CLICKHOUSE_ENABLED:true}
|
2026-03-31 18:02:53 +02:00
|
|
|
url: ${CLICKHOUSE_URL:jdbc:clickhouse://localhost:8123/cameleer}
|
2026-03-31 16:51:14 +02:00
|
|
|
username: ${CLICKHOUSE_USERNAME:default}
|
|
|
|
|
password: ${CLICKHOUSE_PASSWORD:}
|
|
|
|
|
|
2026-04-03 14:48:30 +02:00
|
|
|
logging:
|
|
|
|
|
level:
|
|
|
|
|
com.clickhouse: INFO
|
|
|
|
|
org.apache.hc.client5: WARN
|
|
|
|
|
|
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>
2026-03-11 11:47:20 +01:00
|
|
|
management:
|
|
|
|
|
endpoints:
|
|
|
|
|
web:
|
|
|
|
|
base-path: /api/v1
|
|
|
|
|
exposure:
|
|
|
|
|
include: health
|
|
|
|
|
endpoint:
|
|
|
|
|
health:
|
|
|
|
|
show-details: always
|