diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index b66b944a..d48f1759 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -93,24 +93,24 @@ jobs: - name: Build and push server run: | docker buildx create --use --name cibuilder - TAGS="-t gitea.siegeln.net/cameleer/cameleer3-server:${{ github.sha }}" + TAGS="-t gitea.siegeln.net/cameleer/cameleer-server:${{ github.sha }}" for TAG in $IMAGE_TAGS; do - TAGS="$TAGS -t gitea.siegeln.net/cameleer/cameleer3-server:$TAG" + TAGS="$TAGS -t gitea.siegeln.net/cameleer/cameleer-server:$TAG" done docker buildx build --platform linux/amd64 \ --build-arg REGISTRY_TOKEN="$REGISTRY_TOKEN" \ $TAGS \ - --cache-from type=registry,ref=gitea.siegeln.net/cameleer/cameleer3-server:buildcache \ - --cache-to type=registry,ref=gitea.siegeln.net/cameleer/cameleer3-server:buildcache,mode=max \ + --cache-from type=registry,ref=gitea.siegeln.net/cameleer/cameleer-server:buildcache \ + --cache-to type=registry,ref=gitea.siegeln.net/cameleer/cameleer-server:buildcache,mode=max \ --provenance=false \ --push . env: REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} - name: Build and push UI run: | - TAGS="-t gitea.siegeln.net/cameleer/cameleer3-server-ui:${{ github.sha }}" + TAGS="-t gitea.siegeln.net/cameleer/cameleer-server-ui:${{ github.sha }}" for TAG in $IMAGE_TAGS; do - TAGS="$TAGS -t gitea.siegeln.net/cameleer/cameleer3-server-ui:$TAG" + TAGS="$TAGS -t gitea.siegeln.net/cameleer/cameleer-server-ui:$TAG" done SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) docker buildx build --platform linux/amd64 \ @@ -118,8 +118,8 @@ jobs: --build-arg REGISTRY_TOKEN="$REGISTRY_TOKEN" \ --build-arg VITE_APP_VERSION="$SHORT_SHA" \ $TAGS \ - --cache-from type=registry,ref=gitea.siegeln.net/cameleer/cameleer3-server-ui:buildcache \ - --cache-to type=registry,ref=gitea.siegeln.net/cameleer/cameleer3-server-ui:buildcache,mode=max \ + --cache-from type=registry,ref=gitea.siegeln.net/cameleer/cameleer-server-ui:buildcache \ + --cache-to type=registry,ref=gitea.siegeln.net/cameleer/cameleer-server-ui:buildcache,mode=max \ --provenance=false \ --push ui/ env: @@ -137,7 +137,7 @@ jobs: if [ "$BRANCH_SLUG" != "main" ]; then KEEP_TAGS="$KEEP_TAGS branch-$BRANCH_SLUG" fi - for PKG in cameleer3-server cameleer3-server-ui; do + for PKG in cameleer-server cameleer-server-ui; do curl -sf -H "$AUTH" "$API/packages/cameleer/container/$PKG" | \ jq -r '.[] | "\(.id) \(.version)"' | \ while read id version; do @@ -229,13 +229,13 @@ jobs: kubectl -n cameleer rollout status deployment/cameleer-logto --timeout=180s kubectl apply -k deploy/overlays/main - kubectl -n cameleer set image deployment/cameleer3-server \ - server=gitea.siegeln.net/cameleer/cameleer3-server:${{ github.sha }} - kubectl -n cameleer rollout status deployment/cameleer3-server --timeout=120s + kubectl -n cameleer set image deployment/cameleer-server \ + server=gitea.siegeln.net/cameleer/cameleer-server:${{ github.sha }} + kubectl -n cameleer rollout status deployment/cameleer-server --timeout=120s - kubectl -n cameleer set image deployment/cameleer3-ui \ - ui=gitea.siegeln.net/cameleer/cameleer3-server-ui:${{ github.sha }} - kubectl -n cameleer rollout status deployment/cameleer3-ui --timeout=120s + kubectl -n cameleer set image deployment/cameleer-ui \ + ui=gitea.siegeln.net/cameleer/cameleer-server-ui:${{ github.sha }} + kubectl -n cameleer rollout status deployment/cameleer-ui --timeout=120s env: REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} CAMELEER_AUTH_TOKEN: ${{ secrets.CAMELEER_AUTH_TOKEN }} @@ -309,9 +309,9 @@ jobs: kubectl -n "$BRANCH_NS" wait --for=condition=complete job/init-schema --timeout=60s || \ echo "Warning: init-schema job did not complete in time" - name: Wait for server rollout - run: kubectl -n "$BRANCH_NS" rollout status deployment/cameleer3-server --timeout=120s + run: kubectl -n "$BRANCH_NS" rollout status deployment/cameleer-server --timeout=120s - name: Wait for UI rollout - run: kubectl -n "$BRANCH_NS" rollout status deployment/cameleer3-ui --timeout=60s + run: kubectl -n "$BRANCH_NS" rollout status deployment/cameleer-ui --timeout=60s - name: Print deployment URLs run: | echo "====================================" @@ -359,7 +359,7 @@ jobs: --image=postgres:16 \ --restart=Never \ --env="PGPASSWORD=$(kubectl get secret cameleer-postgres-credentials -n cameleer -o jsonpath='{.data.POSTGRES_PASSWORD}' | base64 -d)" \ - --command -- sh -c "psql -h cameleer-postgres -U $(kubectl get secret cameleer-postgres-credentials -n cameleer -o jsonpath='{.data.POSTGRES_USER}' | base64 -d) -d cameleer3 -c 'DROP SCHEMA IF EXISTS ${BRANCH_SCHEMA} CASCADE'" + --command -- sh -c "psql -h cameleer-postgres -U $(kubectl get secret cameleer-postgres-credentials -n cameleer -o jsonpath='{.data.POSTGRES_USER}' | base64 -d) -d cameleer -c 'DROP SCHEMA IF EXISTS ${BRANCH_SCHEMA} CASCADE'" kubectl wait --for=condition=Ready pod/cleanup-schema-${BRANCH_SLUG} -n cameleer --timeout=30s || true kubectl wait --for=jsonpath='{.status.phase}'=Succeeded pod/cleanup-schema-${BRANCH_SLUG} -n cameleer --timeout=60s || true kubectl delete pod cleanup-schema-${BRANCH_SLUG} -n cameleer --ignore-not-found @@ -367,7 +367,7 @@ jobs: run: | API="https://gitea.siegeln.net/api/v1" AUTH="Authorization: token ${REGISTRY_TOKEN}" - for PKG in cameleer3-server cameleer3-server-ui; do + for PKG in cameleer-server cameleer-server-ui; do # Delete branch-specific tag curl -sf -X DELETE -H "$AUTH" "$API/packages/cameleer/container/$PKG/branch-${BRANCH_SLUG}" || true done diff --git a/.gitea/workflows/sonarqube.yml b/.gitea/workflows/sonarqube.yml index f92371fa..aa6c2a48 100644 --- a/.gitea/workflows/sonarqube.yml +++ b/.gitea/workflows/sonarqube.yml @@ -59,5 +59,5 @@ jobs: mvn clean verify sonar:sonar -DskipITs -U --batch-mode \ -Dsonar.host.url=${{ secrets.SONAR_HOST_URL }} \ -Dsonar.token=${{ secrets.SONAR_TOKEN }} \ - -Dsonar.projectKey=cameleer3-server \ - -Dsonar.projectName="Cameleer3 Server" + -Dsonar.projectKey=cameleer-server \ + -Dsonar.projectName="Cameleer Server" diff --git a/.gitignore b/.gitignore index 9a04ad70..b9037c8f 100644 --- a/.gitignore +++ b/.gitignore @@ -39,5 +39,7 @@ logs/ # Claude .claude/ +.superpowers/ +.playwright-mcp/ .worktrees/ .gitnexus diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md index 83ddd769..a70fc75b 100644 --- a/.planning/PROJECT.md +++ b/.planning/PROJECT.md @@ -1,8 +1,8 @@ -# Cameleer3 Server +# Cameleer Server ## What This Is -An observability server that receives, stores, and serves Apache Camel route execution data from distributed Cameleer3 agents. Think njams Server (by Integration Matters) — but built incrementally, API-first, with a modern stack. Users can search through millions of recorded transactions by state, time, duration, full text, and correlate executions across multiple Camel instances. The server also pushes configuration, tracing controls, and ad-hoc commands to agents via SSE. +An observability server that receives, stores, and serves Apache Camel route execution data from distributed Cameleer agents. Think njams Server (by Integration Matters) — but built incrementally, API-first, with a modern stack. Users can search through millions of recorded transactions by state, time, duration, full text, and correlate executions across multiple Camel instances. The server also pushes configuration, tracing controls, and ad-hoc commands to agents via SSE. ## Core Value @@ -16,7 +16,7 @@ Users can reliably search and find any transaction across all connected Camel in ### Active -- [ ] Receive and ingest transaction/activity data from Cameleer3 agents via HTTP POST +- [ ] Receive and ingest transaction/activity data from Cameleer agents via HTTP POST - [ ] Store transactions in a high-volume, horizontally scalable data store with 30-day retention - [ ] Search transactions by state, execution date/time, duration, and full-text content - [ ] Correlate activities across multiple routes and Camel instances within a single transaction @@ -38,8 +38,8 @@ Users can reliably search and find any transaction across all connected Camel in ## Context -- **Agent side**: cameleer3 agent (`https://gitea.siegeln.net/cameleer/cameleer3`) is under active development; already supports creating diagrams and capturing executions -- **Shared library**: `com.cameleer3:cameleer3-common` contains shared models and the graph API; protocol defined in `cameleer3-common/PROTOCOL.md` +- **Agent side**: cameleer agent (`https://gitea.siegeln.net/cameleer/cameleer`) is under active development; already supports creating diagrams and capturing executions +- **Shared library**: `com.cameleer:cameleer-common` contains shared models and the graph API; protocol defined in `cameleer-common/PROTOCOL.md` - **Data model**: Hierarchical — a **transaction** represents a message's full journey, containing **activities** per route execution. Transactions can span multiple Camel instances (e.g., route A calls route B on another instance via endpoint) - **Scale target**: Millions of transactions per day, 50+ connected agents, 30-day data retention - **Query pattern**: Incident-driven — mostly recent data queries, with deep historical dives during incidents @@ -49,7 +49,7 @@ Users can reliably search and find any transaction across all connected Camel in ## Constraints - **Tech stack**: Java 17+, Spring Boot 3.4.3, Maven multi-module — already established -- **Dependency**: Must consume `com.cameleer3:cameleer3-common` from Gitea Maven registry +- **Dependency**: Must consume `com.cameleer:cameleer-common` from Gitea Maven registry - **Protocol**: Agent protocol is still evolving — server must adapt as it stabilizes - **Incremental delivery**: Build step by step; storage and search first, then layer features on top diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index f2b7db10..e2550b7c 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -1,4 +1,4 @@ -# Requirements: Cameleer3 Server +# Requirements: Cameleer Server **Defined:** 2026-03-11 **Core Value:** Users can reliably search and find any transaction across all connected Camel instances — by any combination of state, time, duration, or content — even at millions of transactions per day with 30-day retention. diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 5ff7b330..9aa73e8c 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -1,4 +1,4 @@ -# Roadmap: Cameleer3 Server +# Roadmap: Cameleer Server ## Overview diff --git a/.planning/STATE.md b/.planning/STATE.md index 35c78250..3c5b3181 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -75,7 +75,7 @@ Recent decisions affecting current work: - [Roadmap]: Phases 2 and 3 can execute in parallel (both depend only on Phase 1) - [Roadmap]: Web UI deferred to v2 - [Phase 01]: Used spring-boot-starter-jdbc for JdbcTemplate + HikariCP auto-config -- [Phase 01]: Created MetricsSnapshot record in core module (cameleer3-common has no metrics model) +- [Phase 01]: Created MetricsSnapshot record in core module (cameleer-common has no metrics model) - [Phase 01]: Upgraded testcontainers to 2.0.3 for Docker Desktop 29.x compatibility - [Phase 01]: Changed error_message/error_stacktrace to non-nullable String for tokenbf_v1 index compat - [Phase 01]: TTL expressions require toDateTime() cast for DateTime64 columns in ClickHouse 25.3 @@ -121,7 +121,7 @@ None yet. ### Blockers/Concerns - [Phase 1]: ClickHouse Java client API needs phase-specific research (library has undergone changes) -- [Phase 1]: Must read cameleer3-common PROTOCOL.md before designing ClickHouse schema +- [Phase 1]: Must read cameleer-common PROTOCOL.md before designing ClickHouse schema - [Phase 2]: Diagram rendering library selection is an open question (Batik, jsvg, JGraphX, or client-side) - [Phase 2]: ClickHouse skip indexes may not suffice for full-text; decision point during Phase 2 diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-01-PLAN.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-01-PLAN.md index 69762716..d9a8ace0 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-01-PLAN.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-01-PLAN.md @@ -6,18 +6,18 @@ wave: 1 depends_on: [] files_modified: - pom.xml - - cameleer3-server-core/pom.xml - - cameleer3-server-app/pom.xml + - cameleer-server-core/pom.xml + - cameleer-server-app/pom.xml - docker-compose.yml - clickhouse/init/01-schema.sql - - cameleer3-server-app/src/main/resources/application.yml - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/WriteBuffer.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramRepository.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsRepository.java - - cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/WriteBufferTest.java + - cameleer-server-app/src/main/resources/application.yml + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/WriteBuffer.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramRepository.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsRepository.java + - cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/WriteBufferTest.java autonomous: true requirements: - INGST-04 @@ -32,7 +32,7 @@ must_haves: - "TTL clause on tables removes data older than configured days" - "Docker Compose starts ClickHouse and initializes the schema" artifacts: - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/WriteBuffer.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/WriteBuffer.java" provides: "Generic bounded write buffer with offer/drain/isFull" min_lines: 30 - path: "clickhouse/init/01-schema.sql" @@ -41,15 +41,15 @@ must_haves: - path: "docker-compose.yml" provides: "Local ClickHouse service" contains: "clickhouse-server" - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java" provides: "Repository interface for execution batch inserts" exports: ["insertBatch"] key_links: - - from: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java" + - from: "cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java" to: "application.yml" via: "spring.datasource properties" pattern: "spring\\.datasource" - - from: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java" + - from: "cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java" to: "application.yml" via: "ingestion.* properties" pattern: "ingestion\\." @@ -74,8 +74,8 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un @.planning/phases/01-ingestion-pipeline-api-foundation/01-RESEARCH.md @pom.xml -@cameleer3-server-core/pom.xml -@cameleer3-server-app/pom.xml +@cameleer-server-core/pom.xml +@cameleer-server-app/pom.xml @@ -84,11 +84,11 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un Task 1: Dependencies, Docker Compose, ClickHouse schema, and application config pom.xml, - cameleer3-server-core/pom.xml, - cameleer3-server-app/pom.xml, + cameleer-server-core/pom.xml, + cameleer-server-app/pom.xml, docker-compose.yml, clickhouse/init/01-schema.sql, - cameleer3-server-app/src/main/resources/application.yml + cameleer-server-app/src/main/resources/application.yml - docker compose up -d starts ClickHouse on ports 8123/9000 @@ -101,7 +101,7 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un - Maven compile succeeds with new dependencies - 1. Add dependencies to cameleer3-server-app/pom.xml per research: + 1. Add dependencies to cameleer-server-app/pom.xml per research: - clickhouse-jdbc 0.9.7 (classifier: all) - spring-boot-starter-actuator - springdoc-openapi-starter-webmvc-ui 2.8.6 @@ -109,13 +109,13 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un - junit-jupiter from testcontainers 2.0.2 (test scope) - awaitility (test scope) - 2. Add slf4j-api dependency to cameleer3-server-core/pom.xml. + 2. Add slf4j-api dependency to cameleer-server-core/pom.xml. 3. Create docker-compose.yml at project root with ClickHouse service: - Image: clickhouse/clickhouse-server:25.3 - Ports: 8123:8123, 9000:9000 - Volume mount ./clickhouse/init to /docker-entrypoint-initdb.d - - Environment: CLICKHOUSE_USER=cameleer, CLICKHOUSE_PASSWORD=cameleer_dev, CLICKHOUSE_DB=cameleer3 + - Environment: CLICKHOUSE_USER=cameleer, CLICKHOUSE_PASSWORD=cameleer_dev, CLICKHOUSE_DB=cameleer - ulimits nofile 262144 4. Create clickhouse/init/01-schema.sql with the three tables from research: @@ -124,9 +124,9 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un - agent_metrics: MergeTree, daily partitioning on collected_at, ORDER BY (agent_id, metric_name, collected_at), TTL collected_at + INTERVAL 30 DAY, SETTINGS ttl_only_drop_parts=1. - All DateTime fields use DateTime64(3, 'UTC'). - 5. Create cameleer3-server-app/src/main/resources/application.yml with config from research: + 5. Create cameleer-server-app/src/main/resources/application.yml with config from research: - server.port: 8081 - - spring.datasource: url=jdbc:ch://localhost:8123/cameleer3, username/password, driver-class-name + - spring.datasource: url=jdbc:ch://localhost:8123/cameleer, username/password, driver-class-name - spring.jackson: write-dates-as-timestamps=false, fail-on-unknown-properties=false - ingestion: buffer-capacity=50000, batch-size=5000, flush-interval-ms=1000 - clickhouse.ttl-days: 30 @@ -144,13 +144,13 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un Task 2: WriteBuffer, repository interfaces, IngestionConfig, and ClickHouseConfig - cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/WriteBuffer.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramRepository.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsRepository.java, - cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/WriteBufferTest.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java + cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/WriteBuffer.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramRepository.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsRepository.java, + cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/WriteBufferTest.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java - WriteBuffer(capacity=10): offer() returns true for first 10 items, false on 11th @@ -181,7 +181,7 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un 3. Create repository interfaces in core module: - ExecutionRepository: void insertBatch(List executions) - DiagramRepository: void store(RouteGraph graph), Optional findByContentHash(String hash), Optional findContentHashForRoute(String routeId, String agentId) - - MetricsRepository: void insertBatch(List metrics) -- use a generic type or the cameleer3-common metrics model if available; if not, create a simple MetricsData record in core module + - MetricsRepository: void insertBatch(List metrics) -- use a generic type or the cameleer-common metrics model if available; if not, create a simple MetricsData record in core module 4. Create IngestionConfig as @ConfigurationProperties("ingestion"): - bufferCapacity (int, default 50000) @@ -193,7 +193,7 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un - No custom bean needed if relying on auto-config; only create if explicit JdbcTemplate customization required - mvn test -pl cameleer3-server-core -Dtest=WriteBufferTest -q 2>&1 | tail -10 + mvn test -pl cameleer-server-core -Dtest=WriteBufferTest -q 2>&1 | tail -10 WriteBuffer passes all unit tests. Repository interfaces exist with correct method signatures. IngestionConfig reads from application.yml. @@ -201,7 +201,7 @@ Output: Working ClickHouse via Docker Compose, DDL with TTL, WriteBuffer with un -- `mvn test -pl cameleer3-server-core -q` -- all WriteBuffer unit tests pass +- `mvn test -pl cameleer-server-core -q` -- all WriteBuffer unit tests pass - `mvn clean compile -q` -- full project compiles with new dependencies - `docker compose config` -- validates Docker Compose file - clickhouse/init/01-schema.sql contains CREATE TABLE for all three tables with correct ENGINE, ORDER BY, PARTITION BY, and TTL diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-01-SUMMARY.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-01-SUMMARY.md index b5df55ba..abb957e4 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-01-SUMMARY.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-01-SUMMARY.md @@ -26,22 +26,22 @@ key-files: created: - docker-compose.yml - clickhouse/init/01-schema.sql - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/WriteBuffer.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramRepository.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsRepository.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/MetricsSnapshot.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java - - cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/WriteBufferTest.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/WriteBuffer.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramRepository.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsRepository.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/MetricsSnapshot.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java + - cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/WriteBufferTest.java modified: - - cameleer3-server-core/pom.xml - - cameleer3-server-app/pom.xml - - cameleer3-server-app/src/main/resources/application.yml + - cameleer-server-core/pom.xml + - cameleer-server-app/pom.xml + - cameleer-server-app/src/main/resources/application.yml key-decisions: - "Used spring-boot-starter-jdbc for JdbcTemplate + HikariCP auto-config rather than manual DataSource" - - "Created MetricsSnapshot record in core module since cameleer3-common has no metrics model" + - "Created MetricsSnapshot record in core module since cameleer-common has no metrics model" - "ClickHouseConfig exposes JdbcTemplate bean; relies on Spring Boot DataSource auto-config" patterns-established: @@ -84,21 +84,21 @@ Each task was committed atomically: ## Files Created/Modified - `docker-compose.yml` - ClickHouse service with ports 8123/9000, init volume mount - `clickhouse/init/01-schema.sql` - DDL for route_executions, route_diagrams, agent_metrics -- `cameleer3-server-core/src/main/java/.../ingestion/WriteBuffer.java` - Bounded queue with offer/offerBatch/drain -- `cameleer3-server-core/src/main/java/.../storage/ExecutionRepository.java` - Batch insert interface for RouteExecution -- `cameleer3-server-core/src/main/java/.../storage/DiagramRepository.java` - Store/find interface for RouteGraph -- `cameleer3-server-core/src/main/java/.../storage/MetricsRepository.java` - Batch insert interface for MetricsSnapshot -- `cameleer3-server-core/src/main/java/.../storage/model/MetricsSnapshot.java` - Metrics data record -- `cameleer3-server-app/src/main/java/.../config/IngestionConfig.java` - Buffer capacity, batch size, flush interval -- `cameleer3-server-app/src/main/java/.../config/ClickHouseConfig.java` - JdbcTemplate bean -- `cameleer3-server-core/src/test/java/.../ingestion/WriteBufferTest.java` - 10 unit tests for WriteBuffer -- `cameleer3-server-core/pom.xml` - Added slf4j-api -- `cameleer3-server-app/pom.xml` - Added clickhouse-jdbc, springdoc, actuator, testcontainers, awaitility -- `cameleer3-server-app/src/main/resources/application.yml` - Full config with datasource, ingestion, springdoc, actuator +- `cameleer-server-core/src/main/java/.../ingestion/WriteBuffer.java` - Bounded queue with offer/offerBatch/drain +- `cameleer-server-core/src/main/java/.../storage/ExecutionRepository.java` - Batch insert interface for RouteExecution +- `cameleer-server-core/src/main/java/.../storage/DiagramRepository.java` - Store/find interface for RouteGraph +- `cameleer-server-core/src/main/java/.../storage/MetricsRepository.java` - Batch insert interface for MetricsSnapshot +- `cameleer-server-core/src/main/java/.../storage/model/MetricsSnapshot.java` - Metrics data record +- `cameleer-server-app/src/main/java/.../config/IngestionConfig.java` - Buffer capacity, batch size, flush interval +- `cameleer-server-app/src/main/java/.../config/ClickHouseConfig.java` - JdbcTemplate bean +- `cameleer-server-core/src/test/java/.../ingestion/WriteBufferTest.java` - 10 unit tests for WriteBuffer +- `cameleer-server-core/pom.xml` - Added slf4j-api +- `cameleer-server-app/pom.xml` - Added clickhouse-jdbc, springdoc, actuator, testcontainers, awaitility +- `cameleer-server-app/src/main/resources/application.yml` - Full config with datasource, ingestion, springdoc, actuator ## Decisions Made - Used spring-boot-starter-jdbc to get JdbcTemplate and HikariCP auto-configuration rather than manually wiring a DataSource -- Created MetricsSnapshot record in core module since cameleer3-common does not include a metrics model +- Created MetricsSnapshot record in core module since cameleer-common does not include a metrics model - ClickHouseConfig is minimal -- relies on Spring Boot auto-configuring DataSource from spring.datasource properties ## Deviations from Plan diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-02-PLAN.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-02-PLAN.md index 73ef1678..fb3af584 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-02-PLAN.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-02-PLAN.md @@ -5,18 +5,18 @@ type: execute wave: 3 depends_on: ["01-01", "01-03"] files_modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/MetricsController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseDiagramRepository.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsRepository.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ClickHouseFlushScheduler.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ExecutionControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/MetricsControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/BackpressureIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/MetricsController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseDiagramRepository.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsRepository.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ClickHouseFlushScheduler.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ExecutionControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/MetricsControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/BackpressureIT.java autonomous: true requirements: - INGST-01 @@ -32,16 +32,16 @@ must_haves: - "Data posted to endpoints appears in ClickHouse after flush interval" - "When buffer is full, endpoints return 503 with Retry-After header" artifacts: - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java" provides: "POST /api/v1/data/executions endpoint" min_lines: 20 - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java" provides: "Batch insert to route_executions table via JdbcTemplate" min_lines: 30 - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ClickHouseFlushScheduler.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ClickHouseFlushScheduler.java" provides: "Scheduled drain of WriteBuffer into ClickHouse" min_lines: 20 - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java" provides: "Routes data to appropriate WriteBuffer instances" min_lines: 20 key_links: @@ -92,7 +92,7 @@ Output: Working ingestion flow verified by integration tests against Testcontain -From cameleer3-server-core WriteBuffer.java: +From cameleer-server-core WriteBuffer.java: ```java public class WriteBuffer { public WriteBuffer(int capacity); @@ -106,7 +106,7 @@ public class WriteBuffer { } ``` -From cameleer3-server-core repository interfaces: +From cameleer-server-core repository interfaces: ```java public interface ExecutionRepository { void insertBatch(List executions); @@ -138,11 +138,11 @@ public class IngestionConfig { Task 1: IngestionService, ClickHouse repositories, and flush scheduler - cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseDiagramRepository.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsRepository.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ClickHouseFlushScheduler.java + cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseDiagramRepository.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsRepository.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ClickHouseFlushScheduler.java 1. Create IngestionService in core module (no Spring annotations -- it's a plain class): @@ -188,13 +188,13 @@ public class IngestionConfig { Task 2: Ingestion REST controllers and integration tests - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/MetricsController.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ExecutionControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/MetricsControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/BackpressureIT.java + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/MetricsController.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ExecutionControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/MetricsControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/BackpressureIT.java - POST /api/v1/data/executions with single RouteExecution JSON returns 202 @@ -245,7 +245,7 @@ public class IngestionConfig { Note: All integration tests must include X-Cameleer-Protocol-Version:1 header (API-04 will be enforced by Plan 03's interceptor, but include the header now for forward compatibility). - mvn test -pl cameleer3-server-app -Dtest="ExecutionControllerIT,DiagramControllerIT,MetricsControllerIT,BackpressureIT" -q 2>&1 | tail -15 + mvn test -pl cameleer-server-app -Dtest="ExecutionControllerIT,DiagramControllerIT,MetricsControllerIT,BackpressureIT" -q 2>&1 | tail -15 All three ingestion endpoints return 202 on valid data. Data arrives in ClickHouse after flush. Buffer-full returns 503 with Retry-After. Unknown JSON fields accepted. Integration tests green. @@ -253,7 +253,7 @@ public class IngestionConfig { -- `mvn test -pl cameleer3-server-app -Dtest="ExecutionControllerIT,DiagramControllerIT,MetricsControllerIT,BackpressureIT" -q` -- all integration tests pass +- `mvn test -pl cameleer-server-app -Dtest="ExecutionControllerIT,DiagramControllerIT,MetricsControllerIT,BackpressureIT" -q` -- all integration tests pass - POST to /api/v1/data/executions returns 202 - POST to /api/v1/data/diagrams returns 202 - POST to /api/v1/data/metrics returns 202 diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-02-SUMMARY.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-02-SUMMARY.md index 6e50e8ef..83041fdb 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-02-SUMMARY.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-02-SUMMARY.md @@ -30,21 +30,21 @@ tech-stack: key-files: created: - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseDiagramRepository.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsRepository.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ClickHouseFlushScheduler.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/MetricsController.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ExecutionControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/MetricsControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/BackpressureIT.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseDiagramRepository.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsRepository.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ClickHouseFlushScheduler.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/MetricsController.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ExecutionControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/MetricsControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/BackpressureIT.java modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java key-decisions: - "Controllers accept raw String body and detect single vs array JSON to support both payload formats" @@ -91,20 +91,20 @@ Each task was committed atomically: 3. **Task 2 GREEN: Ingestion REST controllers with backpressure** - `8fe65f0` (feat) ## Files Created/Modified -- `cameleer3-server-core/.../ingestion/IngestionService.java` - Routes data to WriteBuffer instances -- `cameleer3-server-app/.../storage/ClickHouseExecutionRepository.java` - Batch insert with parallel processor arrays -- `cameleer3-server-app/.../storage/ClickHouseDiagramRepository.java` - JSON storage with SHA-256 content-hash dedup -- `cameleer3-server-app/.../storage/ClickHouseMetricsRepository.java` - Batch insert for agent_metrics -- `cameleer3-server-app/.../ingestion/ClickHouseFlushScheduler.java` - Scheduled drain + SmartLifecycle shutdown -- `cameleer3-server-app/.../config/IngestionBeanConfig.java` - WriteBuffer and IngestionService bean wiring -- `cameleer3-server-app/.../controller/ExecutionController.java` - POST /api/v1/data/executions -- `cameleer3-server-app/.../controller/DiagramController.java` - POST /api/v1/data/diagrams -- `cameleer3-server-app/.../controller/MetricsController.java` - POST /api/v1/data/metrics -- `cameleer3-server-app/.../config/IngestionConfig.java` - Removed @Configuration (fix duplicate bean) -- `cameleer3-server-app/.../controller/ExecutionControllerIT.java` - 4 tests: single, array, flush, unknown fields -- `cameleer3-server-app/.../controller/DiagramControllerIT.java` - 3 tests: single, array, flush -- `cameleer3-server-app/.../controller/MetricsControllerIT.java` - 2 tests: POST, flush -- `cameleer3-server-app/.../controller/BackpressureIT.java` - 2 tests: 503 response, data not lost +- `cameleer-server-core/.../ingestion/IngestionService.java` - Routes data to WriteBuffer instances +- `cameleer-server-app/.../storage/ClickHouseExecutionRepository.java` - Batch insert with parallel processor arrays +- `cameleer-server-app/.../storage/ClickHouseDiagramRepository.java` - JSON storage with SHA-256 content-hash dedup +- `cameleer-server-app/.../storage/ClickHouseMetricsRepository.java` - Batch insert for agent_metrics +- `cameleer-server-app/.../ingestion/ClickHouseFlushScheduler.java` - Scheduled drain + SmartLifecycle shutdown +- `cameleer-server-app/.../config/IngestionBeanConfig.java` - WriteBuffer and IngestionService bean wiring +- `cameleer-server-app/.../controller/ExecutionController.java` - POST /api/v1/data/executions +- `cameleer-server-app/.../controller/DiagramController.java` - POST /api/v1/data/diagrams +- `cameleer-server-app/.../controller/MetricsController.java` - POST /api/v1/data/metrics +- `cameleer-server-app/.../config/IngestionConfig.java` - Removed @Configuration (fix duplicate bean) +- `cameleer-server-app/.../controller/ExecutionControllerIT.java` - 4 tests: single, array, flush, unknown fields +- `cameleer-server-app/.../controller/DiagramControllerIT.java` - 3 tests: single, array, flush +- `cameleer-server-app/.../controller/MetricsControllerIT.java` - 2 tests: POST, flush +- `cameleer-server-app/.../controller/BackpressureIT.java` - 2 tests: 503 response, data not lost ## Decisions Made - Controllers accept raw String body and detect single vs array JSON (starts with `[`), supporting both payload formats per protocol spec @@ -119,7 +119,7 @@ Each task was committed atomically: - **Found during:** Task 2 (integration test context startup) - **Issue:** IngestionConfig had both `@Configuration` and `@ConfigurationProperties`, while `@EnableConfigurationProperties(IngestionConfig.class)` on the app class created a second bean, causing "expected single matching bean but found 2" - **Fix:** Removed `@Configuration` from IngestionConfig, relying solely on `@EnableConfigurationProperties` -- **Files modified:** cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java +- **Files modified:** cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java - **Verification:** Application context starts successfully, all tests pass - **Committed in:** 8fe65f0 diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-03-PLAN.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-03-PLAN.md index b344a67d..6ce02139 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-03-PLAN.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-03-PLAN.md @@ -5,15 +5,15 @@ type: execute wave: 2 depends_on: ["01-01"] files_modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/ProtocolVersionInterceptor.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java - - cameleer3-server-app/src/test/resources/application-test.yml - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/interceptor/ProtocolVersionIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/HealthControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/OpenApiIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ForwardCompatIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/ProtocolVersionInterceptor.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/CameleerServerApplication.java + - cameleer-server-app/src/test/resources/application-test.yml + - cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/interceptor/ProtocolVersionIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/HealthControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/OpenApiIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ForwardCompatIT.java autonomous: true requirements: - API-01 @@ -34,13 +34,13 @@ must_haves: - "Unknown JSON fields in request body do not cause deserialization errors" - "ClickHouse tables have TTL clause for 30-day retention" artifacts: - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/ProtocolVersionInterceptor.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/ProtocolVersionInterceptor.java" provides: "Validates X-Cameleer-Protocol-Version:1 header on data endpoints" min_lines: 20 - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java" provides: "Registers interceptor with path patterns" min_lines: 10 - - path: "cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java" + - path: "cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java" provides: "Shared Testcontainers base class for integration tests" min_lines: 20 key_links: @@ -83,11 +83,11 @@ Output: AbstractClickHouseIT base class, working health, Swagger UI, protocol he Task 1: Test infrastructure, protocol version interceptor, WebConfig, and Spring Boot application class - cameleer3-server-app/src/test/resources/application-test.yml, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/ProtocolVersionInterceptor.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java + cameleer-server-app/src/test/resources/application-test.yml, + cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/ProtocolVersionInterceptor.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/CameleerServerApplication.java 1. Create application-test.yml for test profile: @@ -113,15 +113,15 @@ Output: AbstractClickHouseIT base class, working health, Swagger UI, protocol he - Override addInterceptors: register interceptor with pathPatterns "/api/v1/data/**" and "/api/v1/agents/**" - Explicitly EXCLUDE: "/api/v1/health", "/api/v1/api-docs/**", "/api/v1/swagger-ui/**", "/api/v1/swagger-ui.html" - 5. Create or update Cameleer3ServerApplication: - - @SpringBootApplication in package com.cameleer3.server.app + 5. Create or update CameleerServerApplication: + - @SpringBootApplication in package com.cameleer.server.app - @EnableScheduling (needed for ClickHouseFlushScheduler from Plan 02) - @EnableConfigurationProperties(IngestionConfig.class) - Main method with SpringApplication.run() - - Ensure package scanning covers com.cameleer3.server.app and com.cameleer3.server.core + - Ensure package scanning covers com.cameleer.server.app and com.cameleer.server.core - mvn clean compile -pl cameleer3-server-app -q 2>&1 | tail -5 + mvn clean compile -pl cameleer-server-app -q 2>&1 | tail -5 AbstractClickHouseIT base class ready for integration tests. ProtocolVersionInterceptor validates header on data/agent paths. Health, swagger, and api-docs paths excluded. Application class enables scheduling and config properties. @@ -129,10 +129,10 @@ Output: AbstractClickHouseIT base class, working health, Swagger UI, protocol he Task 2: Health, OpenAPI, protocol version, forward compat, and TTL integration tests - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/HealthControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/OpenApiIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/interceptor/ProtocolVersionIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ForwardCompatIT.java + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/HealthControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/OpenApiIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/interceptor/ProtocolVersionIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ForwardCompatIT.java - GET /api/v1/health returns 200 with JSON containing status field @@ -178,7 +178,7 @@ Output: AbstractClickHouseIT base class, working health, Swagger UI, protocol he Note: All tests that POST to data endpoints must include X-Cameleer-Protocol-Version:1 header. - mvn test -pl cameleer3-server-app -Dtest="HealthControllerIT,OpenApiIT,ProtocolVersionIT,ForwardCompatIT" -q 2>&1 | tail -15 + mvn test -pl cameleer-server-app -Dtest="HealthControllerIT,OpenApiIT,ProtocolVersionIT,ForwardCompatIT" -q 2>&1 | tail -15 Health returns 200. OpenAPI docs are available and list endpoints. Protocol version header enforced on data paths, not on health/docs. Unknown JSON fields accepted. TTL confirmed in ClickHouse DDL via HealthControllerIT test methods. @@ -186,7 +186,7 @@ Output: AbstractClickHouseIT base class, working health, Swagger UI, protocol he -- `mvn test -pl cameleer3-server-app -Dtest="HealthControllerIT,OpenApiIT,ProtocolVersionIT,ForwardCompatIT" -q` -- all tests pass +- `mvn test -pl cameleer-server-app -Dtest="HealthControllerIT,OpenApiIT,ProtocolVersionIT,ForwardCompatIT" -q` -- all tests pass - GET /api/v1/health returns 200 - GET /api/v1/api-docs returns OpenAPI spec - Missing protocol header returns 400 on data endpoints diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-03-SUMMARY.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-03-SUMMARY.md index 8e663ecc..4652184a 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-03-SUMMARY.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-03-SUMMARY.md @@ -12,7 +12,7 @@ provides: - AbstractClickHouseIT base class for all integration tests - ProtocolVersionInterceptor enforcing X-Cameleer-Protocol-Version:1 on data/agent paths - WebConfig with interceptor registration and path exclusions - - Cameleer3ServerApplication with @EnableScheduling and component scanning + - CameleerServerApplication with @EnableScheduling and component scanning - 12 passing integration tests (health, OpenAPI, protocol version, forward compat, TTL) affects: [01-02, 02-search, 03-agent-registry] @@ -23,17 +23,17 @@ tech-stack: key-files: created: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/ProtocolVersionInterceptor.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java - - cameleer3-server-app/src/test/resources/application-test.yml - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/HealthControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/OpenApiIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/interceptor/ProtocolVersionIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ForwardCompatIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/CameleerServerApplication.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/ProtocolVersionInterceptor.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java + - cameleer-server-app/src/test/resources/application-test.yml + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/HealthControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/OpenApiIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/interceptor/ProtocolVersionIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ForwardCompatIT.java modified: - - cameleer3-server-app/pom.xml + - cameleer-server-app/pom.xml - pom.xml - clickhouse/init/01-schema.sql @@ -70,7 +70,7 @@ completed: 2026-03-11 - ProtocolVersionInterceptor validates X-Cameleer-Protocol-Version:1 on /api/v1/data/** and /api/v1/agents/** paths, returning 400 JSON error for missing or wrong version - AbstractClickHouseIT base class with Testcontainers ClickHouse 25.3, shared static container, schema init from 01-schema.sql - 12 integration tests: health endpoint (2), OpenAPI docs (2), protocol version enforcement (5), forward compatibility (1), TTL verification (2) -- Cameleer3ServerApplication with @EnableScheduling, @EnableConfigurationProperties, and dual package scanning +- CameleerServerApplication with @EnableScheduling, @EnableConfigurationProperties, and dual package scanning ## Task Commits @@ -80,17 +80,17 @@ Each task was committed atomically: 2. **Task 2: Integration tests for health, OpenAPI, protocol version, forward compat, and TTL** - `2d3fde3` (test) ## Files Created/Modified -- `cameleer3-server-app/src/main/java/.../Cameleer3ServerApplication.java` - Spring Boot entry point with scheduling and config properties -- `cameleer3-server-app/src/main/java/.../interceptor/ProtocolVersionInterceptor.java` - Validates protocol version header on data/agent paths -- `cameleer3-server-app/src/main/java/.../config/WebConfig.java` - Registers interceptor with path patterns and exclusions -- `cameleer3-server-app/src/test/java/.../AbstractClickHouseIT.java` - Shared Testcontainers base class for ITs -- `cameleer3-server-app/src/test/resources/application-test.yml` - Test profile with small buffer config -- `cameleer3-server-app/src/test/java/.../controller/HealthControllerIT.java` - Health endpoint and TTL tests -- `cameleer3-server-app/src/test/java/.../controller/OpenApiIT.java` - OpenAPI and Swagger UI tests -- `cameleer3-server-app/src/test/java/.../interceptor/ProtocolVersionIT.java` - Protocol header enforcement tests -- `cameleer3-server-app/src/test/java/.../controller/ForwardCompatIT.java` - Unknown JSON fields test +- `cameleer-server-app/src/main/java/.../CameleerServerApplication.java` - Spring Boot entry point with scheduling and config properties +- `cameleer-server-app/src/main/java/.../interceptor/ProtocolVersionInterceptor.java` - Validates protocol version header on data/agent paths +- `cameleer-server-app/src/main/java/.../config/WebConfig.java` - Registers interceptor with path patterns and exclusions +- `cameleer-server-app/src/test/java/.../AbstractClickHouseIT.java` - Shared Testcontainers base class for ITs +- `cameleer-server-app/src/test/resources/application-test.yml` - Test profile with small buffer config +- `cameleer-server-app/src/test/java/.../controller/HealthControllerIT.java` - Health endpoint and TTL tests +- `cameleer-server-app/src/test/java/.../controller/OpenApiIT.java` - OpenAPI and Swagger UI tests +- `cameleer-server-app/src/test/java/.../interceptor/ProtocolVersionIT.java` - Protocol header enforcement tests +- `cameleer-server-app/src/test/java/.../controller/ForwardCompatIT.java` - Unknown JSON fields test - `pom.xml` - Override testcontainers.version to 2.0.3 -- `cameleer3-server-app/pom.xml` - Remove junit-jupiter, upgrade testcontainers-clickhouse to 2.0.3 +- `cameleer-server-app/pom.xml` - Remove junit-jupiter, upgrade testcontainers-clickhouse to 2.0.3 - `clickhouse/init/01-schema.sql` - Fix TTL expressions and error column types ## Decisions Made @@ -107,7 +107,7 @@ Each task was committed atomically: - **Found during:** Task 2 (compilation) - **Issue:** org.testcontainers:junit-jupiter:2.0.2 does not exist in Maven Central - **Fix:** Removed junit-jupiter dependency, upgraded to TC 2.0.3, managed container lifecycle manually via static initializer -- **Files modified:** cameleer3-server-app/pom.xml, pom.xml, AbstractClickHouseIT.java +- **Files modified:** cameleer-server-app/pom.xml, pom.xml, AbstractClickHouseIT.java - **Verification:** All tests compile and pass - **Committed in:** 2d3fde3 diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-RESEARCH.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-RESEARCH.md index 0def4e32..3eeacc95 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-RESEARCH.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-RESEARCH.md @@ -6,7 +6,7 @@ ## Summary -Phase 1 establishes the data pipeline and API skeleton for Cameleer3 Server. Agents POST execution data, diagrams, and metrics to REST endpoints; the server buffers these in memory and batch-flushes to ClickHouse. The ClickHouse schema design is the most critical and least reversible decision in this phase -- ORDER BY and partitioning cannot be changed without table recreation. +Phase 1 establishes the data pipeline and API skeleton for Cameleer Server. Agents POST execution data, diagrams, and metrics to REST endpoints; the server buffers these in memory and batch-flushes to ClickHouse. The ClickHouse schema design is the most critical and least reversible decision in this phase -- ORDER BY and partitioning cannot be changed without table recreation. The ClickHouse Java ecosystem has undergone significant changes. The recommended approach is **clickhouse-jdbc v0.9.7** (JDBC V2 driver) with Spring Boot's JdbcTemplate for batch inserts. An alternative is the standalone **client-v2** artifact which offers a POJO-based insert API, but JDBC integration with Spring Boot is more conventional and better documented. ClickHouse now has a native full-text index (TYPE text, GA as of March 2026) that supersedes the older tokenbf_v1 bloom filter approach -- this is relevant for Phase 2 but should be accounted for in schema design now. @@ -17,7 +17,7 @@ The ClickHouse Java ecosystem has undergone significant changes. The recommended | ID | Description | Research Support | |----|-------------|-----------------| -| INGST-01 (#1) | Accept RouteExecution via POST /api/v1/data/executions, return 202 | REST controller + async write buffer pattern; Jackson deserialization of cameleer3-common models | +| INGST-01 (#1) | Accept RouteExecution via POST /api/v1/data/executions, return 202 | REST controller + async write buffer pattern; Jackson deserialization of cameleer-common models | | INGST-02 (#2) | Accept RouteGraph via POST /api/v1/data/diagrams, return 202 | Same pattern; separate ClickHouse table for diagrams with content-hash dedup | | INGST-03 (#3) | Accept metrics via POST /api/v1/data/metrics, return 202 | Same pattern; separate ClickHouse table for metrics | | INGST-04 (#4) | In-memory batch buffer with configurable flush interval/size | ArrayBlockingQueue + @Scheduled flush; configurable via application.yml | @@ -60,7 +60,7 @@ The ClickHouse Java ecosystem has undergone significant changes. The recommended | ArrayBlockingQueue | LMAX Disruptor | Disruptor is faster under extreme contention but adds complexity; ABQ is sufficient for this throughput | | Spring JdbcTemplate | Raw JDBC PreparedStatement | JdbcTemplate provides cleaner error handling and resource management; no meaningful overhead | -**Installation (add to cameleer3-server-app/pom.xml):** +**Installation (add to cameleer-server-app/pom.xml):** ```xml @@ -103,7 +103,7 @@ The ClickHouse Java ecosystem has undergone significant changes. The recommended ``` -**Add to cameleer3-server-core/pom.xml:** +**Add to cameleer-server-core/pom.xml:** ```xml @@ -117,7 +117,7 @@ The ClickHouse Java ecosystem has undergone significant changes. The recommended ### Recommended Project Structure ``` -cameleer3-server-core/src/main/java/com/cameleer3/server/core/ +cameleer-server-core/src/main/java/com/cameleer/server/core/ ingestion/ WriteBuffer.java # Bounded queue + flush logic IngestionService.java # Accepts data, routes to buffer @@ -126,9 +126,9 @@ cameleer3-server-core/src/main/java/com/cameleer3/server/core/ DiagramRepository.java # Interface: store/retrieve diagrams MetricsRepository.java # Interface: store metrics model/ - (extend/complement cameleer3-common models as needed) + (extend/complement cameleer-common models as needed) -cameleer3-server-app/src/main/java/com/cameleer3/server/app/ +cameleer-server-app/src/main/java/com/cameleer/server/app/ config/ ClickHouseConfig.java # DataSource + JdbcTemplate bean IngestionConfig.java # Buffer size, flush interval from YAML @@ -424,7 +424,7 @@ services: environment: CLICKHOUSE_USER: cameleer CLICKHOUSE_PASSWORD: cameleer_dev - CLICKHOUSE_DB: cameleer3 + CLICKHOUSE_DB: cameleer ulimits: nofile: soft: 262144 @@ -442,7 +442,7 @@ server: spring: datasource: - url: jdbc:ch://localhost:8123/cameleer3 + url: jdbc:ch://localhost:8123/cameleer username: cameleer password: cameleer_dev driver-class-name: com.clickhouse.jdbc.ClickHouseDriver @@ -493,10 +493,10 @@ management: ## Open Questions -1. **Exact cameleer3-common model structure** +1. **Exact cameleer-common model structure** - What we know: Models include RouteExecution, ProcessorExecution, ExchangeSnapshot, RouteGraph, RouteNode, RouteEdge - What's unclear: Exact field names, types, nesting structure -- needed to design ClickHouse schema precisely - - Recommendation: Read cameleer3-common source code before implementing schema. Schema must match the wire format. + - Recommendation: Read cameleer-common source code before implementing schema. Schema must match the wire format. 2. **ClickHouse JDBC V2 + HikariCP compatibility** - What we know: clickhouse-jdbc 0.9.7 implements JDBC spec; HikariCP is Spring Boot default @@ -515,36 +515,36 @@ management: | Property | Value | |----------|-------| | Framework | JUnit 5 (Spring Boot managed) + Testcontainers 2.0.2 | -| Config file | cameleer3-server-app/src/test/resources/application-test.yml (Wave 0) | -| Quick run command | `mvn test -pl cameleer3-server-core -Dtest=WriteBufferTest -q` | +| Config file | cameleer-server-app/src/test/resources/application-test.yml (Wave 0) | +| Quick run command | `mvn test -pl cameleer-server-core -Dtest=WriteBufferTest -q` | | Full suite command | `mvn verify` | ### Phase Requirements -> Test Map | Req ID | Behavior | Test Type | Automated Command | File Exists? | |--------|----------|-----------|-------------------|-------------| -| INGST-01 | POST /api/v1/data/executions returns 202, data in ClickHouse | integration | `mvn test -pl cameleer3-server-app -Dtest=ExecutionControllerIT -q` | Wave 0 | -| INGST-02 | POST /api/v1/data/diagrams returns 202 | integration | `mvn test -pl cameleer3-server-app -Dtest=DiagramControllerIT -q` | Wave 0 | -| INGST-03 | POST /api/v1/data/metrics returns 202 | integration | `mvn test -pl cameleer3-server-app -Dtest=MetricsControllerIT -q` | Wave 0 | -| INGST-04 | Buffer flushes at interval/size | unit | `mvn test -pl cameleer3-server-core -Dtest=WriteBufferTest -q` | Wave 0 | -| INGST-05 | 503 when buffer full | unit+integration | `mvn test -pl cameleer3-server-app -Dtest=BackpressureIT -q` | Wave 0 | -| INGST-06 | TTL removes old data | integration | `mvn test -pl cameleer3-server-app -Dtest=ClickHouseTtlIT -q` | Wave 0 | +| INGST-01 | POST /api/v1/data/executions returns 202, data in ClickHouse | integration | `mvn test -pl cameleer-server-app -Dtest=ExecutionControllerIT -q` | Wave 0 | +| INGST-02 | POST /api/v1/data/diagrams returns 202 | integration | `mvn test -pl cameleer-server-app -Dtest=DiagramControllerIT -q` | Wave 0 | +| INGST-03 | POST /api/v1/data/metrics returns 202 | integration | `mvn test -pl cameleer-server-app -Dtest=MetricsControllerIT -q` | Wave 0 | +| INGST-04 | Buffer flushes at interval/size | unit | `mvn test -pl cameleer-server-core -Dtest=WriteBufferTest -q` | Wave 0 | +| INGST-05 | 503 when buffer full | unit+integration | `mvn test -pl cameleer-server-app -Dtest=BackpressureIT -q` | Wave 0 | +| INGST-06 | TTL removes old data | integration | `mvn test -pl cameleer-server-app -Dtest=ClickHouseTtlIT -q` | Wave 0 | | API-01 | Endpoints under /api/v1/ | integration | Covered by controller ITs | Wave 0 | -| API-02 | OpenAPI docs available | integration | `mvn test -pl cameleer3-server-app -Dtest=OpenApiIT -q` | Wave 0 | -| API-03 | GET /api/v1/health responds | integration | `mvn test -pl cameleer3-server-app -Dtest=HealthControllerIT -q` | Wave 0 | -| API-04 | Protocol version header validated | integration | `mvn test -pl cameleer3-server-app -Dtest=ProtocolVersionIT -q` | Wave 0 | -| API-05 | Unknown JSON fields accepted | unit | `mvn test -pl cameleer3-server-app -Dtest=ForwardCompatIT -q` | Wave 0 | +| API-02 | OpenAPI docs available | integration | `mvn test -pl cameleer-server-app -Dtest=OpenApiIT -q` | Wave 0 | +| API-03 | GET /api/v1/health responds | integration | `mvn test -pl cameleer-server-app -Dtest=HealthControllerIT -q` | Wave 0 | +| API-04 | Protocol version header validated | integration | `mvn test -pl cameleer-server-app -Dtest=ProtocolVersionIT -q` | Wave 0 | +| API-05 | Unknown JSON fields accepted | unit | `mvn test -pl cameleer-server-app -Dtest=ForwardCompatIT -q` | Wave 0 | ### Sampling Rate -- **Per task commit:** `mvn test -pl cameleer3-server-core -q` (unit tests, fast) +- **Per task commit:** `mvn test -pl cameleer-server-core -q` (unit tests, fast) - **Per wave merge:** `mvn verify` (full suite with Testcontainers integration tests) - **Phase gate:** Full suite green before verification ### Wave 0 Gaps -- [ ] `cameleer3-server-app/src/test/resources/application-test.yml` -- test ClickHouse config -- [ ] `cameleer3-server-core/src/test/java/.../WriteBufferTest.java` -- buffer unit tests -- [ ] `cameleer3-server-app/src/test/java/.../AbstractClickHouseIT.java` -- shared Testcontainers base class -- [ ] `cameleer3-server-app/src/test/java/.../ExecutionControllerIT.java` -- ingestion integration test +- [ ] `cameleer-server-app/src/test/resources/application-test.yml` -- test ClickHouse config +- [ ] `cameleer-server-core/src/test/java/.../WriteBufferTest.java` -- buffer unit tests +- [ ] `cameleer-server-app/src/test/java/.../AbstractClickHouseIT.java` -- shared Testcontainers base class +- [ ] `cameleer-server-app/src/test/java/.../ExecutionControllerIT.java` -- ingestion integration test - [ ] Docker available on test machine for Testcontainers ## Sources diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-VALIDATION.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-VALIDATION.md index d83fb467..8591e0f9 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-VALIDATION.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-VALIDATION.md @@ -18,8 +18,8 @@ created: 2026-03-11 | Property | Value | |----------|-------| | **Framework** | JUnit 5 (Spring Boot managed) + Testcontainers 2.0.2 | -| **Config file** | cameleer3-server-app/src/test/resources/application-test.yml (Wave 0) | -| **Quick run command** | `mvn test -pl cameleer3-server-core -Dtest=WriteBufferTest -q` | +| **Config file** | cameleer-server-app/src/test/resources/application-test.yml (Wave 0) | +| **Quick run command** | `mvn test -pl cameleer-server-core -Dtest=WriteBufferTest -q` | | **Full suite command** | `mvn verify` | | **Estimated runtime** | ~30 seconds | @@ -27,7 +27,7 @@ created: 2026-03-11 ## Sampling Rate -- **After every task commit:** Run `mvn test -pl cameleer3-server-core -q` +- **After every task commit:** Run `mvn test -pl cameleer-server-core -q` - **After every plan wave:** Run `mvn verify` - **Before `/gsd:verify-work`:** Full suite must be green - **Max feedback latency:** 30 seconds @@ -38,17 +38,17 @@ created: 2026-03-11 | Task ID | Plan | Wave | Requirement | Test Type | Automated Command | File Exists | Status | |---------|------|------|-------------|-----------|-------------------|-------------|--------| -| 1-01-01 | 01 | 1 | INGST-04 | unit | `mvn test -pl cameleer3-server-core -Dtest=WriteBufferTest -q` | no W0 | pending | -| 1-01-02 | 01 | 1 | INGST-01 | integration | `mvn test -pl cameleer3-server-app -Dtest=ExecutionControllerIT -q` | no W0 | pending | -| 1-01-03 | 01 | 1 | INGST-05 | integration | `mvn test -pl cameleer3-server-app -Dtest=BackpressureIT -q` | no W0 | pending | -| 1-01-04 | 01 | 1 | INGST-06 | integration | `mvn test -pl cameleer3-server-app -Dtest=HealthControllerIT#ttlConfigured* -q` | no W0 | pending | -| 1-02-01 | 02 | 1 | INGST-01 | integration | `mvn test -pl cameleer3-server-app -Dtest=ExecutionControllerIT -q` | no W0 | pending | -| 1-02-02 | 02 | 1 | INGST-02 | integration | `mvn test -pl cameleer3-server-app -Dtest=DiagramControllerIT -q` | no W0 | pending | -| 1-02-03 | 02 | 1 | INGST-03 | integration | `mvn test -pl cameleer3-server-app -Dtest=MetricsControllerIT -q` | no W0 | pending | -| 1-02-04 | 02 | 1 | API-02 | integration | `mvn test -pl cameleer3-server-app -Dtest=OpenApiIT -q` | no W0 | pending | -| 1-02-05 | 02 | 1 | API-03 | integration | `mvn test -pl cameleer3-server-app -Dtest=HealthControllerIT -q` | no W0 | pending | -| 1-02-06 | 02 | 1 | API-04 | integration | `mvn test -pl cameleer3-server-app -Dtest=ProtocolVersionIT -q` | no W0 | pending | -| 1-02-07 | 02 | 1 | API-05 | unit | `mvn test -pl cameleer3-server-app -Dtest=ForwardCompatIT -q` | no W0 | pending | +| 1-01-01 | 01 | 1 | INGST-04 | unit | `mvn test -pl cameleer-server-core -Dtest=WriteBufferTest -q` | no W0 | pending | +| 1-01-02 | 01 | 1 | INGST-01 | integration | `mvn test -pl cameleer-server-app -Dtest=ExecutionControllerIT -q` | no W0 | pending | +| 1-01-03 | 01 | 1 | INGST-05 | integration | `mvn test -pl cameleer-server-app -Dtest=BackpressureIT -q` | no W0 | pending | +| 1-01-04 | 01 | 1 | INGST-06 | integration | `mvn test -pl cameleer-server-app -Dtest=HealthControllerIT#ttlConfigured* -q` | no W0 | pending | +| 1-02-01 | 02 | 1 | INGST-01 | integration | `mvn test -pl cameleer-server-app -Dtest=ExecutionControllerIT -q` | no W0 | pending | +| 1-02-02 | 02 | 1 | INGST-02 | integration | `mvn test -pl cameleer-server-app -Dtest=DiagramControllerIT -q` | no W0 | pending | +| 1-02-03 | 02 | 1 | INGST-03 | integration | `mvn test -pl cameleer-server-app -Dtest=MetricsControllerIT -q` | no W0 | pending | +| 1-02-04 | 02 | 1 | API-02 | integration | `mvn test -pl cameleer-server-app -Dtest=OpenApiIT -q` | no W0 | pending | +| 1-02-05 | 02 | 1 | API-03 | integration | `mvn test -pl cameleer-server-app -Dtest=HealthControllerIT -q` | no W0 | pending | +| 1-02-06 | 02 | 1 | API-04 | integration | `mvn test -pl cameleer-server-app -Dtest=ProtocolVersionIT -q` | no W0 | pending | +| 1-02-07 | 02 | 1 | API-05 | unit | `mvn test -pl cameleer-server-app -Dtest=ForwardCompatIT -q` | no W0 | pending | *Status: pending / green / red / flaky* @@ -56,10 +56,10 @@ created: 2026-03-11 ## Wave 0 Requirements -- [ ] `cameleer3-server-app/src/test/resources/application-test.yml` — test ClickHouse config -- [ ] `cameleer3-server-core/src/test/java/.../WriteBufferTest.java` — buffer unit tests -- [ ] `cameleer3-server-app/src/test/java/.../AbstractClickHouseIT.java` — shared Testcontainers base class -- [ ] `cameleer3-server-app/src/test/java/.../ExecutionControllerIT.java` — ingestion integration test +- [ ] `cameleer-server-app/src/test/resources/application-test.yml` — test ClickHouse config +- [ ] `cameleer-server-core/src/test/java/.../WriteBufferTest.java` — buffer unit tests +- [ ] `cameleer-server-app/src/test/java/.../AbstractClickHouseIT.java` — shared Testcontainers base class +- [ ] `cameleer-server-app/src/test/java/.../ExecutionControllerIT.java` — ingestion integration test - [ ] Docker available on test machine for Testcontainers *If none: "Existing infrastructure covers all phase requirements."* diff --git a/.planning/phases/01-ingestion-pipeline-api-foundation/01-VERIFICATION.md b/.planning/phases/01-ingestion-pipeline-api-foundation/01-VERIFICATION.md index a802505d..027e4bc3 100644 --- a/.planning/phases/01-ingestion-pipeline-api-foundation/01-VERIFICATION.md +++ b/.planning/phases/01-ingestion-pipeline-api-foundation/01-VERIFICATION.md @@ -35,27 +35,27 @@ re_verification: false | Artifact | Expected | Status | Details | |---|---|---|---| -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/WriteBuffer.java` | Generic bounded write buffer with offer/drain/isFull | VERIFIED | 80 lines; `ArrayBlockingQueue`-backed; implements `offer`, `offerBatch` (all-or-nothing), `drain`, `isFull`, `size`, `capacity`, `remainingCapacity` | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/WriteBuffer.java` | Generic bounded write buffer with offer/drain/isFull | VERIFIED | 80 lines; `ArrayBlockingQueue`-backed; implements `offer`, `offerBatch` (all-or-nothing), `drain`, `isFull`, `size`, `capacity`, `remainingCapacity` | | `clickhouse/init/01-schema.sql` | ClickHouse DDL for all three tables | VERIFIED | Contains `CREATE TABLE route_executions`, `route_diagrams`, `agent_metrics`; correct ENGINE, ORDER BY, PARTITION BY, TTL with `toDateTime()` cast | | `docker-compose.yml` | Local ClickHouse service | VERIFIED | `clickhouse/clickhouse-server:25.3`; ports 8123/9000; init volume mount; credentials configured | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java` | Repository interface for execution batch inserts | VERIFIED | Declares `void insertBatch(List executions)` | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java` | Repository interface for execution batch inserts | VERIFIED | Declares `void insertBatch(List executions)` | #### Plan 01-02 Artifacts | Artifact | Expected | Status | Details | |---|---|---|---| -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java` | POST /api/v1/data/executions endpoint | VERIFIED | 79 lines; `@PostMapping("/executions")`; handles single/array via raw String parsing; returns 202 or 503 + Retry-After | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java` | Batch insert to route_executions via JdbcTemplate | VERIFIED | 118 lines; `@Repository`; `BatchPreparedStatementSetter`; flattens processor tree to parallel arrays | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ClickHouseFlushScheduler.java` | Scheduled drain of WriteBuffer into ClickHouse | VERIFIED | 160 lines; `@Scheduled(fixedDelayString="${ingestion.flush-interval-ms:1000}")`; implements `SmartLifecycle` for shutdown drain | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java` | Routes data to appropriate WriteBuffer instances | VERIFIED | 115 lines; plain class; `acceptExecution`, `acceptExecutions`, `acceptDiagram`, `acceptDiagrams`, `acceptMetrics`; delegates to typed `WriteBuffer` instances | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java` | POST /api/v1/data/executions endpoint | VERIFIED | 79 lines; `@PostMapping("/executions")`; handles single/array via raw String parsing; returns 202 or 503 + Retry-After | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java` | Batch insert to route_executions via JdbcTemplate | VERIFIED | 118 lines; `@Repository`; `BatchPreparedStatementSetter`; flattens processor tree to parallel arrays | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ClickHouseFlushScheduler.java` | Scheduled drain of WriteBuffer into ClickHouse | VERIFIED | 160 lines; `@Scheduled(fixedDelayString="${ingestion.flush-interval-ms:1000}")`; implements `SmartLifecycle` for shutdown drain | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java` | Routes data to appropriate WriteBuffer instances | VERIFIED | 115 lines; plain class; `acceptExecution`, `acceptExecutions`, `acceptDiagram`, `acceptDiagrams`, `acceptMetrics`; delegates to typed `WriteBuffer` instances | #### Plan 01-03 Artifacts | Artifact | Expected | Status | Details | |---|---|---|---| -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/ProtocolVersionInterceptor.java` | Validates X-Cameleer-Protocol-Version:1 header on data endpoints | VERIFIED | 47 lines; implements `HandlerInterceptor.preHandle`; returns 400 JSON on missing/wrong version | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java` | Registers interceptor with path patterns | VERIFIED | 35 lines; `addInterceptors` registers interceptor on `/api/v1/data/**` and `/api/v1/agents/**`; excludes health, api-docs, swagger-ui | -| `cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java` | Shared Testcontainers base class for integration tests | VERIFIED | 73 lines; static `ClickHouseContainer`; `@DynamicPropertySource`; `@BeforeAll` schema init from SQL file; `JdbcTemplate` exposed to subclasses | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/ProtocolVersionInterceptor.java` | Validates X-Cameleer-Protocol-Version:1 header on data endpoints | VERIFIED | 47 lines; implements `HandlerInterceptor.preHandle`; returns 400 JSON on missing/wrong version | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java` | Registers interceptor with path patterns | VERIFIED | 35 lines; `addInterceptors` registers interceptor on `/api/v1/data/**` and `/api/v1/agents/**`; excludes health, api-docs, swagger-ui | +| `cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java` | Shared Testcontainers base class for integration tests | VERIFIED | 73 lines; static `ClickHouseContainer`; `@DynamicPropertySource`; `@BeforeAll` schema init from SQL file; `JdbcTemplate` exposed to subclasses | --- @@ -113,7 +113,7 @@ No orphaned requirements — all 11 IDs declared in plan frontmatter match the R ### Anti-Patterns Found -No anti-patterns detected. Scanned all source files in `cameleer3-server-app/src/main` and `cameleer3-server-core/src/main` for TODO/FIXME/PLACEHOLDER/stub return patterns. None found. +No anti-patterns detected. Scanned all source files in `cameleer-server-app/src/main` and `cameleer-server-core/src/main` for TODO/FIXME/PLACEHOLDER/stub return patterns. None found. One minor observation (not a blocker): diff --git a/.planning/phases/02-transaction-search-diagrams/02-01-PLAN.md b/.planning/phases/02-transaction-search-diagrams/02-01-PLAN.md index 3595029e..8a86c634 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-01-PLAN.md +++ b/.planning/phases/02-transaction-search-diagrams/02-01-PLAN.md @@ -6,17 +6,17 @@ wave: 1 depends_on: [] files_modified: - clickhouse/init/02-search-columns.sql - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchRequest.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchResult.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchEngine.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionSummary.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ExecutionDetail.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchRequest.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchResult.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchEngine.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionSummary.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ExecutionDetail.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java autonomous: true requirements: - SRCH-01 @@ -38,21 +38,21 @@ must_haves: - path: "clickhouse/init/02-search-columns.sql" provides: "Schema extension DDL for Phase 2 columns and skip indexes" contains: "exchange_bodies" - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchEngine.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchEngine.java" provides: "Search backend abstraction interface" exports: ["SearchEngine"] - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchRequest.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchRequest.java" provides: "Immutable search criteria record" exports: ["SearchRequest"] - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java" provides: "Extended with new columns in INSERT, plus query methods" min_lines: 100 key_links: - - from: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java" + - from: "cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java" to: "SearchEngine" via: "constructor injection" pattern: "SearchEngine" - - from: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java" + - from: "cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java" to: "clickhouse/init/02-search-columns.sql" via: "INSERT and SELECT SQL matching schema" pattern: "exchange_bodies|processor_depths|diagram_content_hash" @@ -79,22 +79,22 @@ Output: Schema migration SQL, updated ingestion INSERT with new columns, core se @.planning/phases/02-transaction-search-diagrams/02-RESEARCH.md @clickhouse/init/01-schema.sql -@cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java -@cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramRepository.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java -@cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java +@cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java +@cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramRepository.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java +@cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java -From cameleer3-server-core/.../storage/ExecutionRepository.java: +From cameleer-server-core/.../storage/ExecutionRepository.java: ```java public interface ExecutionRepository { void insertBatch(List executions); } ``` -From cameleer3-server-core/.../storage/DiagramRepository.java: +From cameleer-server-core/.../storage/DiagramRepository.java: ```java public interface DiagramRepository { void store(RouteGraph graph); @@ -103,7 +103,7 @@ public interface DiagramRepository { } ``` -From cameleer3-common (decompiled — key fields): +From cameleer-common (decompiled — key fields): ```java // RouteExecution: routeId, status (ExecutionStatus enum: COMPLETED/FAILED/RUNNING), // startTime (Instant), endTime (Instant), durationMs (long), correlationId, exchangeId, @@ -145,15 +145,15 @@ Existing ClickHouse schema (01-schema.sql): Task 1: Schema extension and core domain types clickhouse/init/02-search-columns.sql, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchRequest.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchResult.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchEngine.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionSummary.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ExecutionDetail.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java + cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchRequest.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchResult.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchEngine.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionSummary.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ExecutionDetail.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java 1. Create `clickhouse/init/02-search-columns.sql` with ALTER TABLE statements to add Phase 2 columns to route_executions: @@ -172,14 +172,14 @@ Existing ClickHouse schema (01-schema.sql): - Add tokenbf_v1 skip indexes on exchange_bodies and exchange_headers (GRANULARITY 4, same as idx_error) - Add tokenbf_v1 skip index on error_stacktrace (it has no index yet, needed for SRCH-05 full-text search across stack traces) - 2. Create core search domain types in `com.cameleer3.server.core.search`: + 2. Create core search domain types in `com.cameleer.server.core.search`: - `SearchRequest` record: status (String, nullable), timeFrom (Instant), timeTo (Instant), durationMin (Long), durationMax (Long), correlationId (String), text (String — global full-text), textInBody (String), textInHeaders (String), textInErrors (String), offset (int), limit (int). Compact constructor validates: limit defaults to 50 if <= 0, capped at 500; offset defaults to 0 if < 0. - `SearchResult` record: data (List), total (long), offset (int), limit (int). Include static factory `empty(int offset, int limit)`. - `ExecutionSummary` record: executionId (String), routeId (String), agentId (String), status (String), startTime (Instant), endTime (Instant), durationMs (long), correlationId (String), errorMessage (String), diagramContentHash (String). This is the lightweight list-view DTO — NOT the full processor arrays. - `SearchEngine` interface with methods: `SearchResult search(SearchRequest request)` and `long count(SearchRequest request)`. This is the swappable backend (ClickHouse now, OpenSearch later per user decision). - `SearchService` class: plain class (no Spring annotations, same pattern as IngestionService). Constructor takes SearchEngine. `search(SearchRequest)` delegates to engine.search(). This thin orchestration layer allows adding cross-cutting concerns later. - 3. Create core detail domain types in `com.cameleer3.server.core.detail`: + 3. Create core detail domain types in `com.cameleer.server.core.detail`: - `ProcessorNode` record: processorId (String), processorType (String), status (String), startTime (Instant), endTime (Instant), durationMs (long), diagramNodeId (String), errorMessage (String), errorStackTrace (String), children (List). This is the nested tree node. - `ExecutionDetail` record: executionId (String), routeId (String), agentId (String), status (String), startTime (Instant), endTime (Instant), durationMs (long), correlationId (String), exchangeId (String), errorMessage (String), errorStackTrace (String), diagramContentHash (String), processors (List). This is the full detail response. - `DetailService` class: plain class (no Spring annotations). Constructor takes ExecutionRepository. Method `getDetail(String executionId)` returns `Optional`. Calls repository's new `findDetailById` method, then calls `reconstructTree()` to convert flat arrays into nested ProcessorNode tree. The `reconstructTree` method: takes parallel arrays (ids, types, statuses, starts, ends, durations, diagramNodeIds, errorMessages, errorStackTraces, depths, parentIndexes), creates ProcessorNode[] array, then wires children using parentIndexes (parentIndex == -1 means root). @@ -190,7 +190,7 @@ Existing ClickHouse schema (01-schema.sql): Actually, use a different approach per the layering: add a `findRawById(String executionId)` method that returns `Optional` — a new record containing all parallel arrays. DetailService takes this and reconstructs. Create `RawExecutionRow` as a record in the detail package with all fields needed for reconstruction. - cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn compile -pl cameleer3-server-core + cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn compile -pl cameleer-server-core Schema migration SQL exists, all core domain types compile, SearchEngine interface and SearchService defined, ExecutionRepository extended with query method, DetailService has tree reconstruction logic @@ -198,9 +198,9 @@ Existing ClickHouse schema (01-schema.sql): Task 2: Update ingestion to populate new columns and verify with integration test - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java - Test: After inserting a RouteExecution with processors that have exchange snapshots and nested children, the route_executions row has non-empty exchange_bodies, exchange_headers, processor_depths (correct depth values), processor_parent_indexes (correct parent wiring), processor_input_bodies, processor_output_bodies, processor_input_headers, processor_output_headers, processor_diagram_node_ids, and diagram_content_hash columns @@ -231,7 +231,7 @@ Existing ClickHouse schema (01-schema.sql): - Verifies a second insertion with null snapshots succeeds with empty defaults - cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn test -pl cameleer3-server-app -Dtest=IngestionSchemaIT + cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn test -pl cameleer-server-app -Dtest=IngestionSchemaIT All new columns populated correctly during ingestion, tree metadata (depth/parent) correct for nested processors, exchange data concatenated for search, existing ingestion tests still pass @@ -239,9 +239,9 @@ Existing ClickHouse schema (01-schema.sql): -- `mvn compile -pl cameleer3-server-core` succeeds (core domain types compile) -- `mvn test -pl cameleer3-server-app -Dtest=IngestionSchemaIT` passes (new columns populated correctly) -- `mvn test -pl cameleer3-server-app` passes (all existing tests still green with schema extension) +- `mvn compile -pl cameleer-server-core` succeeds (core domain types compile) +- `mvn test -pl cameleer-server-app -Dtest=IngestionSchemaIT` passes (new columns populated correctly) +- `mvn test -pl cameleer-server-app` passes (all existing tests still green with schema extension) diff --git a/.planning/phases/02-transaction-search-diagrams/02-01-SUMMARY.md b/.planning/phases/02-transaction-search-diagrams/02-01-SUMMARY.md index 7652f06e..2b10046c 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-01-SUMMARY.md +++ b/.planning/phases/02-transaction-search-diagrams/02-01-SUMMARY.md @@ -22,22 +22,22 @@ tech-stack: key-files: created: - clickhouse/init/02-search-columns.sql - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchRequest.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchResult.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionSummary.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchEngine.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ExecutionDetail.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/RawExecutionRow.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramRenderer.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramLayout.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchRequest.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchResult.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionSummary.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchEngine.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ExecutionDetail.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/detail/RawExecutionRow.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramRenderer.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramLayout.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java modified: - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java key-decisions: - "FlatProcessor record captures depth and parentIndex during DFS traversal" @@ -86,21 +86,21 @@ Each task was committed atomically: ## Files Created/Modified - `clickhouse/init/02-search-columns.sql` - ALTER TABLE adding 12 columns + 3 skip indexes -- `cameleer3-server-core/.../search/SearchRequest.java` - Immutable search criteria record with validation -- `cameleer3-server-core/.../search/SearchResult.java` - Paginated result envelope -- `cameleer3-server-core/.../search/ExecutionSummary.java` - Lightweight list-view DTO -- `cameleer3-server-core/.../search/SearchEngine.java` - Swappable search backend interface -- `cameleer3-server-core/.../search/SearchService.java` - Search orchestration layer -- `cameleer3-server-core/.../detail/DetailService.java` - Tree reconstruction from flat arrays -- `cameleer3-server-core/.../detail/ExecutionDetail.java` - Full execution detail record -- `cameleer3-server-core/.../detail/ProcessorNode.java` - Nested tree node (mutable children) -- `cameleer3-server-core/.../detail/RawExecutionRow.java` - DB-to-domain intermediate record -- `cameleer3-server-core/.../diagram/DiagramRenderer.java` - Diagram rendering interface (stub) -- `cameleer3-server-core/.../diagram/DiagramLayout.java` - JSON layout record (stub) -- `cameleer3-server-core/.../storage/ExecutionRepository.java` - Extended with findRawById -- `cameleer3-server-app/.../storage/ClickHouseExecutionRepository.java` - INSERT extended with 12 new columns -- `cameleer3-server-app/src/test/.../AbstractClickHouseIT.java` - Loads 02-search-columns.sql -- `cameleer3-server-app/src/test/.../storage/IngestionSchemaIT.java` - 3 integration tests +- `cameleer-server-core/.../search/SearchRequest.java` - Immutable search criteria record with validation +- `cameleer-server-core/.../search/SearchResult.java` - Paginated result envelope +- `cameleer-server-core/.../search/ExecutionSummary.java` - Lightweight list-view DTO +- `cameleer-server-core/.../search/SearchEngine.java` - Swappable search backend interface +- `cameleer-server-core/.../search/SearchService.java` - Search orchestration layer +- `cameleer-server-core/.../detail/DetailService.java` - Tree reconstruction from flat arrays +- `cameleer-server-core/.../detail/ExecutionDetail.java` - Full execution detail record +- `cameleer-server-core/.../detail/ProcessorNode.java` - Nested tree node (mutable children) +- `cameleer-server-core/.../detail/RawExecutionRow.java` - DB-to-domain intermediate record +- `cameleer-server-core/.../diagram/DiagramRenderer.java` - Diagram rendering interface (stub) +- `cameleer-server-core/.../diagram/DiagramLayout.java` - JSON layout record (stub) +- `cameleer-server-core/.../storage/ExecutionRepository.java` - Extended with findRawById +- `cameleer-server-app/.../storage/ClickHouseExecutionRepository.java` - INSERT extended with 12 new columns +- `cameleer-server-app/src/test/.../AbstractClickHouseIT.java` - Loads 02-search-columns.sql +- `cameleer-server-app/src/test/.../storage/IngestionSchemaIT.java` - 3 integration tests ## Decisions Made - Used FlatProcessor record to carry depth and parentIndex alongside the ProcessorExecution during DFS flattening -- single pass, no separate traversal @@ -116,9 +116,9 @@ Each task was committed atomically: **1. [Rule 3 - Blocking] Created DiagramRenderer and DiagramLayout stub interfaces** - **Found during:** Task 2 (compilation step) - **Issue:** Pre-existing `ElkDiagramRenderer` in app module referenced `DiagramRenderer` and `DiagramLayout` interfaces that did not exist in core module, causing compilation failure -- **Fix:** Created minimal stub interfaces in `com.cameleer3.server.core.diagram` package +- **Fix:** Created minimal stub interfaces in `com.cameleer.server.core.diagram` package - **Files created:** DiagramRenderer.java, DiagramLayout.java -- **Verification:** `mvn compile -pl cameleer3-server-core` and `mvn compile -pl cameleer3-server-app` succeed +- **Verification:** `mvn compile -pl cameleer-server-core` and `mvn compile -pl cameleer-server-app` succeed - **Committed in:** f6ff279 (Task 2 GREEN commit) **2. [Rule 1 - Bug] Fixed ClickHouse Array type handling in IngestionSchemaIT** diff --git a/.planning/phases/02-transaction-search-diagrams/02-02-PLAN.md b/.planning/phases/02-transaction-search-diagrams/02-02-PLAN.md index 722364a9..9fd4e6dd 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-02-PLAN.md +++ b/.planning/phases/02-transaction-search-diagrams/02-02-PLAN.md @@ -5,16 +5,16 @@ type: execute wave: 1 depends_on: [] files_modified: - - cameleer3-server-app/pom.xml - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramRenderer.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramLayout.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedNode.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedEdge.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramRenderController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/DiagramBeanConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramRenderControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/diagram/ElkDiagramRendererTest.java + - cameleer-server-app/pom.xml + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramRenderer.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramLayout.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedNode.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedEdge.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/diagram/ElkDiagramRenderer.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramRenderController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/DiagramBeanConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramRenderControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/diagram/ElkDiagramRendererTest.java autonomous: true requirements: - DIAG-03 @@ -27,13 +27,13 @@ must_haves: - "Node colors match the route-diagram-example.html style: blue endpoints, green processors, red error handlers, purple EIPs" - "Nested processors (inside split, choice, try-catch) are rendered in compound/swimlane groups" artifacts: - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramRenderer.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramRenderer.java" provides: "Renderer interface for SVG and JSON layout output" exports: ["DiagramRenderer"] - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/diagram/ElkDiagramRenderer.java" provides: "ELK + JFreeSVG implementation of DiagramRenderer" min_lines: 100 - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramRenderController.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramRenderController.java" provides: "GET /api/v1/diagrams/{hash} with content negotiation" exports: ["DiagramRenderController"] key_links: @@ -70,14 +70,14 @@ Output: DiagramRenderer interface in core, ElkDiagramRenderer implementation in @.planning/phases/02-transaction-search-diagrams/02-CONTEXT.md @.planning/phases/02-transaction-search-diagrams/02-RESEARCH.md -@cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramRepository.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseDiagramRepository.java -@cameleer3-server-app/pom.xml +@cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramRepository.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseDiagramRepository.java +@cameleer-server-app/pom.xml -From cameleer3-server-core/.../storage/DiagramRepository.java: +From cameleer-server-core/.../storage/DiagramRepository.java: ```java public interface DiagramRepository { void store(RouteGraph graph); @@ -86,7 +86,7 @@ public interface DiagramRepository { } ``` -From cameleer3-common (decompiled — diagram models): +From cameleer-common (decompiled — diagram models): ```java // RouteGraph: routeId (String), nodes (List), edges (List), // processorNodeMapping (Map) @@ -114,14 +114,14 @@ NodeType color mapping (from CONTEXT.md, matching route-diagram-example.html): Task 1: Add ELK/JFreeSVG dependencies and create core diagram rendering interfaces - cameleer3-server-app/pom.xml, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramRenderer.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramLayout.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedNode.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedEdge.java + cameleer-server-app/pom.xml, + cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramRenderer.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramLayout.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedNode.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedEdge.java - 1. Add Maven dependencies to `cameleer3-server-app/pom.xml`: + 1. Add Maven dependencies to `cameleer-server-app/pom.xml`: ```xml org.eclipse.elk @@ -140,7 +140,7 @@ NodeType color mapping (from CONTEXT.md, matching route-diagram-example.html): ``` - 2. Create core diagram rendering interfaces in `com.cameleer3.server.core.diagram`: + 2. Create core diagram rendering interfaces in `com.cameleer.server.core.diagram`: - `PositionedNode` record: id (String), label (String), type (String — NodeType name), x (double), y (double), width (double), height (double), children (List — for compound/swimlane groups). JSON-serializable for the JSON layout response. @@ -154,7 +154,7 @@ NodeType color mapping (from CONTEXT.md, matching route-diagram-example.html): Both methods take a RouteGraph and produce output. The interface lives in core so it can be swapped (e.g., for a different renderer). - cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn compile -pl cameleer3-server-core && mvn dependency:resolve -pl cameleer3-server-app -q + cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn compile -pl cameleer-server-core && mvn dependency:resolve -pl cameleer-server-app -q ELK and JFreeSVG dependencies resolve, DiagramRenderer interface and layout DTOs compile in core module @@ -162,11 +162,11 @@ NodeType color mapping (from CONTEXT.md, matching route-diagram-example.html): Task 2: Implement ElkDiagramRenderer, DiagramRenderController, and integration tests - cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramRenderController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/DiagramBeanConfig.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/diagram/ElkDiagramRendererTest.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramRenderControllerIT.java + cameleer-server-app/src/main/java/com/cameleer/server/app/diagram/ElkDiagramRenderer.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramRenderController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/DiagramBeanConfig.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/diagram/ElkDiagramRendererTest.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramRenderControllerIT.java - Unit test: ElkDiagramRenderer.renderSvg with a simple 3-node graph (from->process->to) produces valid SVG containing svg element, rect elements for nodes, line/path elements for edges @@ -179,7 +179,7 @@ NodeType color mapping (from CONTEXT.md, matching route-diagram-example.html): - Integration test: GET /api/v1/diagrams/{hash} with no Accept preference defaults to SVG - 1. Create `ElkDiagramRenderer` implementing `DiagramRenderer` in `com.cameleer3.server.app.diagram`: + 1. Create `ElkDiagramRenderer` implementing `DiagramRenderer` in `com.cameleer.server.app.diagram`: **Layout phase (shared by both SVG and JSON):** - Convert RouteGraph to ELK graph: create ElkNode root, set properties for LayeredOptions.ALGORITHM_ID, Direction.DOWN (top-to-bottom per user decision), spacing 40px node-node, 20px edge-node. @@ -206,10 +206,10 @@ NodeType color mapping (from CONTEXT.md, matching route-diagram-example.html): **JSON layout (layoutJson):** - Run layout phase, return DiagramLayout directly. Jackson will serialize it to JSON. - 2. Create `DiagramBeanConfig` in `com.cameleer3.server.app.config`: + 2. Create `DiagramBeanConfig` in `com.cameleer.server.app.config`: - @Configuration class that creates DiagramRenderer bean (ElkDiagramRenderer) and SearchService bean wiring (prepare for Plan 03). - 3. Create `DiagramRenderController` in `com.cameleer3.server.app.controller`: + 3. Create `DiagramRenderController` in `com.cameleer.server.app.controller`: - `GET /api/v1/diagrams/{contentHash}/render` — renders the diagram - Inject DiagramRepository and DiagramRenderer. - Look up RouteGraph via `diagramRepository.findByContentHash(contentHash)`. If empty, return 404. @@ -233,7 +233,7 @@ NodeType color mapping (from CONTEXT.md, matching route-diagram-example.html): - GET /api/v1/diagrams/{hash}/render with no Accept header -> assert SVG response (default). - cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn test -pl cameleer3-server-app -Dtest="ElkDiagramRendererTest,DiagramRenderControllerIT" + cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn test -pl cameleer-server-app -Dtest="ElkDiagramRendererTest,DiagramRenderControllerIT" Diagram rendering produces color-coded top-to-bottom SVG and JSON layout, content negotiation works via Accept header, compound nodes group nested processors, all tests pass @@ -241,8 +241,8 @@ NodeType color mapping (from CONTEXT.md, matching route-diagram-example.html): -- `mvn test -pl cameleer3-server-app -Dtest=ElkDiagramRendererTest` passes (unit tests for layout and SVG) -- `mvn test -pl cameleer3-server-app -Dtest=DiagramRenderControllerIT` passes (integration tests for REST endpoint) +- `mvn test -pl cameleer-server-app -Dtest=ElkDiagramRendererTest` passes (unit tests for layout and SVG) +- `mvn test -pl cameleer-server-app -Dtest=DiagramRenderControllerIT` passes (integration tests for REST endpoint) - `mvn clean verify` passes (all existing tests still green) - SVG output contains color-coded nodes matching the NodeType color scheme diff --git a/.planning/phases/02-transaction-search-diagrams/02-02-SUMMARY.md b/.planning/phases/02-transaction-search-diagrams/02-02-SUMMARY.md index 901f65a5..05c34ac3 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-02-SUMMARY.md +++ b/.planning/phases/02-transaction-search-diagrams/02-02-SUMMARY.md @@ -21,17 +21,17 @@ tech-stack: key-files: created: - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramRenderer.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramLayout.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedNode.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedEdge.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramRenderController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/DiagramBeanConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/diagram/ElkDiagramRendererTest.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramRenderControllerIT.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramRenderer.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramLayout.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedNode.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedEdge.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/diagram/ElkDiagramRenderer.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramRenderController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/DiagramBeanConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/diagram/ElkDiagramRendererTest.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramRenderControllerIT.java modified: - - cameleer3-server-app/pom.xml + - cameleer-server-app/pom.xml key-decisions: - "Used ELK layered algorithm with top-to-bottom direction for route diagram layout" @@ -78,16 +78,16 @@ Each task was committed atomically: 2. **Task 2: Implement ElkDiagramRenderer, DiagramRenderController, and integration tests** - `c1bc32d` (feat, TDD) ## Files Created/Modified -- `cameleer3-server-core/.../diagram/DiagramRenderer.java` - Renderer interface with renderSvg and layoutJson -- `cameleer3-server-core/.../diagram/DiagramLayout.java` - Layout record (width, height, nodes, edges) -- `cameleer3-server-core/.../diagram/PositionedNode.java` - Node record with position, dimensions, children -- `cameleer3-server-core/.../diagram/PositionedEdge.java` - Edge record with waypoints -- `cameleer3-server-app/.../diagram/ElkDiagramRenderer.java` - ELK + JFreeSVG implementation (~400 lines) -- `cameleer3-server-app/.../controller/DiagramRenderController.java` - GET /api/v1/diagrams/{hash}/render -- `cameleer3-server-app/.../config/DiagramBeanConfig.java` - Spring bean wiring for DiagramRenderer -- `cameleer3-server-app/pom.xml` - Added ELK, JFreeSVG, xtext dependencies -- `cameleer3-server-app/.../diagram/ElkDiagramRendererTest.java` - 11 unit tests -- `cameleer3-server-app/.../controller/DiagramRenderControllerIT.java` - 4 integration tests +- `cameleer-server-core/.../diagram/DiagramRenderer.java` - Renderer interface with renderSvg and layoutJson +- `cameleer-server-core/.../diagram/DiagramLayout.java` - Layout record (width, height, nodes, edges) +- `cameleer-server-core/.../diagram/PositionedNode.java` - Node record with position, dimensions, children +- `cameleer-server-core/.../diagram/PositionedEdge.java` - Edge record with waypoints +- `cameleer-server-app/.../diagram/ElkDiagramRenderer.java` - ELK + JFreeSVG implementation (~400 lines) +- `cameleer-server-app/.../controller/DiagramRenderController.java` - GET /api/v1/diagrams/{hash}/render +- `cameleer-server-app/.../config/DiagramBeanConfig.java` - Spring bean wiring for DiagramRenderer +- `cameleer-server-app/pom.xml` - Added ELK, JFreeSVG, xtext dependencies +- `cameleer-server-app/.../diagram/ElkDiagramRendererTest.java` - 11 unit tests +- `cameleer-server-app/.../controller/DiagramRenderControllerIT.java` - 4 integration tests ## Decisions Made - Used ELK layered algorithm (org.eclipse.elk.alg.layered) -- well-maintained, supports compound nodes natively @@ -104,7 +104,7 @@ Each task was committed atomically: - **Found during:** Task 2 (ElkDiagramRenderer implementation) - **Issue:** ELK 0.11.0 LayeredMetaDataProvider references org.eclipse.xtext.xbase.lib.CollectionLiterals at class initialization, causing NoClassDefFoundError - **Fix:** Added org.eclipse.xtext:org.eclipse.xtext.xbase.lib:2.37.0 dependency to app pom.xml -- **Files modified:** cameleer3-server-app/pom.xml +- **Files modified:** cameleer-server-app/pom.xml - **Verification:** All unit tests pass after adding dependency - **Committed in:** c1bc32d (Task 2 commit) @@ -119,7 +119,7 @@ Each task was committed atomically: **3. [Rule 1 - Bug] Adapted to actual NodeType enum naming (EIP_ prefix)** - **Found during:** Task 2 (ElkDiagramRenderer implementation) - **Issue:** Plan referenced CHOICE, SPLIT etc. but actual enum values are EIP_CHOICE, EIP_SPLIT etc. -- **Fix:** Used correct enum names from decompiled cameleer3-common jar in all color mapping sets +- **Fix:** Used correct enum names from decompiled cameleer-common jar in all color mapping sets - **Files modified:** ElkDiagramRenderer.java - **Verification:** Unit tests verify correct colors for endpoint and processor nodes - **Committed in:** c1bc32d (Task 2 commit) diff --git a/.planning/phases/02-transaction-search-diagrams/02-03-PLAN.md b/.planning/phases/02-transaction-search-diagrams/02-03-PLAN.md index a69a4338..9eef03dd 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-03-PLAN.md +++ b/.planning/phases/02-transaction-search-diagrams/02-03-PLAN.md @@ -6,14 +6,14 @@ wave: 2 depends_on: - "02-01" files_modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchEngine.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java - - cameleer3-server-core/src/test/java/com/cameleer3/server/core/detail/TreeReconstructionTest.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchEngine.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java + - cameleer-server-core/src/test/java/com/cameleer/server/core/detail/TreeReconstructionTest.java autonomous: true requirements: - SRCH-01 @@ -35,16 +35,16 @@ must_haves: - "Detail response includes diagramContentHash for linking to diagram endpoint" - "Search results are paginated with total count, offset, and limit" artifacts: - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchEngine.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchEngine.java" provides: "ClickHouse implementation of SearchEngine with dynamic WHERE building" min_lines: 80 - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java" provides: "GET + POST /api/v1/search/executions endpoints" exports: ["SearchController"] - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java" provides: "GET /api/v1/executions/{id} endpoint returning nested tree" exports: ["DetailController"] - - path: "cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java" + - path: "cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java" provides: "Integration tests for all search filter combinations" min_lines: 100 key_links: @@ -92,13 +92,13 @@ Output: SearchController (GET + POST), DetailController, ClickHouseSearchEngine, @clickhouse/init/01-schema.sql @clickhouse/init/02-search-columns.sql -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java -From cameleer3-server-core/.../search/SearchEngine.java: +From cameleer-server-core/.../search/SearchEngine.java: ```java public interface SearchEngine { SearchResult search(SearchRequest request); @@ -106,7 +106,7 @@ public interface SearchEngine { } ``` -From cameleer3-server-core/.../search/SearchRequest.java: +From cameleer-server-core/.../search/SearchRequest.java: ```java public record SearchRequest( String status, // nullable, filter by ExecutionStatus name @@ -124,14 +124,14 @@ public record SearchRequest( ) { /* compact constructor with validation */ } ``` -From cameleer3-server-core/.../search/SearchResult.java: +From cameleer-server-core/.../search/SearchResult.java: ```java public record SearchResult(List data, long total, int offset, int limit) { public static SearchResult empty(int offset, int limit); } ``` -From cameleer3-server-core/.../search/ExecutionSummary.java: +From cameleer-server-core/.../search/ExecutionSummary.java: ```java public record ExecutionSummary( String executionId, String routeId, String agentId, String status, @@ -140,7 +140,7 @@ public record ExecutionSummary( ) {} ``` -From cameleer3-server-core/.../detail/DetailService.java: +From cameleer-server-core/.../detail/DetailService.java: ```java public class DetailService { // Constructor takes ExecutionRepository (or a query interface) @@ -149,7 +149,7 @@ public class DetailService { } ``` -From cameleer3-server-core/.../detail/ExecutionDetail.java: +From cameleer-server-core/.../detail/ExecutionDetail.java: ```java public record ExecutionDetail( String executionId, String routeId, String agentId, String status, @@ -160,7 +160,7 @@ public record ExecutionDetail( ) {} ``` -From cameleer3-server-core/.../detail/ProcessorNode.java: +From cameleer-server-core/.../detail/ProcessorNode.java: ```java public record ProcessorNode( String processorId, String processorType, String status, @@ -201,10 +201,10 @@ Established controller pattern (from Phase 1): Task 1: ClickHouseSearchEngine, SearchController, and search integration tests - cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchEngine.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java + cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchEngine.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java - Test searchByStatus: Insert 3 executions (COMPLETED, FAILED, RUNNING). GET /api/v1/search/executions?status=FAILED returns only the FAILED execution. Response has envelope: {"data":[...],"total":1,"offset":0,"limit":50} @@ -221,7 +221,7 @@ Established controller pattern (from Phase 1): - Test emptyResults: Search with no matches returns {"data":[],"total":0,"offset":0,"limit":50} - 1. Create `ClickHouseSearchEngine` in `com.cameleer3.server.app.search`: + 1. Create `ClickHouseSearchEngine` in `com.cameleer.server.app.search`: - Implements SearchEngine interface from core module. - Constructor takes JdbcTemplate. - `search(SearchRequest)` method: @@ -244,13 +244,13 @@ Established controller pattern (from Phase 1): - `escapeLike(String)` utility: escape `%`, `_`, `\` characters in user input to prevent LIKE injection. Replace `\` with `\\`, `%` with `\%`, `_` with `\_`. - `count(SearchRequest)` method: same WHERE building, just count query. - 2. Create `SearchBeanConfig` in `com.cameleer3.server.app.config`: + 2. Create `SearchBeanConfig` in `com.cameleer.server.app.config`: - @Configuration class that creates: - `ClickHouseSearchEngine` bean (takes JdbcTemplate) - `SearchService` bean (takes SearchEngine) - `DetailService` bean (takes the execution query interface from Plan 01) - 3. Create `SearchController` in `com.cameleer3.server.app.controller`: + 3. Create `SearchController` in `com.cameleer.server.app.controller`: - Inject SearchService. - `GET /api/v1/search/executions` with @RequestParam for basic filters: - status (optional String) @@ -274,7 +274,7 @@ Established controller pattern (from Phase 1): - Assert response structure matches the envelope format. - cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT + cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn test -pl cameleer-server-app -Dtest=SearchControllerIT All search filter types work independently and in combination, response envelope has correct format, pagination works correctly, full-text search finds matches in all text fields, LIKE patterns are properly escaped @@ -282,10 +282,10 @@ Established controller pattern (from Phase 1): Task 2: DetailController, tree reconstruction, exchange snapshot endpoint, and integration tests - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java, - cameleer3-server-core/src/test/java/com/cameleer3/server/core/detail/TreeReconstructionTest.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java, + cameleer-server-core/src/test/java/com/cameleer/server/core/detail/TreeReconstructionTest.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java - Unit test: reconstructTree with [root, child, grandchild], depths=[0,1,2], parents=[-1,0,1] produces single root with one child that has one grandchild @@ -308,7 +308,7 @@ Established controller pattern (from Phase 1): - Add `findRawById(String executionId)` method that queries all columns from route_executions WHERE execution_id = ?. Return Optional (use the record created in Plan 01 or create it here if needed). The RawExecutionRow should contain ALL columns including the parallel arrays for processors. - Add `findProcessorSnapshot(String executionId, int processorIndex)` method: queries processor_input_bodies[index+1], processor_output_bodies[index+1], processor_input_headers[index+1], processor_output_headers[index+1] for the given execution. Returns a DTO with inputBody, outputBody, inputHeaders, outputHeaders. ClickHouse arrays are 1-indexed in SQL, so add 1 to the Java 0-based index. - 3. Create `DetailController` in `com.cameleer3.server.app.controller`: + 3. Create `DetailController` in `com.cameleer.server.app.controller`: - Inject DetailService. - `GET /api/v1/executions/{executionId}`: call detailService.getDetail(executionId). If empty, return 404. Otherwise return 200 with ExecutionDetail JSON. The processors field is a nested tree of ProcessorNode objects. - `GET /api/v1/executions/{executionId}/processors/{index}/snapshot`: call repository's findProcessorSnapshot. If execution not found or index out of bounds, return 404. Return JSON with inputBody, outputBody, inputHeaders, outputHeaders. Per user decision: exchange snapshot data fetched separately per processor, not inlined in detail response. @@ -323,7 +323,7 @@ Established controller pattern (from Phase 1): - Test GET /api/v1/executions/{id}/processors/999/snapshot: returns 404 for out-of-bounds index. - cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn test -pl cameleer3-server-core -Dtest=TreeReconstructionTest && mvn test -pl cameleer3-server-app -Dtest=DetailControllerIT + cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn test -pl cameleer-server-core -Dtest=TreeReconstructionTest && mvn test -pl cameleer-server-app -Dtest=DetailControllerIT Tree reconstruction correctly rebuilds nested processor trees from flat arrays, detail endpoint returns nested tree with all fields, snapshot endpoint returns per-processor exchange data, diagram hash included in detail response, all tests pass @@ -331,9 +331,9 @@ Established controller pattern (from Phase 1): -- `mvn test -pl cameleer3-server-core -Dtest=TreeReconstructionTest` passes (unit test for tree rebuild) -- `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT` passes (all search filters) -- `mvn test -pl cameleer3-server-app -Dtest=DetailControllerIT` passes (detail + snapshot) +- `mvn test -pl cameleer-server-core -Dtest=TreeReconstructionTest` passes (unit test for tree rebuild) +- `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT` passes (all search filters) +- `mvn test -pl cameleer-server-app -Dtest=DetailControllerIT` passes (detail + snapshot) - `mvn clean verify` passes (full suite green) diff --git a/.planning/phases/02-transaction-search-diagrams/02-03-SUMMARY.md b/.planning/phases/02-transaction-search-diagrams/02-03-SUMMARY.md index c2f3a1fe..3c3259fe 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-03-SUMMARY.md +++ b/.planning/phases/02-transaction-search-diagrams/02-03-SUMMARY.md @@ -21,16 +21,16 @@ tech-stack: key-files: created: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchEngine.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java - - cameleer3-server-core/src/test/java/com/cameleer3/server/core/detail/TreeReconstructionTest.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchEngine.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java + - cameleer-server-core/src/test/java/com/cameleer/server/core/detail/TreeReconstructionTest.java modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java - - cameleer3-server-core/pom.xml + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java + - cameleer-server-core/pom.xml key-decisions: - "Search tests use correlationId scoping and >= assertions for shared ClickHouse isolation" @@ -77,15 +77,15 @@ Each task was committed atomically: 3. **Task 2 fix: Test isolation for shared ClickHouse** - `079dce5` (fix) ## Files Created/Modified -- `cameleer3-server-app/.../search/ClickHouseSearchEngine.java` - Dynamic SQL search with LIKE escape, implements SearchEngine -- `cameleer3-server-app/.../controller/SearchController.java` - GET + POST /api/v1/search/executions endpoints -- `cameleer3-server-app/.../controller/DetailController.java` - GET /api/v1/executions/{id} and processor snapshot endpoints -- `cameleer3-server-app/.../config/SearchBeanConfig.java` - Wires SearchEngine, SearchService, DetailService beans -- `cameleer3-server-app/.../storage/ClickHouseExecutionRepository.java` - Added findRawById, findProcessorSnapshot, array extraction helpers -- `cameleer3-server-app/.../controller/SearchControllerIT.java` - 13 integration tests for search -- `cameleer3-server-app/.../controller/DetailControllerIT.java` - 6 integration tests for detail/snapshot -- `cameleer3-server-core/.../detail/TreeReconstructionTest.java` - 5 unit tests for tree reconstruction -- `cameleer3-server-core/pom.xml` - Added assertj and mockito test dependencies +- `cameleer-server-app/.../search/ClickHouseSearchEngine.java` - Dynamic SQL search with LIKE escape, implements SearchEngine +- `cameleer-server-app/.../controller/SearchController.java` - GET + POST /api/v1/search/executions endpoints +- `cameleer-server-app/.../controller/DetailController.java` - GET /api/v1/executions/{id} and processor snapshot endpoints +- `cameleer-server-app/.../config/SearchBeanConfig.java` - Wires SearchEngine, SearchService, DetailService beans +- `cameleer-server-app/.../storage/ClickHouseExecutionRepository.java` - Added findRawById, findProcessorSnapshot, array extraction helpers +- `cameleer-server-app/.../controller/SearchControllerIT.java` - 13 integration tests for search +- `cameleer-server-app/.../controller/DetailControllerIT.java` - 6 integration tests for detail/snapshot +- `cameleer-server-core/.../detail/TreeReconstructionTest.java` - 5 unit tests for tree reconstruction +- `cameleer-server-core/pom.xml` - Added assertj and mockito test dependencies ## Decisions Made - Search tests use correlationId scoping and >= assertions to remain stable when other test classes seed data in the shared ClickHouse container @@ -99,8 +99,8 @@ Each task was committed atomically: **1. [Rule 3 - Blocking] Added assertj and mockito test dependencies to core module** - **Found during:** Task 2 (TreeReconstructionTest compilation) - **Issue:** Core module only had JUnit Jupiter as test dependency, TreeReconstructionTest needed assertj for assertions and mockito for mock(ExecutionRepository.class) -- **Fix:** Added assertj-core and mockito-core test-scoped dependencies to cameleer3-server-core/pom.xml -- **Files modified:** cameleer3-server-core/pom.xml +- **Fix:** Added assertj-core and mockito-core test-scoped dependencies to cameleer-server-core/pom.xml +- **Files modified:** cameleer-server-core/pom.xml - **Committed in:** 0615a98 (Task 2 commit) **2. [Rule 1 - Bug] Fixed search tests failing with shared ClickHouse data** diff --git a/.planning/phases/02-transaction-search-diagrams/02-04-PLAN.md b/.planning/phases/02-transaction-search-diagrams/02-04-PLAN.md index ed2b7dd6..5b9d36c4 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-04-PLAN.md +++ b/.planning/phases/02-transaction-search-diagrams/02-04-PLAN.md @@ -5,9 +5,9 @@ type: execute wave: 1 depends_on: ["02-01", "02-02", "02-03"] files_modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java - - cameleer3-server-app/pom.xml - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java + - cameleer-server-app/pom.xml + - cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java autonomous: true gap_closure: true requirements: ["DIAG-02"] @@ -17,13 +17,13 @@ must_haves: - "Each transaction links to the RouteGraph version that was active at execution time" - "Full test suite passes with mvn clean verify (no classloader failures)" artifacts: - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java" provides: "Diagram hash lookup during batch insert" contains: "findContentHashForRoute" - - path: "cameleer3-server-app/pom.xml" + - path: "cameleer-server-app/pom.xml" provides: "Surefire fork configuration isolating ELK classloader" contains: "reuseForks" - - path: "cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java" + - path: "cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java" provides: "Integration test proving diagram hash is stored during ingestion" key_links: - from: "ClickHouseExecutionRepository" @@ -57,18 +57,18 @@ Prior plan summaries (needed — touches same files): -From cameleer3-server-core/.../storage/DiagramRepository.java: +From cameleer-server-core/.../storage/DiagramRepository.java: ```java Optional findContentHashForRoute(String routeId, String agentId); ``` -From cameleer3-server-app/.../storage/ClickHouseExecutionRepository.java (line 141): +From cameleer-server-app/.../storage/ClickHouseExecutionRepository.java (line 141): ```java ps.setString(col++, ""); // diagram_content_hash (wired later) ``` The class is @Repository annotated, constructor takes JdbcTemplate only. It needs DiagramRepository injected to perform the lookup. -From cameleer3-server-app/.../storage/ClickHouseDiagramRepository.java: +From cameleer-server-app/.../storage/ClickHouseDiagramRepository.java: ```java @Repository public class ClickHouseDiagramRepository implements DiagramRepository { @@ -83,9 +83,9 @@ public class ClickHouseDiagramRepository implements DiagramRepository { Task 1: Populate diagram_content_hash during ingestion and fix Surefire forks - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java, - cameleer3-server-app/pom.xml, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java, + cameleer-server-app/pom.xml, + cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java - Test 1: When a RouteGraph is ingested before a RouteExecution for the same routeId+agentId, the execution's diagram_content_hash column contains the SHA-256 hash of the diagram (not empty string) @@ -117,7 +117,7 @@ public class ClickHouseDiagramRepository implements DiagramRepository { **Gap 2 — Surefire classloader isolation:** - 5. In `cameleer3-server-app/pom.xml`, add a `` section (after the existing `spring-boot-maven-plugin`) with `maven-surefire-plugin` configuration: + 5. In `cameleer-server-app/pom.xml`, add a `` section (after the existing `spring-boot-maven-plugin`) with `maven-surefire-plugin` configuration: ```xml org.apache.maven.plugins @@ -131,12 +131,12 @@ public class ClickHouseDiagramRepository implements DiagramRepository { This forces Surefire to fork a fresh JVM for each test class, isolating ELK's static initializer (LayeredMetaDataProvider + xtext CollectionLiterals) from Spring Boot's classloader. Trade-off: slightly slower test execution, but correct results. - cd C:/Users/Hendrik/Documents/projects/cameleer3-server && mvn clean verify -pl cameleer3-server-app -am 2>&1 | tail -30 + cd C:/Users/Hendrik/Documents/projects/cameleer-server && mvn clean verify -pl cameleer-server-app -am 2>&1 | tail -30 - diagram_content_hash is populated with the active diagram's SHA-256 hash during ingestion (not empty string) - DiagramLinkingIT passes with both positive and negative cases - - `mvn clean verify` passes for cameleer3-server-app (no classloader failures from ElkDiagramRendererTest) + - `mvn clean verify` passes for cameleer-server-app (no classloader failures from ElkDiagramRendererTest) diff --git a/.planning/phases/02-transaction-search-diagrams/02-04-SUMMARY.md b/.planning/phases/02-transaction-search-diagrams/02-04-SUMMARY.md index ecc3c386..dfd27be1 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-04-SUMMARY.md +++ b/.planning/phases/02-transaction-search-diagrams/02-04-SUMMARY.md @@ -20,12 +20,12 @@ tech-stack: key-files: created: - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java - - cameleer3-server-app/pom.xml - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java + - cameleer-server-app/pom.xml + - cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java key-decisions: - "DiagramRepository injected via constructor into ClickHouseExecutionRepository for diagram hash lookup during batch insert" @@ -69,11 +69,11 @@ Each task was committed atomically: **Plan metadata:** (pending) ## Files Created/Modified -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java` - Added DiagramRepository injection, diagram hash lookup in insertBatch -- `cameleer3-server-app/pom.xml` - Added maven-surefire-plugin and maven-failsafe-plugin with reuseForks=false -- `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java` - Integration test for diagram hash linking -- `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java` - Added ignoreExceptions + increased timeouts -- `cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java` - Adjusted pagination assertion count +- `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java` - Added DiagramRepository injection, diagram hash lookup in insertBatch +- `cameleer-server-app/pom.xml` - Added maven-surefire-plugin and maven-failsafe-plugin with reuseForks=false +- `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java` - Integration test for diagram hash linking +- `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java` - Added ignoreExceptions + increased timeouts +- `cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java` - Adjusted pagination assertion count ## Decisions Made - DiagramRepository injected via constructor into ClickHouseExecutionRepository -- both are @Repository Spring beans, so constructor injection autowires cleanly diff --git a/.planning/phases/02-transaction-search-diagrams/02-CONTEXT.md b/.planning/phases/02-transaction-search-diagrams/02-CONTEXT.md index 5431195b..b0eaefb2 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-CONTEXT.md +++ b/.planning/phases/02-transaction-search-diagrams/02-CONTEXT.md @@ -44,7 +44,7 @@ Users can find any transaction by status, time, duration, correlation ID, or con - No execution overlay in server-rendered SVG — the UI handles overlay with theme support (dark/light) - Top-to-bottom node layout flow - Nested processors (inside for-each, split, try-catch) rendered in swimlanes to highlight nesting/scope -- Reference: cameleer3 agent repo `examples/route-diagram-example.html` for visual style inspiration (color-coded node types, EIP icons) +- Reference: cameleer agent repo `examples/route-diagram-example.html` for visual style inspiration (color-coded node types, EIP icons) ### Claude's Discretion - Pagination implementation details (offset/limit vs cursor) @@ -58,7 +58,7 @@ Users can find any transaction by status, time, duration, correlation ID, or con ## Specific Ideas -- "We want a cmd+k type of search in the UI" — see `cameleer3/examples/cmd-k-search-example.html` for the target UX. Key features: +- "We want a cmd+k type of search in the UI" — see `cameleer/examples/cmd-k-search-example.html` for the target UX. Key features: - Cross-entity search: single query hits Executions, Routes, Exchanges, Agents with scope tabs and counts - Filter chips in the input (e.g., `route:order` prefix filtering) - Inline preview pane with JSON syntax highlighting for selected result diff --git a/.planning/phases/02-transaction-search-diagrams/02-RESEARCH.md b/.planning/phases/02-transaction-search-diagrams/02-RESEARCH.md index a25ce16f..f3f479ec 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-RESEARCH.md +++ b/.planning/phases/02-transaction-search-diagrams/02-RESEARCH.md @@ -112,7 +112,7 @@ The existing Phase 1 code provides a solid foundation: `ClickHouseExecutionRepos ### Recommended Project Structure (additions for Phase 2) ``` -cameleer3-server-core/src/main/java/com/cameleer3/server/core/ +cameleer-server-core/src/main/java/com/cameleer/server/core/ ├── search/ │ ├── SearchService.java # Orchestrates search, delegates to SearchEngine │ ├── SearchEngine.java # Interface for search backends (ClickHouse now, OpenSearch later) @@ -127,7 +127,7 @@ cameleer3-server-core/src/main/java/com/cameleer3/server/core/ ├── ExecutionRepository.java # Extended with query methods └── DiagramRepository.java # Extended with lookup methods -cameleer3-server-app/src/main/java/com/cameleer3/server/app/ +cameleer-server-app/src/main/java/com/cameleer/server/app/ ├── controller/ │ ├── SearchController.java # GET + POST /api/v1/search/executions │ ├── DetailController.java # GET /api/v1/executions/{id} @@ -517,25 +517,25 @@ private void populateExchangeColumns(PreparedStatement ps, List p | Property | Value | |----------|-------| | Framework | JUnit 5 + Spring Boot Test + Testcontainers ClickHouse 25.3 | -| Config file | cameleer3-server-app/pom.xml (testcontainers dep), AbstractClickHouseIT base class | -| Quick run command | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT -Dfailsafe.skip=true` | +| Config file | cameleer-server-app/pom.xml (testcontainers dep), AbstractClickHouseIT base class | +| Quick run command | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT -Dfailsafe.skip=true` | | Full suite command | `mvn clean verify` | ### Phase Requirements -> Test Map | Req ID | Behavior | Test Type | Automated Command | File Exists? | |--------|----------|-----------|-------------------|-------------| -| SRCH-01 | Filter by status returns matching executions | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#searchByStatus` | No -- Wave 0 | -| SRCH-02 | Filter by time range returns matching executions | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#searchByTimeRange` | No -- Wave 0 | -| SRCH-03 | Filter by duration range returns matching | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#searchByDuration` | No -- Wave 0 | -| SRCH-04 | Filter by correlationId returns correlated | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#searchByCorrelationId` | No -- Wave 0 | -| SRCH-05 | Full-text search across bodies/headers/errors | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#fullTextSearch` | No -- Wave 0 | -| SRCH-06 | Detail returns nested processor tree | integration | `mvn test -pl cameleer3-server-app -Dtest=DetailControllerIT#detailReturnsNestedTree` | No -- Wave 0 | -| DIAG-01 | Content-hash dedup stores identical defs once | integration | `mvn test -pl cameleer3-server-app -Dtest=DiagramControllerIT#contentHashDedup` | Partial (ingestion test exists) | -| DIAG-02 | Transaction links to active diagram version | integration | `mvn test -pl cameleer3-server-app -Dtest=DetailControllerIT#detailIncludesDiagramHash` | No -- Wave 0 | -| DIAG-03 | Diagram rendered as SVG or JSON layout | integration | `mvn test -pl cameleer3-server-app -Dtest=DiagramRenderControllerIT#renderSvg` | No -- Wave 0 | +| SRCH-01 | Filter by status returns matching executions | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#searchByStatus` | No -- Wave 0 | +| SRCH-02 | Filter by time range returns matching executions | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#searchByTimeRange` | No -- Wave 0 | +| SRCH-03 | Filter by duration range returns matching | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#searchByDuration` | No -- Wave 0 | +| SRCH-04 | Filter by correlationId returns correlated | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#searchByCorrelationId` | No -- Wave 0 | +| SRCH-05 | Full-text search across bodies/headers/errors | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#fullTextSearch` | No -- Wave 0 | +| SRCH-06 | Detail returns nested processor tree | integration | `mvn test -pl cameleer-server-app -Dtest=DetailControllerIT#detailReturnsNestedTree` | No -- Wave 0 | +| DIAG-01 | Content-hash dedup stores identical defs once | integration | `mvn test -pl cameleer-server-app -Dtest=DiagramControllerIT#contentHashDedup` | Partial (ingestion test exists) | +| DIAG-02 | Transaction links to active diagram version | integration | `mvn test -pl cameleer-server-app -Dtest=DetailControllerIT#detailIncludesDiagramHash` | No -- Wave 0 | +| DIAG-03 | Diagram rendered as SVG or JSON layout | integration | `mvn test -pl cameleer-server-app -Dtest=DiagramRenderControllerIT#renderSvg` | No -- Wave 0 | ### Sampling Rate -- **Per task commit:** `mvn test -pl cameleer3-server-app -Dtest=IT` +- **Per task commit:** `mvn test -pl cameleer-server-app -Dtest=IT` - **Per wave merge:** `mvn clean verify` - **Phase gate:** Full suite green before `/gsd:verify-work` @@ -551,7 +551,7 @@ private void populateExchangeColumns(PreparedStatement ps, List p ### Primary (HIGH confidence) - ClickHouse JDBC 0.9.7, ClickHouse 25.3 -- verified from project pom.xml and AbstractClickHouseIT -- cameleer3-common 1.0-SNAPSHOT JAR -- decompiled to verify RouteGraph, RouteNode, RouteEdge, NodeType, ProcessorExecution, ExchangeSnapshot field structures +- cameleer-common 1.0-SNAPSHOT JAR -- decompiled to verify RouteGraph, RouteNode, RouteEdge, NodeType, ProcessorExecution, ExchangeSnapshot field structures - Existing Phase 1 codebase -- ClickHouseExecutionRepository, ClickHouseDiagramRepository, schema, test patterns ### Secondary (MEDIUM confidence) diff --git a/.planning/phases/02-transaction-search-diagrams/02-VALIDATION.md b/.planning/phases/02-transaction-search-diagrams/02-VALIDATION.md index 4e1527ac..1aa68086 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-VALIDATION.md +++ b/.planning/phases/02-transaction-search-diagrams/02-VALIDATION.md @@ -18,8 +18,8 @@ created: 2026-03-11 | Property | Value | |----------|-------| | **Framework** | JUnit 5 + Spring Boot Test + Testcontainers ClickHouse 25.3 | -| **Config file** | cameleer3-server-app/pom.xml (testcontainers dep), AbstractClickHouseIT base class | -| **Quick run command** | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT` | +| **Config file** | cameleer-server-app/pom.xml (testcontainers dep), AbstractClickHouseIT base class | +| **Quick run command** | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT` | | **Full suite command** | `mvn clean verify` | | **Estimated runtime** | ~45 seconds | @@ -27,7 +27,7 @@ created: 2026-03-11 ## Sampling Rate -- **After every task commit:** Run `mvn test -pl cameleer3-server-app -Dtest=IT` +- **After every task commit:** Run `mvn test -pl cameleer-server-app -Dtest=IT` - **After every plan wave:** Run `mvn clean verify` - **Before `/gsd:verify-work`:** Full suite must be green - **Max feedback latency:** 45 seconds @@ -38,15 +38,15 @@ created: 2026-03-11 | Task ID | Plan | Wave | Requirement | Test Type | Automated Command | File Exists | Status | |---------|------|------|-------------|-----------|-------------------|-------------|--------| -| 02-01-01 | 01 | 1 | SRCH-01 | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#searchByStatus` | ❌ W0 | ⬜ pending | -| 02-01-02 | 01 | 1 | SRCH-02 | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#searchByTimeRange` | ❌ W0 | ⬜ pending | -| 02-01-03 | 01 | 1 | SRCH-03 | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#searchByDuration` | ❌ W0 | ⬜ pending | -| 02-01-04 | 01 | 1 | SRCH-04 | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#searchByCorrelationId` | ❌ W0 | ⬜ pending | -| 02-01-05 | 01 | 1 | SRCH-05 | integration | `mvn test -pl cameleer3-server-app -Dtest=SearchControllerIT#fullTextSearch` | ❌ W0 | ⬜ pending | -| 02-01-06 | 01 | 1 | SRCH-06 | integration | `mvn test -pl cameleer3-server-app -Dtest=DetailControllerIT#detailReturnsNestedTree` | ❌ W0 | ⬜ pending | -| 02-02-01 | 02 | 1 | DIAG-01 | integration | `mvn test -pl cameleer3-server-app -Dtest=DiagramControllerIT#contentHashDedup` | Partial | ⬜ pending | -| 02-02-02 | 02 | 1 | DIAG-02 | integration | `mvn test -pl cameleer3-server-app -Dtest=DetailControllerIT#detailIncludesDiagramHash` | ❌ W0 | ⬜ pending | -| 02-02-03 | 02 | 1 | DIAG-03 | integration | `mvn test -pl cameleer3-server-app -Dtest=DiagramRenderControllerIT#renderSvg` | ❌ W0 | ⬜ pending | +| 02-01-01 | 01 | 1 | SRCH-01 | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#searchByStatus` | ❌ W0 | ⬜ pending | +| 02-01-02 | 01 | 1 | SRCH-02 | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#searchByTimeRange` | ❌ W0 | ⬜ pending | +| 02-01-03 | 01 | 1 | SRCH-03 | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#searchByDuration` | ❌ W0 | ⬜ pending | +| 02-01-04 | 01 | 1 | SRCH-04 | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#searchByCorrelationId` | ❌ W0 | ⬜ pending | +| 02-01-05 | 01 | 1 | SRCH-05 | integration | `mvn test -pl cameleer-server-app -Dtest=SearchControllerIT#fullTextSearch` | ❌ W0 | ⬜ pending | +| 02-01-06 | 01 | 1 | SRCH-06 | integration | `mvn test -pl cameleer-server-app -Dtest=DetailControllerIT#detailReturnsNestedTree` | ❌ W0 | ⬜ pending | +| 02-02-01 | 02 | 1 | DIAG-01 | integration | `mvn test -pl cameleer-server-app -Dtest=DiagramControllerIT#contentHashDedup` | Partial | ⬜ pending | +| 02-02-02 | 02 | 1 | DIAG-02 | integration | `mvn test -pl cameleer-server-app -Dtest=DetailControllerIT#detailIncludesDiagramHash` | ❌ W0 | ⬜ pending | +| 02-02-03 | 02 | 1 | DIAG-03 | integration | `mvn test -pl cameleer-server-app -Dtest=DiagramRenderControllerIT#renderSvg` | ❌ W0 | ⬜ pending | *Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky* diff --git a/.planning/phases/02-transaction-search-diagrams/02-VERIFICATION.md b/.planning/phases/02-transaction-search-diagrams/02-VERIFICATION.md index 374ce7ce..95b065e4 100644 --- a/.planning/phases/02-transaction-search-diagrams/02-VERIFICATION.md +++ b/.planning/phases/02-transaction-search-diagrams/02-VERIFICATION.md @@ -50,9 +50,9 @@ human_verification: | Artifact | Status | Notes | |----------|--------|-------| -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionRepository.java` | VERIFIED | DiagramRepository injected via constructor (line 59); `findContentHashForRoute` called in `setValues()` (lines 144–147); former `""` placeholder removed | -| `cameleer3-server-app/pom.xml` | VERIFIED | `maven-surefire-plugin` with `forkCount=1` `reuseForks=false` at lines 95–100; `maven-failsafe-plugin` same config at lines 103–108 | -| `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java` | VERIFIED | 152 lines; 2 integration tests; positive case asserts 64-char hex hash; negative case asserts empty string; uses `ignoreExceptions()` for ClickHouse eventual consistency | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionRepository.java` | VERIFIED | DiagramRepository injected via constructor (line 59); `findContentHashForRoute` called in `setValues()` (lines 144–147); former `""` placeholder removed | +| `cameleer-server-app/pom.xml` | VERIFIED | `maven-surefire-plugin` with `forkCount=1` `reuseForks=false` at lines 95–100; `maven-failsafe-plugin` same config at lines 103–108 | +| `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java` | VERIFIED | 152 lines; 2 integration tests; positive case asserts 64-char hex hash; negative case asserts empty string; uses `ignoreExceptions()` for ClickHouse eventual consistency | ### Key Link Verification @@ -62,7 +62,7 @@ human_verification: | `SearchController` | `SearchService` | constructor injection, `searchService.search()` | WIRED | Previously verified; no regression | | `DetailController` | `DetailService` | constructor injection, `detailService.getDetail()` | WIRED | Previously verified; no regression | | `DiagramRenderController` | `DiagramRepository` + `DiagramRenderer` | `findByContentHash()` + `renderSvg()`/`layoutJson()` | WIRED | Previously verified; no regression | -| `Surefire/Failsafe` | ELK classloader isolation | `reuseForks=false` forces fresh JVM per test class | WIRED | Lines 95–116 in `cameleer3-server-app/pom.xml` | +| `Surefire/Failsafe` | ELK classloader isolation | `reuseForks=false` forces fresh JVM per test class | WIRED | Lines 95–116 in `cameleer-server-app/pom.xml` | ### Requirements Coverage @@ -108,7 +108,7 @@ Two blockers from the initial verification (2026-03-11T16:00:00Z) have been reso **Gap 1 resolved — DIAG-02 diagram hash linking:** `ClickHouseExecutionRepository` now injects `DiagramRepository` via constructor and calls `findContentHashForRoute(exec.getRouteId(), "")` in `insertBatch()`. Both the diagram store path and the execution ingest path use `agent_id=""` consistently, so the lookup is correct. `DiagramLinkingIT` provides integration test coverage for both the positive case (hash populated when diagram exists) and negative case (empty string when no diagram exists for the route). -**Gap 2 resolved — Test suite stability:** Both `maven-surefire-plugin` and `maven-failsafe-plugin` in `cameleer3-server-app/pom.xml` are now configured with `forkCount=1` `reuseForks=false`. This forces a fresh JVM per test class, isolating ELK's `LayeredMetaDataProvider` static initializer from Spring Boot's classloader. The SUMMARY reports 51 tests, 0 failures. Test count across 16 test files totals 80 `@Test` methods; the difference from 51 reflects how Surefire/Failsafe counts parameterized and nested tests vs. raw annotation count. +**Gap 2 resolved — Test suite stability:** Both `maven-surefire-plugin` and `maven-failsafe-plugin` in `cameleer-server-app/pom.xml` are now configured with `forkCount=1` `reuseForks=false`. This forces a fresh JVM per test class, isolating ELK's `LayeredMetaDataProvider` static initializer from Spring Boot's classloader. The SUMMARY reports 51 tests, 0 failures. Test count across 16 test files totals 80 `@Test` methods; the difference from 51 reflects how Surefire/Failsafe counts parameterized and nested tests vs. raw annotation count. No regressions were introduced. All 10 observable truths and all 9 phase requirements are now satisfied. Two items remain for human visual verification (SVG rendering correctness). diff --git a/.planning/phases/03-agent-registry-sse-push/03-01-PLAN.md b/.planning/phases/03-agent-registry-sse-push/03-01-PLAN.md index c0bb0031..609bd510 100644 --- a/.planning/phases/03-agent-registry-sse-push/03-01-PLAN.md +++ b/.planning/phases/03-agent-registry-sse-push/03-01-PLAN.md @@ -5,21 +5,21 @@ type: execute wave: 1 depends_on: [] files_modified: - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentInfo.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentState.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentCommand.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandStatus.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandType.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventListener.java - - cameleer3-server-core/src/test/java/com/cameleer3/server/core/agent/AgentRegistryServiceTest.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryBeanConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/AgentLifecycleMonitor.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java - - cameleer3-server-app/src/main/resources/application.yml - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentInfo.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentState.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentCommand.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandStatus.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandType.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventListener.java + - cameleer-server-core/src/test/java/com/cameleer/server/core/agent/AgentRegistryServiceTest.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryBeanConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/agent/AgentLifecycleMonitor.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/CameleerServerApplication.java + - cameleer-server-app/src/main/resources/application.yml + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java autonomous: true requirements: - AGNT-01 @@ -34,13 +34,13 @@ must_haves: - "Server transitions agents LIVE->STALE after 90s without heartbeat, STALE->DEAD 5 minutes after staleTransitionTime" - "Agent list endpoint GET /api/v1/agents returns all agents, filterable by ?status=LIVE|STALE|DEAD" artifacts: - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java" provides: "Agent registration, heartbeat, lifecycle transitions, find/filter" - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentInfo.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentInfo.java" provides: "Agent record with id, name, group, version, routeIds, capabilities, state, timestamps" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java" provides: "POST /register, POST /{id}/heartbeat, GET /agents endpoints" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/AgentLifecycleMonitor.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/agent/AgentLifecycleMonitor.java" provides: "@Scheduled lifecycle transitions LIVE->STALE->DEAD" key_links: - from: "AgentRegistrationController" @@ -76,14 +76,14 @@ Output: Core domain types (AgentInfo, AgentState, AgentCommand, CommandStatus, C @.planning/phases/03-agent-registry-sse-push/03-CONTEXT.md @.planning/phases/03-agent-registry-sse-push/03-RESEARCH.md -@cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ClickHouseFlushScheduler.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java -@cameleer3-server-app/src/main/resources/application.yml -@cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java +@cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ClickHouseFlushScheduler.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/CameleerServerApplication.java +@cameleer-server-app/src/main/resources/application.yml +@cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java @@ -99,10 +99,10 @@ Pattern: Controller accepts raw String body: Pattern: @Scheduled for periodic tasks: - ClickHouseFlushScheduler uses @Scheduled(fixedDelayString = "${ingestion.flush-interval-ms:1000}") -- @EnableScheduling already on Cameleer3ServerApplication +- @EnableScheduling already on CameleerServerApplication Pattern: @EnableConfigurationProperties registration: -- Cameleer3ServerApplication has @EnableConfigurationProperties(IngestionConfig.class) +- CameleerServerApplication has @EnableConfigurationProperties(IngestionConfig.class) - New config classes must be added to this annotation Pattern: ProtocolVersionInterceptor: @@ -116,14 +116,14 @@ Pattern: ProtocolVersionInterceptor: Task 1: Core domain types and AgentRegistryService with unit tests - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentInfo.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentState.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentCommand.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandStatus.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandType.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventListener.java, - cameleer3-server-core/src/test/java/com/cameleer3/server/core/agent/AgentRegistryServiceTest.java + cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentInfo.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentState.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentCommand.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandStatus.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandType.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventListener.java, + cameleer-server-core/src/test/java/com/cameleer/server/core/agent/AgentRegistryServiceTest.java - register: new agent ID creates AgentInfo with state LIVE, returns AgentInfo @@ -142,7 +142,7 @@ Pattern: ProtocolVersionInterceptor: - findPendingCommands: returns PENDING commands for given agentId - Create the agent domain model in the core module (package com.cameleer3.server.core.agent): + Create the agent domain model in the core module (package com.cameleer.server.core.agent): 1. **AgentState enum**: LIVE, STALE, DEAD @@ -182,7 +182,7 @@ Pattern: ProtocolVersionInterceptor: Write tests FIRST (RED), then implement (GREEN). Test class: AgentRegistryServiceTest. - mvn test -pl cameleer3-server-core -Dtest=AgentRegistryServiceTest + mvn test -pl cameleer-server-core -Dtest=AgentRegistryServiceTest All unit tests pass: registration (new + re-register), heartbeat (known + unknown), lifecycle transitions (LIVE->STALE->DEAD, heartbeat revives STALE), findAll/findByState/findById, command add/acknowledge/expire. AgentEventListener interface defined. @@ -190,13 +190,13 @@ Pattern: ProtocolVersionInterceptor: Task 2: Registration/heartbeat/list controllers, config, lifecycle monitor, integration tests - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryConfig.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryBeanConfig.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/AgentLifecycleMonitor.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java, - cameleer3-server-app/src/main/resources/application.yml, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java + cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryConfig.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryBeanConfig.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/agent/AgentLifecycleMonitor.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/CameleerServerApplication.java, + cameleer-server-app/src/main/resources/application.yml, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java Wire the agent registry into the Spring Boot app and create REST endpoints: @@ -214,7 +214,7 @@ Pattern: ProtocolVersionInterceptor: - @Bean AgentRegistryService: `new AgentRegistryService(config.getStaleThresholdMs(), config.getDeadThresholdMs(), config.getCommandExpiryMs())` Follow IngestionBeanConfig pattern. - 3. **Update Cameleer3ServerApplication**: Add AgentRegistryConfig.class to @EnableConfigurationProperties. + 3. **Update CameleerServerApplication**: Add AgentRegistryConfig.class to @EnableConfigurationProperties. 4. **Update application.yml**: Add agent-registry section with all defaults (see RESEARCH.md code example). Also add `spring.mvc.async.request-timeout: -1` for SSE support (Plan 02 needs it, but set it now). @@ -242,7 +242,7 @@ Pattern: ProtocolVersionInterceptor: - Use TestRestTemplate (already available from AbstractClickHouseIT's @SpringBootTest) - mvn test -pl cameleer3-server-core,cameleer3-server-app -Dtest="Agent*" + mvn test -pl cameleer-server-core,cameleer-server-app -Dtest="Agent*" POST /register returns 200 with agentId + sseEndpoint + heartbeatIntervalMs. POST /{id}/heartbeat returns 200 for known agents, 404 for unknown. GET /agents returns all agents with optional ?status= filter. AgentLifecycleMonitor runs on schedule. All integration tests pass. mvn clean verify passes. diff --git a/.planning/phases/03-agent-registry-sse-push/03-01-SUMMARY.md b/.planning/phases/03-agent-registry-sse-push/03-01-SUMMARY.md index 46de11c7..6e09fea6 100644 --- a/.planning/phases/03-agent-registry-sse-push/03-01-SUMMARY.md +++ b/.planning/phases/03-agent-registry-sse-push/03-01-SUMMARY.md @@ -27,22 +27,22 @@ tech-stack: key-files: created: - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentInfo.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentState.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentCommand.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandStatus.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandType.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventListener.java - - cameleer3-server-core/src/test/java/com/cameleer3/server/core/agent/AgentRegistryServiceTest.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryBeanConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/AgentLifecycleMonitor.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentInfo.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentState.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentCommand.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandStatus.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandType.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventListener.java + - cameleer-server-core/src/test/java/com/cameleer/server/core/agent/AgentRegistryServiceTest.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryBeanConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/agent/AgentLifecycleMonitor.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java - - cameleer3-server-app/src/main/resources/application.yml + - cameleer-server-app/src/main/java/com/cameleer/server/app/CameleerServerApplication.java + - cameleer-server-app/src/main/resources/application.yml key-decisions: - "AgentInfo as Java record with wither-style methods for immutable ConcurrentHashMap swapping" @@ -103,7 +103,7 @@ _Note: Task 1 used TDD with separate RED/GREEN commits_ - `AgentRegistrationController.java` - REST endpoints for agents - `AgentRegistryServiceTest.java` - 23 unit tests - `AgentRegistrationControllerIT.java` - 7 integration tests -- `Cameleer3ServerApplication.java` - Added AgentRegistryConfig to @EnableConfigurationProperties +- `CameleerServerApplication.java` - Added AgentRegistryConfig to @EnableConfigurationProperties - `application.yml` - Added agent-registry config section and spring.mvc.async.request-timeout ## Decisions Made diff --git a/.planning/phases/03-agent-registry-sse-push/03-02-PLAN.md b/.planning/phases/03-agent-registry-sse-push/03-02-PLAN.md index 6b485c7e..9730cd36 100644 --- a/.planning/phases/03-agent-registry-sse-push/03-02-PLAN.md +++ b/.planning/phases/03-agent-registry-sse-push/03-02-PLAN.md @@ -5,12 +5,12 @@ type: execute wave: 2 depends_on: ["03-01"] files_modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentSseControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentCommandControllerIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentSseControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentCommandControllerIT.java autonomous: true requirements: - AGNT-04 @@ -30,11 +30,11 @@ must_haves: - "SSE events include event ID for Last-Event-ID reconnection support (no replay of missed events)" - "Agent can acknowledge command receipt via POST /api/v1/agents/{id}/commands/{commandId}/ack" artifacts: - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java" provides: "Per-agent SseEmitter management, event sending, ping keepalive" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java" provides: "GET /{id}/events SSE endpoint" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java" provides: "POST command endpoints (single, group, broadcast) + ack endpoint" key_links: - from: "AgentCommandController" @@ -75,49 +75,49 @@ Output: SseConnectionManager, SSE endpoint, command controller (single/group/bro @.planning/phases/03-agent-registry-sse-push/03-RESEARCH.md @.planning/phases/03-agent-registry-sse-push/03-01-SUMMARY.md -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java -@cameleer3-server-app/src/main/resources/application.yml -@cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java +@cameleer-server-app/src/main/resources/application.yml +@cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java -From cameleer3-server-core/.../agent/AgentInfo.java: +From cameleer-server-core/.../agent/AgentInfo.java: ```java // Record or class with fields: // id, name, group, version, routeIds, capabilities, state, registeredAt, lastHeartbeat, staleTransitionTime // Methods: withState(), withLastHeartbeat(), etc. ``` -From cameleer3-server-core/.../agent/AgentState.java: +From cameleer-server-core/.../agent/AgentState.java: ```java public enum AgentState { LIVE, STALE, DEAD } ``` -From cameleer3-server-core/.../agent/CommandType.java: +From cameleer-server-core/.../agent/CommandType.java: ```java public enum CommandType { CONFIG_UPDATE, DEEP_TRACE, REPLAY } ``` -From cameleer3-server-core/.../agent/CommandStatus.java: +From cameleer-server-core/.../agent/CommandStatus.java: ```java public enum CommandStatus { PENDING, DELIVERED, ACKNOWLEDGED, EXPIRED } ``` -From cameleer3-server-core/.../agent/AgentCommand.java: +From cameleer-server-core/.../agent/AgentCommand.java: ```java // Record: id (UUID string), type (CommandType), payload (String JSON), targetAgentId, createdAt, status // Method: withStatus() ``` -From cameleer3-server-core/.../agent/AgentEventListener.java: +From cameleer-server-core/.../agent/AgentEventListener.java: ```java public interface AgentEventListener { void onCommandReady(String agentId, AgentCommand command); } ``` -From cameleer3-server-core/.../agent/AgentRegistryService.java: +From cameleer-server-core/.../agent/AgentRegistryService.java: ```java // Key methods: // register(id, name, group, version, routeIds, capabilities) -> AgentInfo @@ -131,7 +131,7 @@ From cameleer3-server-core/.../agent/AgentRegistryService.java: // setEventListener(listener) -> void ``` -From cameleer3-server-app/.../config/AgentRegistryConfig.java: +From cameleer-server-app/.../config/AgentRegistryConfig.java: ```java // @ConfigurationProperties(prefix = "agent-registry") // getPingIntervalMs(), getCommandExpiryMs(), etc. @@ -144,11 +144,11 @@ From cameleer3-server-app/.../config/AgentRegistryConfig.java: Task 1: SseConnectionManager, SSE controller, and command controller - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryBeanConfig.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java + cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryBeanConfig.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java Build the SSE infrastructure and command delivery system: @@ -181,7 +181,7 @@ From cameleer3-server-app/.../config/AgentRegistryConfig.java: 5. **Update WebConfig**: The SSE endpoint GET /api/v1/agents/{id}/events is already covered by the interceptor pattern "/api/v1/agents/**". Agents send the protocol version header on all requests (per research recommendation), so no exclusion needed. However, if the SSE GET causes issues because browsers/clients may not easily add custom headers to EventSource, add the SSE events path to excludePathPatterns: `/api/v1/agents/*/events`. This is a practical consideration -- add the exclusion to be safe. - mvn compile -pl cameleer3-server-core,cameleer3-server-app + mvn compile -pl cameleer-server-core,cameleer-server-app SseConnectionManager, AgentSseController, and AgentCommandController compile. SSE endpoint returns SseEmitter. Command endpoints accept type/payload and deliver via SSE. Ping keepalive scheduled. WebConfig updated if needed. @@ -189,8 +189,8 @@ From cameleer3-server-app/.../config/AgentRegistryConfig.java: Task 2: Integration tests for SSE, commands, and full flow - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentSseControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentCommandControllerIT.java + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentSseControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentCommandControllerIT.java Write integration tests covering SSE connection, command delivery, ping, and acknowledgement: @@ -224,7 +224,7 @@ From cameleer3-server-app/.../config/AgentRegistryConfig.java: **Test configuration**: If ping interval needs to be shorter for tests, add to test application.yml or use @TestPropertySource with agent-registry.ping-interval-ms=1000. - mvn test -pl cameleer3-server-core,cameleer3-server-app -Dtest="Agent*" + mvn test -pl cameleer-server-core,cameleer-server-app -Dtest="Agent*" All SSE integration tests pass: connect/disconnect, config-update/deep-trace/replay delivery via SSE, ping keepalive received, Last-Event-ID accepted, command targeting (single/group/broadcast), command acknowledgement. mvn clean verify passes with all existing tests still green. diff --git a/.planning/phases/03-agent-registry-sse-push/03-02-SUMMARY.md b/.planning/phases/03-agent-registry-sse-push/03-02-SUMMARY.md index 03732b77..18960709 100644 --- a/.planning/phases/03-agent-registry-sse-push/03-02-SUMMARY.md +++ b/.planning/phases/03-agent-registry-sse-push/03-02-SUMMARY.md @@ -24,14 +24,14 @@ tech-stack: key-files: created: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentSseControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentCommandControllerIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentSseControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentCommandControllerIT.java modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java - - cameleer3-server-app/src/test/resources/application-test.yml + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java + - cameleer-server-app/src/test/resources/application-test.yml key-decisions: - "SSE events path excluded from ProtocolVersionInterceptor for EventSource client compatibility" diff --git a/.planning/phases/03-agent-registry-sse-push/03-RESEARCH.md b/.planning/phases/03-agent-registry-sse-push/03-RESEARCH.md index 1ae2ee1f..17e7520e 100644 --- a/.planning/phases/03-agent-registry-sse-push/03-RESEARCH.md +++ b/.planning/phases/03-agent-registry-sse-push/03-RESEARCH.md @@ -6,7 +6,7 @@ ## Summary -This phase adds agent registration, heartbeat-based lifecycle management (LIVE/STALE/DEAD), and real-time command push via SSE to the Cameleer3 server. The technology stack is straightforward: Spring MVC's `SseEmitter` for server-push, `ConcurrentHashMap` for the in-memory agent registry, and `@Scheduled` for periodic lifecycle checks (same pattern already used by `ClickHouseFlushScheduler`). +This phase adds agent registration, heartbeat-based lifecycle management (LIVE/STALE/DEAD), and real-time command push via SSE to the Cameleer server. The technology stack is straightforward: Spring MVC's `SseEmitter` for server-push, `ConcurrentHashMap` for the in-memory agent registry, and `@Scheduled` for periodic lifecycle checks (same pattern already used by `ClickHouseFlushScheduler`). The main architectural challenge is managing per-agent SSE connections reliably -- handling disconnections, timeouts, and cleanup without leaking threads or emitters. The command delivery model (PENDING with 60s expiry, acknowledgement) adds a second concurrent data structure to manage alongside the registry itself. @@ -93,7 +93,7 @@ No new dependencies required. Everything is already on the classpath. ### Recommended Project Structure ``` -cameleer3-server-core/src/main/java/com/cameleer3/server/core/ +cameleer-server-core/src/main/java/com/cameleer/server/core/ ├── agent/ │ ├── AgentInfo.java # Record: id, name, group, version, routeIds, capabilities, state, timestamps │ ├── AgentState.java # Enum: LIVE, STALE, DEAD @@ -101,7 +101,7 @@ cameleer3-server-core/src/main/java/com/cameleer3/server/core/ │ ├── AgentCommand.java # Record: id, type, payload, targetAgentId, createdAt, status │ └── CommandStatus.java # Enum: PENDING, DELIVERED, ACKNOWLEDGED, EXPIRED -cameleer3-server-app/src/main/java/com/cameleer3/server/app/ +cameleer-server-app/src/main/java/com/cameleer/server/app/ ├── config/ │ ├── AgentRegistryConfig.java # @ConfigurationProperties(prefix = "agent-registry") │ └── AgentRegistryBeanConfig.java # @Configuration: wires AgentRegistryService as bean @@ -452,30 +452,30 @@ spring: |----------|-------| | Framework | JUnit 5 + Spring Boot Test (via spring-boot-starter-test) | | Config file | pom.xml (Surefire + Failsafe configured) | -| Quick run command | `mvn test -pl cameleer3-server-core -Dtest=AgentRegistryServiceTest` | +| Quick run command | `mvn test -pl cameleer-server-core -Dtest=AgentRegistryServiceTest` | | Full suite command | `mvn clean verify` | ### Phase Requirements to Test Map | Req ID | Behavior | Test Type | Automated Command | File Exists? | |--------|----------|-----------|-------------------|-------------| -| AGNT-01 | Agent registers and gets response | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentRegistrationControllerIT#registerAgent*` | No - Wave 0 | -| AGNT-02 | Lifecycle transitions LIVE/STALE/DEAD | unit | `mvn test -pl cameleer3-server-core -Dtest=AgentRegistryServiceTest#lifecycle*` | No - Wave 0 | -| AGNT-03 | Heartbeat updates timestamp, returns 200/404 | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentRegistrationControllerIT#heartbeat*` | No - Wave 0 | -| AGNT-04 | Config-update pushed via SSE | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentSseControllerIT#configUpdate*` | No - Wave 0 | -| AGNT-05 | Deep-trace command pushed via SSE | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentSseControllerIT#deepTrace*` | No - Wave 0 | -| AGNT-06 | Replay command pushed via SSE | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentSseControllerIT#replay*` | No - Wave 0 | -| AGNT-07 | SSE ping keepalive + Last-Event-ID | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentSseControllerIT#pingKeepalive*` | No - Wave 0 | +| AGNT-01 | Agent registers and gets response | integration | `mvn test -pl cameleer-server-app -Dtest=AgentRegistrationControllerIT#registerAgent*` | No - Wave 0 | +| AGNT-02 | Lifecycle transitions LIVE/STALE/DEAD | unit | `mvn test -pl cameleer-server-core -Dtest=AgentRegistryServiceTest#lifecycle*` | No - Wave 0 | +| AGNT-03 | Heartbeat updates timestamp, returns 200/404 | integration | `mvn test -pl cameleer-server-app -Dtest=AgentRegistrationControllerIT#heartbeat*` | No - Wave 0 | +| AGNT-04 | Config-update pushed via SSE | integration | `mvn test -pl cameleer-server-app -Dtest=AgentSseControllerIT#configUpdate*` | No - Wave 0 | +| AGNT-05 | Deep-trace command pushed via SSE | integration | `mvn test -pl cameleer-server-app -Dtest=AgentSseControllerIT#deepTrace*` | No - Wave 0 | +| AGNT-06 | Replay command pushed via SSE | integration | `mvn test -pl cameleer-server-app -Dtest=AgentSseControllerIT#replay*` | No - Wave 0 | +| AGNT-07 | SSE ping keepalive + Last-Event-ID | integration | `mvn test -pl cameleer-server-app -Dtest=AgentSseControllerIT#pingKeepalive*` | No - Wave 0 | ### Sampling Rate -- **Per task commit:** `mvn test -pl cameleer3-server-core,cameleer3-server-app -Dtest="Agent*"` (agent-related tests only) +- **Per task commit:** `mvn test -pl cameleer-server-core,cameleer-server-app -Dtest="Agent*"` (agent-related tests only) - **Per wave merge:** `mvn clean verify` - **Phase gate:** Full suite green before /gsd:verify-work ### Wave 0 Gaps -- [ ] `cameleer3-server-core/.../agent/AgentRegistryServiceTest.java` -- covers AGNT-02, AGNT-03 (unit tests for registry logic) -- [ ] `cameleer3-server-app/.../controller/AgentRegistrationControllerIT.java` -- covers AGNT-01, AGNT-03 -- [ ] `cameleer3-server-app/.../controller/AgentSseControllerIT.java` -- covers AGNT-04, AGNT-05, AGNT-06, AGNT-07 -- [ ] `cameleer3-server-app/.../controller/AgentCommandControllerIT.java` -- covers command targeting (single, group, all) +- [ ] `cameleer-server-core/.../agent/AgentRegistryServiceTest.java` -- covers AGNT-02, AGNT-03 (unit tests for registry logic) +- [ ] `cameleer-server-app/.../controller/AgentRegistrationControllerIT.java` -- covers AGNT-01, AGNT-03 +- [ ] `cameleer-server-app/.../controller/AgentSseControllerIT.java` -- covers AGNT-04, AGNT-05, AGNT-06, AGNT-07 +- [ ] `cameleer-server-app/.../controller/AgentCommandControllerIT.java` -- covers command targeting (single, group, all) - [ ] No new framework install needed -- JUnit 5 + Spring Boot Test + Awaitility already in place ### SSE Test Strategy diff --git a/.planning/phases/03-agent-registry-sse-push/03-VALIDATION.md b/.planning/phases/03-agent-registry-sse-push/03-VALIDATION.md index c22372b6..d08d979d 100644 --- a/.planning/phases/03-agent-registry-sse-push/03-VALIDATION.md +++ b/.planning/phases/03-agent-registry-sse-push/03-VALIDATION.md @@ -18,8 +18,8 @@ created: 2026-03-11 | Property | Value | |----------|-------| | **Framework** | JUnit 5 + Spring Boot Test + Testcontainers ClickHouse 25.3 | -| **Config file** | cameleer3-server-app/pom.xml (Surefire + Failsafe configured) | -| **Quick run command** | `mvn test -pl cameleer3-server-core -Dtest=AgentRegistryServiceTest` | +| **Config file** | cameleer-server-app/pom.xml (Surefire + Failsafe configured) | +| **Quick run command** | `mvn test -pl cameleer-server-core -Dtest=AgentRegistryServiceTest` | | **Full suite command** | `mvn clean verify` | | **Estimated runtime** | ~50 seconds | @@ -27,7 +27,7 @@ created: 2026-03-11 ## Sampling Rate -- **After every task commit:** Run `mvn test -pl cameleer3-server-core,cameleer3-server-app -Dtest="Agent*"` +- **After every task commit:** Run `mvn test -pl cameleer-server-core,cameleer-server-app -Dtest="Agent*"` - **After every plan wave:** Run `mvn clean verify` - **Before `/gsd:verify-work`:** Full suite must be green - **Max feedback latency:** 50 seconds @@ -38,13 +38,13 @@ created: 2026-03-11 | Task ID | Plan | Wave | Requirement | Test Type | Automated Command | File Exists | Status | |---------|------|------|-------------|-----------|-------------------|-------------|--------| -| 03-01-01 | 01 | 1 | AGNT-01 | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentRegistrationControllerIT#registerAgent*` | ❌ W0 | ⬜ pending | -| 03-01-02 | 01 | 1 | AGNT-02 | unit | `mvn test -pl cameleer3-server-core -Dtest=AgentRegistryServiceTest#lifecycle*` | ❌ W0 | ⬜ pending | -| 03-01-03 | 01 | 1 | AGNT-03 | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentRegistrationControllerIT#heartbeat*` | ❌ W0 | ⬜ pending | -| 03-02-01 | 02 | 1 | AGNT-04 | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentSseControllerIT#configUpdate*` | ❌ W0 | ⬜ pending | -| 03-02-02 | 02 | 1 | AGNT-05 | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentSseControllerIT#deepTrace*` | ❌ W0 | ⬜ pending | -| 03-02-03 | 02 | 1 | AGNT-06 | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentSseControllerIT#replay*` | ❌ W0 | ⬜ pending | -| 03-02-04 | 02 | 1 | AGNT-07 | integration | `mvn test -pl cameleer3-server-app -Dtest=AgentSseControllerIT#pingKeepalive*` | ❌ W0 | ⬜ pending | +| 03-01-01 | 01 | 1 | AGNT-01 | integration | `mvn test -pl cameleer-server-app -Dtest=AgentRegistrationControllerIT#registerAgent*` | ❌ W0 | ⬜ pending | +| 03-01-02 | 01 | 1 | AGNT-02 | unit | `mvn test -pl cameleer-server-core -Dtest=AgentRegistryServiceTest#lifecycle*` | ❌ W0 | ⬜ pending | +| 03-01-03 | 01 | 1 | AGNT-03 | integration | `mvn test -pl cameleer-server-app -Dtest=AgentRegistrationControllerIT#heartbeat*` | ❌ W0 | ⬜ pending | +| 03-02-01 | 02 | 1 | AGNT-04 | integration | `mvn test -pl cameleer-server-app -Dtest=AgentSseControllerIT#configUpdate*` | ❌ W0 | ⬜ pending | +| 03-02-02 | 02 | 1 | AGNT-05 | integration | `mvn test -pl cameleer-server-app -Dtest=AgentSseControllerIT#deepTrace*` | ❌ W0 | ⬜ pending | +| 03-02-03 | 02 | 1 | AGNT-06 | integration | `mvn test -pl cameleer-server-app -Dtest=AgentSseControllerIT#replay*` | ❌ W0 | ⬜ pending | +| 03-02-04 | 02 | 1 | AGNT-07 | integration | `mvn test -pl cameleer-server-app -Dtest=AgentSseControllerIT#pingKeepalive*` | ❌ W0 | ⬜ pending | *Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky* diff --git a/.planning/phases/03-agent-registry-sse-push/03-VERIFICATION.md b/.planning/phases/03-agent-registry-sse-push/03-VERIFICATION.md index 5e48824b..cb9cf64c 100644 --- a/.planning/phases/03-agent-registry-sse-push/03-VERIFICATION.md +++ b/.planning/phases/03-agent-registry-sse-push/03-VERIFICATION.md @@ -51,18 +51,18 @@ re_verification: false | Artifact | Expected | Status | Details | |----------|----------|--------|---------| -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java` | Registration, heartbeat, lifecycle, find/filter, commands | VERIFIED | 281 lines; full implementation with ConcurrentHashMap, compute-based atomic swaps, eventListener bridge | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentInfo.java` | Immutable record with all fields and wither methods | VERIFIED | 63 lines; record with 10 fields and 5 wither-style methods | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java` | POST /register, POST /{id}/heartbeat, GET /agents | VERIFIED | 153 lines; all three endpoints implemented with OpenAPI annotations | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/AgentLifecycleMonitor.java` | @Scheduled LIVE->STALE->DEAD transitions | VERIFIED | 37 lines; calls `registryService.checkLifecycle()` and `expireOldCommands()` on schedule | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java` | Registration, heartbeat, lifecycle, find/filter, commands | VERIFIED | 281 lines; full implementation with ConcurrentHashMap, compute-based atomic swaps, eventListener bridge | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentInfo.java` | Immutable record with all fields and wither methods | VERIFIED | 63 lines; record with 10 fields and 5 wither-style methods | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java` | POST /register, POST /{id}/heartbeat, GET /agents | VERIFIED | 153 lines; all three endpoints implemented with OpenAPI annotations | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/agent/AgentLifecycleMonitor.java` | @Scheduled LIVE->STALE->DEAD transitions | VERIFIED | 37 lines; calls `registryService.checkLifecycle()` and `expireOldCommands()` on schedule | ### Plan 02 Artifacts | Artifact | Expected | Status | Details | |----------|----------|--------|---------| -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java` | Per-agent SseEmitter management, event sending, ping | VERIFIED | 158 lines; implements AgentEventListener, reference-equality removal, @PostConstruct registration | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java` | GET /{id}/events SSE endpoint | VERIFIED | 67 lines; checks agent exists, delegates to connectionManager.connect() | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java` | POST commands (single/group/broadcast) + ack | VERIFIED | 182 lines; all four endpoints implemented | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java` | Per-agent SseEmitter management, event sending, ping | VERIFIED | 158 lines; implements AgentEventListener, reference-equality removal, @PostConstruct registration | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java` | GET /{id}/events SSE endpoint | VERIFIED | 67 lines; checks agent exists, delegates to connectionManager.connect() | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java` | POST commands (single/group/broadcast) + ack | VERIFIED | 182 lines; all four endpoints implemented | ### Supporting Artifacts (confirmed present) @@ -77,7 +77,7 @@ re_verification: false | `AgentRegistryBeanConfig.java` (@Configuration) | VERIFIED — creates AgentRegistryService with config values | | `application.yml` | VERIFIED — agent-registry section present; `spring.mvc.async.request-timeout: -1` present | | `application-test.yml` | VERIFIED — `agent-registry.ping-interval-ms: 1000` for fast SSE test assertions | -| `Cameleer3ServerApplication.java` | VERIFIED — `AgentRegistryConfig.class` added to `@EnableConfigurationProperties` | +| `CameleerServerApplication.java` | VERIFIED — `AgentRegistryConfig.class` added to `@EnableConfigurationProperties` | --- diff --git a/.planning/phases/04-security/04-01-PLAN.md b/.planning/phases/04-security/04-01-PLAN.md index 75bb457d..89ce0142 100644 --- a/.planning/phases/04-security/04-01-PLAN.md +++ b/.planning/phases/04-security/04-01-PLAN.md @@ -5,19 +5,19 @@ type: execute wave: 1 depends_on: [] files_modified: - - cameleer3-server-app/pom.xml - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/JwtService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/Ed25519SigningService.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtServiceImpl.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/Ed25519SigningServiceImpl.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/BootstrapTokenValidator.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityBeanConfig.java - - cameleer3-server-app/src/main/resources/application.yml - - cameleer3-server-app/src/test/resources/application-test.yml - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtServiceTest.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/Ed25519SigningServiceTest.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenValidatorTest.java + - cameleer-server-app/pom.xml + - cameleer-server-core/src/main/java/com/cameleer/server/core/security/JwtService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/security/Ed25519SigningService.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtServiceImpl.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/Ed25519SigningServiceImpl.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/BootstrapTokenValidator.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityBeanConfig.java + - cameleer-server-app/src/main/resources/application.yml + - cameleer-server-app/src/test/resources/application-test.yml + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtServiceTest.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/Ed25519SigningServiceTest.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenValidatorTest.java autonomous: true requirements: - SECU-03 @@ -31,15 +31,15 @@ must_haves: - "BootstrapTokenValidator accepts CAMELEER_AUTH_TOKEN and optionally CAMELEER_AUTH_TOKEN_PREVIOUS using constant-time comparison" - "Server fails fast on startup if CAMELEER_AUTH_TOKEN is not set" artifacts: - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/JwtService.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/security/JwtService.java" provides: "JWT service interface with createAccessToken, createRefreshToken, validateAndExtractAgentId" - - path: "cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/Ed25519SigningService.java" + - path: "cameleer-server-core/src/main/java/com/cameleer/server/core/security/Ed25519SigningService.java" provides: "Ed25519 signing interface with sign(payload) and getPublicKeyBase64()" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtServiceImpl.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtServiceImpl.java" provides: "Nimbus JOSE+JWT HMAC-SHA256 implementation" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/Ed25519SigningServiceImpl.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/security/Ed25519SigningServiceImpl.java" provides: "JDK 17 Ed25519 KeyPairGenerator implementation" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/BootstrapTokenValidator.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/security/BootstrapTokenValidator.java" provides: "Constant-time bootstrap token validation with dual-token rotation" key_links: - from: "JwtServiceImpl" @@ -76,10 +76,10 @@ Output: Working JwtService, Ed25519SigningService, BootstrapTokenValidator with @.planning/phases/04-security/04-RESEARCH.md @.planning/phases/04-security/04-VALIDATION.md -@cameleer3-server-app/pom.xml -@cameleer3-server-app/src/main/resources/application.yml -@cameleer3-server-app/src/test/resources/application-test.yml -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryConfig.java +@cameleer-server-app/pom.xml +@cameleer-server-app/src/main/resources/application.yml +@cameleer-server-app/src/test/resources/application-test.yml +@cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryConfig.java @@ -106,19 +106,19 @@ public class AgentRegistryConfig { ... } Task 1: Core interfaces + app implementations + Maven deps - cameleer3-server-app/pom.xml, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/JwtService.java, - cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/Ed25519SigningService.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtServiceImpl.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/Ed25519SigningServiceImpl.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/BootstrapTokenValidator.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityBeanConfig.java, - cameleer3-server-app/src/main/resources/application.yml, - cameleer3-server-app/src/test/resources/application-test.yml, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtServiceTest.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/Ed25519SigningServiceTest.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenValidatorTest.java + cameleer-server-app/pom.xml, + cameleer-server-core/src/main/java/com/cameleer/server/core/security/JwtService.java, + cameleer-server-core/src/main/java/com/cameleer/server/core/security/Ed25519SigningService.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtServiceImpl.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/security/Ed25519SigningServiceImpl.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/security/BootstrapTokenValidator.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityBeanConfig.java, + cameleer-server-app/src/main/resources/application.yml, + cameleer-server-app/src/test/resources/application-test.yml, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtServiceTest.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/Ed25519SigningServiceTest.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenValidatorTest.java JwtService tests: @@ -145,7 +145,7 @@ public class AgentRegistryConfig { ... } - Uses constant-time comparison (MessageDigest.isEqual) - 1. Add Maven dependencies to cameleer3-server-app/pom.xml: + 1. Add Maven dependencies to cameleer-server-app/pom.xml: - `spring-boot-starter-security` (managed version) - `com.nimbusds:nimbus-jose-jwt:9.47` (explicit, may not be transitive without OAuth2 resource server) - `spring-security-test` scope test (managed version) @@ -165,12 +165,12 @@ public class AgentRegistryConfig { ... } 5. Update application-test.yml: Add `security.bootstrap-token: test-bootstrap-token`, `security.bootstrap-token-previous: old-bootstrap-token`. Also set `CAMELEER_AUTH_TOKEN: test-bootstrap-token` as an env override if needed. - 6. IMPORTANT: Adding spring-boot-starter-security will break ALL existing tests immediately (401 on all endpoints). To prevent this during Plan 01 (before the security filter chain is configured in Plan 02), add a temporary test security config class `src/test/java/com/cameleer3/server/app/security/TestSecurityConfig.java` annotated `@TestConfiguration` that creates a `SecurityFilterChain` permitting all requests. This keeps existing tests green while security services are built. Plan 02 will replace this with real security config and update tests. + 6. IMPORTANT: Adding spring-boot-starter-security will break ALL existing tests immediately (401 on all endpoints). To prevent this during Plan 01 (before the security filter chain is configured in Plan 02), add a temporary test security config class `src/test/java/com/cameleer/server/app/security/TestSecurityConfig.java` annotated `@TestConfiguration` that creates a `SecurityFilterChain` permitting all requests. This keeps existing tests green while security services are built. Plan 02 will replace this with real security config and update tests. 7. Write unit tests per the behavior spec above. Tests should NOT require Spring context -- construct implementations directly with test SecurityProperties. - cd /c/Users/Hendrik/Documents/projects/cameleer3-server && mvn test -pl cameleer3-server-app -Dtest="JwtServiceTest,Ed25519SigningServiceTest,BootstrapTokenValidatorTest" -Dsurefire.reuseForks=false + cd /c/Users/Hendrik/Documents/projects/cameleer-server && mvn test -pl cameleer-server-app -Dtest="JwtServiceTest,Ed25519SigningServiceTest,BootstrapTokenValidatorTest" -Dsurefire.reuseForks=false - JwtService creates and validates access/refresh JWTs with correct claims and expiry diff --git a/.planning/phases/04-security/04-01-SUMMARY.md b/.planning/phases/04-security/04-01-SUMMARY.md index a00dff7e..06c73f2d 100644 --- a/.planning/phases/04-security/04-01-SUMMARY.md +++ b/.planning/phases/04-security/04-01-SUMMARY.md @@ -25,22 +25,22 @@ tech-stack: key-files: created: - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/JwtService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/Ed25519SigningService.java - - cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/InvalidTokenException.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtServiceImpl.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/Ed25519SigningServiceImpl.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/BootstrapTokenValidator.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityBeanConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/TestSecurityConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtServiceTest.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/Ed25519SigningServiceTest.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenValidatorTest.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/security/JwtService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/security/Ed25519SigningService.java + - cameleer-server-core/src/main/java/com/cameleer/server/core/security/InvalidTokenException.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtServiceImpl.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/Ed25519SigningServiceImpl.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/BootstrapTokenValidator.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityBeanConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/TestSecurityConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtServiceTest.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/Ed25519SigningServiceTest.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenValidatorTest.java modified: - - cameleer3-server-app/pom.xml - - cameleer3-server-app/src/main/resources/application.yml - - cameleer3-server-app/src/test/resources/application-test.yml + - cameleer-server-app/pom.xml + - cameleer-server-app/src/main/resources/application.yml + - cameleer-server-app/src/test/resources/application-test.yml key-decisions: - "HMAC-SHA256 with ephemeral 256-bit secret for JWT signing (simpler than Ed25519 for tokens, Ed25519 reserved for config signing)" @@ -91,21 +91,21 @@ _No REFACTOR commit needed -- implementations are clean and minimal._ ## Files Created/Modified -- `cameleer3-server-core/.../security/JwtService.java` - JWT service interface with create/validate methods -- `cameleer3-server-core/.../security/Ed25519SigningService.java` - Ed25519 signing interface with sign/getPublicKeyBase64 -- `cameleer3-server-core/.../security/InvalidTokenException.java` - Runtime exception for invalid/expired/wrong-type tokens -- `cameleer3-server-app/.../security/JwtServiceImpl.java` - Nimbus JOSE+JWT HMAC-SHA256 implementation -- `cameleer3-server-app/.../security/Ed25519SigningServiceImpl.java` - JDK 17 Ed25519 KeyPairGenerator implementation -- `cameleer3-server-app/.../security/BootstrapTokenValidator.java` - Constant-time bootstrap token validation -- `cameleer3-server-app/.../security/SecurityProperties.java` - Config properties for token expiry and bootstrap tokens -- `cameleer3-server-app/.../security/SecurityBeanConfig.java` - Bean wiring with fail-fast startup validation -- `cameleer3-server-app/.../security/TestSecurityConfig.java` - Temporary permit-all for existing test compatibility -- `cameleer3-server-app/pom.xml` - Added nimbus-jose-jwt, spring-boot-starter-security, spring-security-test -- `cameleer3-server-app/.../application.yml` - Security config section with env var mapping -- `cameleer3-server-app/.../application-test.yml` - Test bootstrap token values -- `cameleer3-server-app/.../security/JwtServiceTest.java` - 7 unit tests for JWT creation/validation -- `cameleer3-server-app/.../security/Ed25519SigningServiceTest.java` - 5 unit tests for signing/verification -- `cameleer3-server-app/.../security/BootstrapTokenValidatorTest.java` - 6 unit tests for token matching +- `cameleer-server-core/.../security/JwtService.java` - JWT service interface with create/validate methods +- `cameleer-server-core/.../security/Ed25519SigningService.java` - Ed25519 signing interface with sign/getPublicKeyBase64 +- `cameleer-server-core/.../security/InvalidTokenException.java` - Runtime exception for invalid/expired/wrong-type tokens +- `cameleer-server-app/.../security/JwtServiceImpl.java` - Nimbus JOSE+JWT HMAC-SHA256 implementation +- `cameleer-server-app/.../security/Ed25519SigningServiceImpl.java` - JDK 17 Ed25519 KeyPairGenerator implementation +- `cameleer-server-app/.../security/BootstrapTokenValidator.java` - Constant-time bootstrap token validation +- `cameleer-server-app/.../security/SecurityProperties.java` - Config properties for token expiry and bootstrap tokens +- `cameleer-server-app/.../security/SecurityBeanConfig.java` - Bean wiring with fail-fast startup validation +- `cameleer-server-app/.../security/TestSecurityConfig.java` - Temporary permit-all for existing test compatibility +- `cameleer-server-app/pom.xml` - Added nimbus-jose-jwt, spring-boot-starter-security, spring-security-test +- `cameleer-server-app/.../application.yml` - Security config section with env var mapping +- `cameleer-server-app/.../application-test.yml` - Test bootstrap token values +- `cameleer-server-app/.../security/JwtServiceTest.java` - 7 unit tests for JWT creation/validation +- `cameleer-server-app/.../security/Ed25519SigningServiceTest.java` - 5 unit tests for signing/verification +- `cameleer-server-app/.../security/BootstrapTokenValidatorTest.java` - 6 unit tests for token matching ## Decisions Made diff --git a/.planning/phases/04-security/04-02-PLAN.md b/.planning/phases/04-security/04-02-PLAN.md index 6eec0505..dbaf5928 100644 --- a/.planning/phases/04-security/04-02-PLAN.md +++ b/.planning/phases/04-security/04-02-PLAN.md @@ -5,17 +5,17 @@ type: execute wave: 2 depends_on: ["04-01"] files_modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SecurityFilterIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtRefreshIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/RegistrationSecurityIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/TestSecurityHelper.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/TestSecurityConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/SecurityFilterIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtRefreshIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/RegistrationSecurityIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/TestSecurityHelper.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/TestSecurityConfig.java autonomous: true requirements: - SECU-01 @@ -30,11 +30,11 @@ must_haves: - "SSE endpoint accepts JWT via ?token= query parameter" - "Health endpoint and Swagger UI remain publicly accessible" artifacts: - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java" provides: "OncePerRequestFilter extracting JWT from header or query param" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java" provides: "SecurityFilterChain with permitAll for public paths, authenticated for rest" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java" provides: "Updated register endpoint with bootstrap token validation, JWT issuance, public key" key_links: - from: "JwtAuthenticationFilter" @@ -76,11 +76,11 @@ Output: Working security filter chain with protected/public endpoints, registrat @.planning/phases/04-security/04-VALIDATION.md @.planning/phases/04-security/04-01-SUMMARY.md -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java -@cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java -@cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java +@cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java +@cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java @@ -136,11 +136,11 @@ public class AgentRegistryService { Task 1: SecurityFilterChain + JwtAuthenticationFilter + registration/refresh integration - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java + cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java 1. Create `JwtAuthenticationFilter extends OncePerRequestFilter` (NOT annotated @Component -- constructed in SecurityConfig to avoid double registration): @@ -176,7 +176,7 @@ public class AgentRegistryService { 6. Update `WebConfig` if needed: The `ProtocolVersionInterceptor` excluded paths should align with Spring Security public paths. The SSE events path is already excluded from protocol version check (Phase 3 decision). Verify no conflicts. - cd /c/Users/Hendrik/Documents/projects/cameleer3-server && mvn clean compile -pl cameleer3-server-app + cd /c/Users/Hendrik/Documents/projects/cameleer-server && mvn clean compile -pl cameleer-server-app - SecurityConfig creates stateless filter chain with correct public/protected path split @@ -190,28 +190,28 @@ public class AgentRegistryService { Task 2: Security integration tests + existing test adaptation - cameleer3-server-app/src/test/java/com/cameleer3/server/app/TestSecurityHelper.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/TestSecurityConfig.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SecurityFilterIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtRefreshIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/RegistrationSecurityIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ExecutionControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/MetricsControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/BackpressureIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramRenderControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentCommandControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentSseControllerIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/interceptor/ProtocolVersionIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/OpenApiIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ForwardCompatIT.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/HealthControllerIT.java + cameleer-server-app/src/test/java/com/cameleer/server/app/TestSecurityHelper.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/TestSecurityConfig.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/SecurityFilterIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtRefreshIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/RegistrationSecurityIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ExecutionControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/MetricsControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/BackpressureIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramRenderControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentCommandControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentSseControllerIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/interceptor/ProtocolVersionIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/OpenApiIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ForwardCompatIT.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/controller/HealthControllerIT.java 1. Replace the Plan 01 temporary `TestSecurityConfig` (permit-all) with real security active in tests. Remove the permit-all override so tests run with actual security enforcement. @@ -259,7 +259,7 @@ public class AgentRegistryService { - Test: New access token from refresh can access protected endpoints - cd /c/Users/Hendrik/Documents/projects/cameleer3-server && mvn clean verify + cd /c/Users/Hendrik/Documents/projects/cameleer-server && mvn clean verify - All 17 existing ITs pass with JWT authentication diff --git a/.planning/phases/04-security/04-02-SUMMARY.md b/.planning/phases/04-security/04-02-SUMMARY.md index e0748b33..e8ec4cea 100644 --- a/.planning/phases/04-security/04-02-SUMMARY.md +++ b/.planning/phases/04-security/04-02-SUMMARY.md @@ -25,31 +25,31 @@ tech-stack: key-files: created: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/TestSecurityHelper.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SecurityFilterIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/RegistrationSecurityIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtRefreshIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/TestSecurityHelper.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/SecurityFilterIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/RegistrationSecurityIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtRefreshIT.java modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/TestSecurityConfig.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ExecutionControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/MetricsControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/BackpressureIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramRenderControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentCommandControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentSseControllerIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/interceptor/ProtocolVersionIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ForwardCompatIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/TestSecurityConfig.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ExecutionControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/MetricsControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/BackpressureIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramRenderControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentCommandControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentSseControllerIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/interceptor/ProtocolVersionIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ForwardCompatIT.java key-decisions: - "Added /error to SecurityConfig permitAll to allow Spring Boot error page forwarding through security" diff --git a/.planning/phases/04-security/04-03-PLAN.md b/.planning/phases/04-security/04-03-PLAN.md index 18540faf..4d2605cd 100644 --- a/.planning/phases/04-security/04-03-PLAN.md +++ b/.planning/phases/04-security/04-03-PLAN.md @@ -5,10 +5,10 @@ type: execute wave: 2 depends_on: ["04-01"] files_modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SsePayloadSigner.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SseSigningIT.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/agent/SsePayloadSignerTest.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SsePayloadSigner.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/SseSigningIT.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/agent/SsePayloadSignerTest.java autonomous: true requirements: - SECU-04 @@ -19,9 +19,9 @@ must_haves: - "Signature is computed over the payload JSON without the signature field, then added as a 'signature' field" - "Agent can verify the signature using the public key received at registration" artifacts: - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SsePayloadSigner.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SsePayloadSigner.java" provides: "Component that signs SSE command payloads before delivery" - - path: "cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java" + - path: "cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java" provides: "Updated onCommandReady with signing before sendEvent" key_links: - from: "SseConnectionManager.onCommandReady" @@ -54,7 +54,7 @@ Output: All SSE command events carry verifiable Ed25519 signatures. @.planning/phases/04-security/04-RESEARCH.md @.planning/phases/04-security/04-01-SUMMARY.md -@cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java +@cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java @@ -98,10 +98,10 @@ public record AgentCommand(String id, CommandType type, String payload, String a Task 1: SsePayloadSigner + signing integration in SseConnectionManager - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SsePayloadSigner.java, - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/agent/SsePayloadSignerTest.java, - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SseSigningIT.java + cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SsePayloadSigner.java, + cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/agent/SsePayloadSignerTest.java, + cameleer-server-app/src/test/java/com/cameleer/server/app/security/SseSigningIT.java SsePayloadSigner unit tests: @@ -155,7 +155,7 @@ public record AgentCommand(String id, CommandType type, String payload, String a - NOTE: This test depends on Plan 02's bootstrap token and JWT auth being in place. If Plan 03 executes before Plan 02, the test will need the TestSecurityHelper or a different auth approach. Since both are Wave 2 but independent, document this: "If Plan 02 is not yet complete, use TestSecurityHelper from Plan 01's temporary permit-all config." - cd /c/Users/Hendrik/Documents/projects/cameleer3-server && mvn test -pl cameleer3-server-app -Dtest="SsePayloadSignerTest,SseSigningIT" -Dsurefire.reuseForks=false + cd /c/Users/Hendrik/Documents/projects/cameleer-server && mvn test -pl cameleer-server-app -Dtest="SsePayloadSignerTest,SseSigningIT" -Dsurefire.reuseForks=false - SsePayloadSigner signs JSON payloads with Ed25519 and adds signature field diff --git a/.planning/phases/04-security/04-03-SUMMARY.md b/.planning/phases/04-security/04-03-SUMMARY.md index a92d18f0..83a5decc 100644 --- a/.planning/phases/04-security/04-03-SUMMARY.md +++ b/.planning/phases/04-security/04-03-SUMMARY.md @@ -22,11 +22,11 @@ tech-stack: key-files: created: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SsePayloadSigner.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/agent/SsePayloadSignerTest.java - - cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SseSigningIT.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SsePayloadSigner.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/agent/SsePayloadSignerTest.java + - cameleer-server-app/src/test/java/com/cameleer/server/app/security/SseSigningIT.java modified: - - cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java + - cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java key-decisions: - "Signed payload parsed to JsonNode before passing to SseEmitter to avoid double-quoting raw JSON strings" @@ -73,10 +73,10 @@ _No REFACTOR commit needed -- implementation is clean and minimal._ ## Files Created/Modified -- `cameleer3-server-app/.../agent/SsePayloadSigner.java` - Component that signs JSON payloads with Ed25519 and adds signature field -- `cameleer3-server-app/.../agent/SseConnectionManager.java` - Updated onCommandReady to sign payload before SSE delivery -- `cameleer3-server-app/.../agent/SsePayloadSignerTest.java` - 7 unit tests for signing behavior and edge cases -- `cameleer3-server-app/.../security/SseSigningIT.java` - 2 integration tests for end-to-end signature verification +- `cameleer-server-app/.../agent/SsePayloadSigner.java` - Component that signs JSON payloads with Ed25519 and adds signature field +- `cameleer-server-app/.../agent/SseConnectionManager.java` - Updated onCommandReady to sign payload before SSE delivery +- `cameleer-server-app/.../agent/SsePayloadSignerTest.java` - 7 unit tests for signing behavior and edge cases +- `cameleer-server-app/.../security/SseSigningIT.java` - 2 integration tests for end-to-end signature verification ## Decisions Made diff --git a/.planning/phases/04-security/04-RESEARCH.md b/.planning/phases/04-security/04-RESEARCH.md index fb5f1c42..df805916 100644 --- a/.planning/phases/04-security/04-RESEARCH.md +++ b/.planning/phases/04-security/04-RESEARCH.md @@ -6,7 +6,7 @@ ## Summary -This phase adds authentication and integrity protection to the Cameleer3 server. The implementation uses Spring Security 6.4.3 (managed by Spring Boot 3.4.3) with a custom `OncePerRequestFilter` for JWT validation, JDK 17 built-in Ed25519 for signing SSE payloads, and environment variable-based bootstrap tokens for agent registration. The approach is deliberately simple -- no OAuth2 resource server, no external identity provider, just symmetric HMAC JWTs for access control and Ed25519 signatures for payload integrity. +This phase adds authentication and integrity protection to the Cameleer server. The implementation uses Spring Security 6.4.3 (managed by Spring Boot 3.4.3) with a custom `OncePerRequestFilter` for JWT validation, JDK 17 built-in Ed25519 for signing SSE payloads, and environment variable-based bootstrap tokens for agent registration. The approach is deliberately simple -- no OAuth2 resource server, no external identity provider, just symmetric HMAC JWTs for access control and Ed25519 signatures for payload integrity. The existing codebase has clear integration points: `AgentRegistrationController.register()` already returns `serverPublicKey: null` as a placeholder, `SseConnectionManager.onCommandReady()` is the signing hook for SSE events, and `WebConfig` already defines excluded paths that align with the public endpoint list. Spring Security's `SecurityFilterChain` replaces the need for hand-rolled authorization logic -- endpoints are protected by default, with explicit `permitAll()` for health, register, and docs. @@ -89,7 +89,7 @@ The existing codebase has clear integration points: `AgentRegistrationController - **Ed25519 library:** Use JDK built-in. Zero external dependencies, native performance, well-tested in JDK 17+. - **Refresh token storage:** Use stateless signed refresh tokens (also HMAC-signed JWTs with different claims/expiry). This avoids any in-memory storage for refresh tokens and scales naturally. The refresh token is just a JWT with `type=refresh`, `sub=agentId`, and 7-day expiry. On refresh, validate the refresh JWT, check agent still exists, issue new access JWT. -**Installation (add to cameleer3-server-app pom.xml):** +**Installation (add to cameleer-server-app pom.xml):** ```xml org.springframework.boot @@ -108,12 +108,12 @@ Note: If `spring-boot-starter-security` brings Nimbus transitively (via `spring- ### Recommended Project Structure ``` -cameleer3-server-core/src/main/java/com/cameleer3/server/core/ +cameleer-server-core/src/main/java/com/cameleer/server/core/ security/ JwtService.java # Interface: createAccessToken, createRefreshToken, validateToken, extractAgentId Ed25519SigningService.java # Interface: sign(payload) -> signature, getPublicKeyBase64() -cameleer3-server-app/src/main/java/com/cameleer3/server/app/ +cameleer-server-app/src/main/java/com/cameleer/server/app/ security/ JwtServiceImpl.java # Nimbus JOSE+JWT HMAC implementation Ed25519SigningServiceImpl.java # JDK Ed25519 keypair + signing implementation @@ -439,23 +439,23 @@ public boolean validateBootstrapToken(String provided) { | Property | Value | |----------|-------| | Framework | JUnit 5 + Spring Boot Test (spring-boot-starter-test) | -| Config file | `cameleer3-server-app/src/test/resources/application-test.yml` | -| Quick run command | `mvn test -pl cameleer3-server-app -Dtest=Security*Test -Dsurefire.reuseForks=false` | +| Config file | `cameleer-server-app/src/test/resources/application-test.yml` | +| Quick run command | `mvn test -pl cameleer-server-app -Dtest=Security*Test -Dsurefire.reuseForks=false` | | Full suite command | `mvn clean verify` | ### Phase Requirements to Test Map | Req ID | Behavior | Test Type | Automated Command | File Exists? | |--------|----------|-----------|-------------------|-------------| -| SECU-01 | Protected endpoints reject requests without JWT; public endpoints accessible | integration | `mvn test -pl cameleer3-server-app -Dtest=SecurityFilterIT -Dsurefire.reuseForks=false` | No -- Wave 0 | -| SECU-02 | Refresh endpoint issues new access JWT from valid refresh token | integration | `mvn test -pl cameleer3-server-app -Dtest=JwtRefreshIT -Dsurefire.reuseForks=false` | No -- Wave 0 | -| SECU-03 | Ed25519 keypair generated at startup; public key in registration response | integration | `mvn test -pl cameleer3-server-app -Dtest=RegistrationSecurityIT -Dsurefire.reuseForks=false` | No -- Wave 0 | -| SECU-04 | SSE payloads carry valid Ed25519 signature | integration | `mvn test -pl cameleer3-server-app -Dtest=SseSigningIT -Dsurefire.reuseForks=false` | No -- Wave 0 | -| SECU-05 | Bootstrap token required for registration; rejects invalid/missing tokens | integration | `mvn test -pl cameleer3-server-app -Dtest=BootstrapTokenIT -Dsurefire.reuseForks=false` | No -- Wave 0 | -| N/A | JWT creation, validation, expiry logic | unit | `mvn test -pl cameleer3-server-app -Dtest=JwtServiceTest -Dsurefire.reuseForks=false` | No -- Wave 0 | -| N/A | Ed25519 signing and verification roundtrip | unit | `mvn test -pl cameleer3-server-app -Dtest=Ed25519SigningServiceTest -Dsurefire.reuseForks=false` | No -- Wave 0 | +| SECU-01 | Protected endpoints reject requests without JWT; public endpoints accessible | integration | `mvn test -pl cameleer-server-app -Dtest=SecurityFilterIT -Dsurefire.reuseForks=false` | No -- Wave 0 | +| SECU-02 | Refresh endpoint issues new access JWT from valid refresh token | integration | `mvn test -pl cameleer-server-app -Dtest=JwtRefreshIT -Dsurefire.reuseForks=false` | No -- Wave 0 | +| SECU-03 | Ed25519 keypair generated at startup; public key in registration response | integration | `mvn test -pl cameleer-server-app -Dtest=RegistrationSecurityIT -Dsurefire.reuseForks=false` | No -- Wave 0 | +| SECU-04 | SSE payloads carry valid Ed25519 signature | integration | `mvn test -pl cameleer-server-app -Dtest=SseSigningIT -Dsurefire.reuseForks=false` | No -- Wave 0 | +| SECU-05 | Bootstrap token required for registration; rejects invalid/missing tokens | integration | `mvn test -pl cameleer-server-app -Dtest=BootstrapTokenIT -Dsurefire.reuseForks=false` | No -- Wave 0 | +| N/A | JWT creation, validation, expiry logic | unit | `mvn test -pl cameleer-server-app -Dtest=JwtServiceTest -Dsurefire.reuseForks=false` | No -- Wave 0 | +| N/A | Ed25519 signing and verification roundtrip | unit | `mvn test -pl cameleer-server-app -Dtest=Ed25519SigningServiceTest -Dsurefire.reuseForks=false` | No -- Wave 0 | ### Sampling Rate -- **Per task commit:** `mvn test -pl cameleer3-server-app -Dsurefire.reuseForks=false` +- **Per task commit:** `mvn test -pl cameleer-server-app -Dsurefire.reuseForks=false` - **Per wave merge:** `mvn clean verify` - **Phase gate:** Full suite green before `/gsd:verify-work` diff --git a/.planning/phases/04-security/04-VALIDATION.md b/.planning/phases/04-security/04-VALIDATION.md index 737cd617..950d135c 100644 --- a/.planning/phases/04-security/04-VALIDATION.md +++ b/.planning/phases/04-security/04-VALIDATION.md @@ -18,8 +18,8 @@ created: 2026-03-11 | Property | Value | |----------|-------| | **Framework** | JUnit 5 + Spring Boot Test + Spring Security Test | -| **Config file** | cameleer3-server-app/src/test/resources/application-test.yml | -| **Quick run command** | `mvn test -pl cameleer3-server-app -Dtest="Security*,Jwt*,Bootstrap*,Ed25519*" -Dsurefire.reuseForks=false` | +| **Config file** | cameleer-server-app/src/test/resources/application-test.yml | +| **Quick run command** | `mvn test -pl cameleer-server-app -Dtest="Security*,Jwt*,Bootstrap*,Ed25519*" -Dsurefire.reuseForks=false` | | **Full suite command** | `mvn clean verify` | | **Estimated runtime** | ~60 seconds | @@ -27,7 +27,7 @@ created: 2026-03-11 ## Sampling Rate -- **After every task commit:** Run `mvn test -pl cameleer3-server-app -Dsurefire.reuseForks=false` +- **After every task commit:** Run `mvn test -pl cameleer-server-app -Dsurefire.reuseForks=false` - **After every plan wave:** Run `mvn clean verify` - **Before `/gsd:verify-work`:** Full suite must be green - **Max feedback latency:** 60 seconds @@ -38,13 +38,13 @@ created: 2026-03-11 | Task ID | Plan | Wave | Requirement | Test Type | Automated Command | File Exists | Status | |---------|------|------|-------------|-----------|-------------------|-------------|--------| -| 04-01-01 | 01 | 1 | SECU-03 | unit | `mvn test -pl cameleer3-server-app -Dtest=Ed25519SigningServiceTest -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | -| 04-01-02 | 01 | 1 | SECU-01 | unit | `mvn test -pl cameleer3-server-app -Dtest=JwtServiceTest -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | -| 04-01-03 | 01 | 1 | SECU-05 | integration | `mvn test -pl cameleer3-server-app -Dtest=BootstrapTokenIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | -| 04-01-04 | 01 | 1 | SECU-01 | integration | `mvn test -pl cameleer3-server-app -Dtest=SecurityFilterIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | -| 04-01-05 | 01 | 1 | SECU-02 | integration | `mvn test -pl cameleer3-server-app -Dtest=JwtRefreshIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | -| 04-01-06 | 01 | 1 | SECU-04 | integration | `mvn test -pl cameleer3-server-app -Dtest=SseSigningIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | -| 04-01-07 | 01 | 1 | N/A | integration | `mvn test -pl cameleer3-server-app -Dtest=RegistrationSecurityIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | +| 04-01-01 | 01 | 1 | SECU-03 | unit | `mvn test -pl cameleer-server-app -Dtest=Ed25519SigningServiceTest -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | +| 04-01-02 | 01 | 1 | SECU-01 | unit | `mvn test -pl cameleer-server-app -Dtest=JwtServiceTest -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | +| 04-01-03 | 01 | 1 | SECU-05 | integration | `mvn test -pl cameleer-server-app -Dtest=BootstrapTokenIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | +| 04-01-04 | 01 | 1 | SECU-01 | integration | `mvn test -pl cameleer-server-app -Dtest=SecurityFilterIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | +| 04-01-05 | 01 | 1 | SECU-02 | integration | `mvn test -pl cameleer-server-app -Dtest=JwtRefreshIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | +| 04-01-06 | 01 | 1 | SECU-04 | integration | `mvn test -pl cameleer-server-app -Dtest=SseSigningIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | +| 04-01-07 | 01 | 1 | N/A | integration | `mvn test -pl cameleer-server-app -Dtest=RegistrationSecurityIT -Dsurefire.reuseForks=false` | ❌ W0 | ⬜ pending | *Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky* diff --git a/.planning/phases/04-security/04-VERIFICATION.md b/.planning/phases/04-security/04-VERIFICATION.md index 05b1d0be..5b57d3d0 100644 --- a/.planning/phases/04-security/04-VERIFICATION.md +++ b/.planning/phases/04-security/04-VERIFICATION.md @@ -39,19 +39,19 @@ All truths drawn from PLAN frontmatter must_haves across plans 01, 02, and 03. | Artifact | Provides | Status | Details | |----------|----------|--------|---------| -| `cameleer3-server-core/.../security/JwtService.java` | JWT interface: createAccessToken, createRefreshToken, validateAndExtractAgentId, validateRefreshToken | VERIFIED | 49 lines, substantive interface with 4 methods | -| `cameleer3-server-core/.../security/Ed25519SigningService.java` | Ed25519 interface: sign(payload), getPublicKeyBase64() | VERIFIED | 29 lines, substantive interface with 2 methods | -| `cameleer3-server-app/.../security/JwtServiceImpl.java` | Nimbus JOSE+JWT HMAC-SHA256 implementation | VERIFIED | 120 lines; uses `MACSigner`/`MACVerifier`, ephemeral 256-bit secret, correct claims | -| `cameleer3-server-app/.../security/Ed25519SigningServiceImpl.java` | JDK 17 Ed25519 KeyPairGenerator implementation | VERIFIED | 54 lines; `KeyPairGenerator.getInstance("Ed25519")`, `Signature.getInstance("Ed25519")`, Base64-encoded output | -| `cameleer3-server-app/.../security/BootstrapTokenValidator.java` | Constant-time bootstrap token validation with dual-token rotation | VERIFIED | 50 lines; `MessageDigest.isEqual()`, checks current and previous token, null/blank guard | -| `cameleer3-server-app/.../security/SecurityProperties.java` | Config binding with env var mapping | VERIFIED | 48 lines; `@ConfigurationProperties(prefix="security")`; all 4 fields with defaults | -| `cameleer3-server-app/.../security/SecurityBeanConfig.java` | Bean wiring with fail-fast validation | VERIFIED | 43 lines; `@EnableConfigurationProperties`, all 3 service beans, `InitializingBean` check | -| `cameleer3-server-app/.../security/JwtAuthenticationFilter.java` | OncePerRequestFilter extracting JWT from header or query param | VERIFIED | 72 lines; extracts from `Authorization: Bearer` then `?token=` query param; sets `SecurityContextHolder` | -| `cameleer3-server-app/.../security/SecurityConfig.java` | SecurityFilterChain with permitAll for public paths, authenticated for rest | VERIFIED | 54 lines; stateless, CSRF disabled, correct permitAll list, `addFilterBefore` JwtAuthenticationFilter | -| `cameleer3-server-app/.../controller/AgentRegistrationController.java` | Updated register endpoint with bootstrap token validation, JWT issuance, public key; refresh endpoint | VERIFIED | 230 lines; both `/register` and `/{id}/refresh` endpoints fully wired | -| `cameleer3-server-app/.../agent/SsePayloadSigner.java` | Component that signs SSE command payloads | VERIFIED | 77 lines; `@Component`, signs then adds field, defensive null/blank handling | -| `cameleer3-server-app/.../agent/SseConnectionManager.java` | Updated onCommandReady with signing before sendEvent | VERIFIED | `onCommandReady()` calls `ssePayloadSigner.signPayload()`, parses to `JsonNode` to avoid double-quoting | -| `cameleer3-server-app/.../resources/application.yml` | Security config with env var mapping | VERIFIED | `security.bootstrap-token: ${CAMELEER_AUTH_TOKEN:}` and `security.bootstrap-token-previous: ${CAMELEER_AUTH_TOKEN_PREVIOUS:}` present | +| `cameleer-server-core/.../security/JwtService.java` | JWT interface: createAccessToken, createRefreshToken, validateAndExtractAgentId, validateRefreshToken | VERIFIED | 49 lines, substantive interface with 4 methods | +| `cameleer-server-core/.../security/Ed25519SigningService.java` | Ed25519 interface: sign(payload), getPublicKeyBase64() | VERIFIED | 29 lines, substantive interface with 2 methods | +| `cameleer-server-app/.../security/JwtServiceImpl.java` | Nimbus JOSE+JWT HMAC-SHA256 implementation | VERIFIED | 120 lines; uses `MACSigner`/`MACVerifier`, ephemeral 256-bit secret, correct claims | +| `cameleer-server-app/.../security/Ed25519SigningServiceImpl.java` | JDK 17 Ed25519 KeyPairGenerator implementation | VERIFIED | 54 lines; `KeyPairGenerator.getInstance("Ed25519")`, `Signature.getInstance("Ed25519")`, Base64-encoded output | +| `cameleer-server-app/.../security/BootstrapTokenValidator.java` | Constant-time bootstrap token validation with dual-token rotation | VERIFIED | 50 lines; `MessageDigest.isEqual()`, checks current and previous token, null/blank guard | +| `cameleer-server-app/.../security/SecurityProperties.java` | Config binding with env var mapping | VERIFIED | 48 lines; `@ConfigurationProperties(prefix="security")`; all 4 fields with defaults | +| `cameleer-server-app/.../security/SecurityBeanConfig.java` | Bean wiring with fail-fast validation | VERIFIED | 43 lines; `@EnableConfigurationProperties`, all 3 service beans, `InitializingBean` check | +| `cameleer-server-app/.../security/JwtAuthenticationFilter.java` | OncePerRequestFilter extracting JWT from header or query param | VERIFIED | 72 lines; extracts from `Authorization: Bearer` then `?token=` query param; sets `SecurityContextHolder` | +| `cameleer-server-app/.../security/SecurityConfig.java` | SecurityFilterChain with permitAll for public paths, authenticated for rest | VERIFIED | 54 lines; stateless, CSRF disabled, correct permitAll list, `addFilterBefore` JwtAuthenticationFilter | +| `cameleer-server-app/.../controller/AgentRegistrationController.java` | Updated register endpoint with bootstrap token validation, JWT issuance, public key; refresh endpoint | VERIFIED | 230 lines; both `/register` and `/{id}/refresh` endpoints fully wired | +| `cameleer-server-app/.../agent/SsePayloadSigner.java` | Component that signs SSE command payloads | VERIFIED | 77 lines; `@Component`, signs then adds field, defensive null/blank handling | +| `cameleer-server-app/.../agent/SseConnectionManager.java` | Updated onCommandReady with signing before sendEvent | VERIFIED | `onCommandReady()` calls `ssePayloadSigner.signPayload()`, parses to `JsonNode` to avoid double-quoting | +| `cameleer-server-app/.../resources/application.yml` | Security config with env var mapping | VERIFIED | `security.bootstrap-token: ${CAMELEER_AUTH_TOKEN:}` and `security.bootstrap-token-previous: ${CAMELEER_AUTH_TOKEN_PREVIOUS:}` present | ### Key Link Verification diff --git a/.planning/research/ARCHITECTURE.md b/.planning/research/ARCHITECTURE.md index bf7f4a6a..5e33dab1 100644 --- a/.planning/research/ARCHITECTURE.md +++ b/.planning/research/ARCHITECTURE.md @@ -57,7 +57,7 @@ Agents (50+) Users / UI Agent POST /api/v1/ingest | v -[IngestController] -- validates JWT, deserializes using cameleer3-common models +[IngestController] -- validates JWT, deserializes using cameleer-common models | v [IngestionService.accept(batch)] -- accepts TransactionData/ActivityData @@ -126,7 +126,7 @@ Each registered SseEmitter sends event to connected agent Agent POST /api/v1/diagrams (on startup or route change) | v -[DiagramController] -- receives route definition (XML/YAML/JSON from cameleer3-common) +[DiagramController] -- receives route definition (XML/YAML/JSON from cameleer-common) | v [DiagramService.storeVersion(definition)] @@ -341,11 +341,11 @@ public record PageCursor(Instant timestamp, String id) {} ## Module Boundary Design -### Core Module (`cameleer3-server-core`) +### Core Module (`cameleer-server-core`) The core module is the domain layer. It contains: -- **Domain models** -- Transaction, Activity, Agent, DiagramVersion, etc. (may extend or complement cameleer3-common models) +- **Domain models** -- Transaction, Activity, Agent, DiagramVersion, etc. (may extend or complement cameleer-common models) - **Service interfaces and implementations** -- TransactionService, AgentRegistryService, DiagramService, QueryEngine - **Repository interfaces** -- TransactionRepository, DiagramRepository, AgentRepository (interfaces only, no implementations) - **Ingestion logic** -- WriteBuffer, batch assembly, backpressure signaling @@ -356,7 +356,7 @@ The core module is the domain layer. It contains: **No Spring Boot dependencies.** Jackson is acceptable (already present). JUnit for tests. -### App Module (`cameleer3-server-app`) +### App Module (`cameleer-server-app`) The app module is the infrastructure/adapter layer. It contains: @@ -376,8 +376,8 @@ The app module is the infrastructure/adapter layer. It contains: ``` app --> core (allowed) core --> app (NEVER) -core --> cameleer3-common (allowed) -app --> cameleer3-common (transitively via core) +core --> cameleer-common (allowed) +app --> cameleer-common (transitively via core) ``` ## Ingestion Pipeline Detail @@ -393,7 +393,7 @@ Use a two-stage approach: - WriteBuffer has a bounded capacity (configurable, default 50,000 items). - When buffer is >80% full, respond with HTTP 429 + `Retry-After` header. -- Agents (cameleer3) should implement exponential backoff on 429. +- Agents (cameleer) should implement exponential backoff on 429. - Monitor buffer fill level as a metric. ### Batch Size Tuning diff --git a/.planning/research/PITFALLS.md b/.planning/research/PITFALLS.md index dd669fbb..acc7d251 100644 --- a/.planning/research/PITFALLS.md +++ b/.planning/research/PITFALLS.md @@ -1,6 +1,6 @@ # Domain Pitfalls -**Domain:** Transaction monitoring / observability server (Cameleer3 Server) +**Domain:** Transaction monitoring / observability server (Cameleer Server) **Researched:** 2026-03-11 **Confidence:** MEDIUM (based on established patterns for ClickHouse, SSE, high-volume ingestion; no web verification available) diff --git a/.planning/research/STACK.md b/.planning/research/STACK.md index f5ec3ceb..f58a9e6b 100644 --- a/.planning/research/STACK.md +++ b/.planning/research/STACK.md @@ -1,6 +1,6 @@ # Technology Stack -**Project:** Cameleer3 Server +**Project:** Cameleer Server **Researched:** 2026-03-11 **Overall confidence:** MEDIUM (no live source verification available; versions based on training data up to May 2025) diff --git a/.planning/research/SUMMARY.md b/.planning/research/SUMMARY.md index 358cce0b..c5569fe5 100644 --- a/.planning/research/SUMMARY.md +++ b/.planning/research/SUMMARY.md @@ -1,4 +1,4 @@ -# Research Summary: Cameleer3 Server +# Research Summary: Cameleer Server **Domain:** Transaction observability server for Apache Camel integrations **Researched:** 2026-03-11 @@ -6,7 +6,7 @@ ## Executive Summary -Cameleer3 Server is a write-heavy, read-occasional observability system that receives millions of transaction records per day from distributed Apache Camel agents, stores them with 30-day retention, and provides structured + full-text search. The architecture closely parallels established observability platforms like Jaeger, Zipkin, and njams Server, with the key differentiator being Camel route diagram visualization tied to individual transactions. +Cameleer Server is a write-heavy, read-occasional observability system that receives millions of transaction records per day from distributed Apache Camel agents, stores them with 30-day retention, and provides structured + full-text search. The architecture closely parallels established observability platforms like Jaeger, Zipkin, and njams Server, with the key differentiator being Camel route diagram visualization tied to individual transactions. The recommended stack centers on **ClickHouse** as the primary data store. ClickHouse's columnar MergeTree engine provides the exact properties this project needs: massive batch insert throughput, excellent time-range query performance, native TTL-based retention, and 10-20x compression on structured observability data. This is a well-established pattern used by production observability platforms (SigNoz, Uptrace, PostHog all run on ClickHouse). @@ -93,9 +93,9 @@ Based on research, suggested phase structure: ## Gaps to Address - **ClickHouse Java client API:** The clickhouse-java library has undergone significant changes. Exact API, connection pooling, and Spring Boot integration patterns need phase-specific research -- **cameleer3-common PROTOCOL.md:** Must read the agent protocol definition before designing ClickHouse schema -- this defines the exact data structures being ingested +- **cameleer-common PROTOCOL.md:** Must read the agent protocol definition before designing ClickHouse schema -- this defines the exact data structures being ingested - **ClickHouse Docker setup:** Optimal ClickHouse Docker configuration (memory limits, merge settings) for development and production - **Full-text search decision:** ClickHouse skip indexes may or may not meet the "search by any content" requirement. This needs prototyping with realistic data -- **Diagram rendering library:** Server-side route diagram rendering is a significant unknown; needs prototyping with actual Camel route graph data from cameleer3-common +- **Diagram rendering library:** Server-side route diagram rendering is a significant unknown; needs prototyping with actual Camel route graph data from cameleer-common - **Frontend framework:** No research on UI technology -- deferred to UI phase -- **Agent protocol stability:** The cameleer3-common protocol is still evolving. Schema evolution strategy needs alignment with agent development +- **Agent protocol stability:** The cameleer-common protocol is still evolving. Schema evolution strategy needs alignment with agent development diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..9e0a1c8b --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,101 @@ + +# GitNexus — Code Intelligence + +This project is indexed by GitNexus as **cameleer-server** (6298 symbols, 15869 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. + +> If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. + +## Always Do + +- **MUST run impact analysis before editing any symbol.** Before modifying a function, class, or method, run `gitnexus_impact({target: "symbolName", direction: "upstream"})` and report the blast radius (direct callers, affected processes, risk level) to the user. +- **MUST run `gitnexus_detect_changes()` before committing** to verify your changes only affect expected symbols and execution flows. +- **MUST warn the user** if impact analysis returns HIGH or CRITICAL risk before proceeding with edits. +- When exploring unfamiliar code, use `gitnexus_query({query: "concept"})` to find execution flows instead of grepping. It returns process-grouped results ranked by relevance. +- When you need full context on a specific symbol — callers, callees, which execution flows it participates in — use `gitnexus_context({name: "symbolName"})`. + +## When Debugging + +1. `gitnexus_query({query: ""})` — find execution flows related to the issue +2. `gitnexus_context({name: ""})` — see all callers, callees, and process participation +3. `READ gitnexus://repo/cameleer-server/process/{processName}` — trace the full execution flow step by step +4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed + +## When Refactoring + +- **Renaming**: MUST use `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` first. Review the preview — graph edits are safe, text_search edits need manual review. Then run with `dry_run: false`. +- **Extracting/Splitting**: MUST run `gitnexus_context({name: "target"})` to see all incoming/outgoing refs, then `gitnexus_impact({target: "target", direction: "upstream"})` to find all external callers before moving code. +- After any refactor: run `gitnexus_detect_changes({scope: "all"})` to verify only expected files changed. + +## Never Do + +- NEVER edit a function, class, or method without first running `gitnexus_impact` on it. +- NEVER ignore HIGH or CRITICAL risk warnings from impact analysis. +- NEVER rename symbols with find-and-replace — use `gitnexus_rename` which understands the call graph. +- NEVER commit changes without running `gitnexus_detect_changes()` to check affected scope. + +## Tools Quick Reference + +| Tool | When to use | Command | +|------|-------------|---------| +| `query` | Find code by concept | `gitnexus_query({query: "auth validation"})` | +| `context` | 360-degree view of one symbol | `gitnexus_context({name: "validateUser"})` | +| `impact` | Blast radius before editing | `gitnexus_impact({target: "X", direction: "upstream"})` | +| `detect_changes` | Pre-commit scope check | `gitnexus_detect_changes({scope: "staged"})` | +| `rename` | Safe multi-file rename | `gitnexus_rename({symbol_name: "old", new_name: "new", dry_run: true})` | +| `cypher` | Custom graph queries | `gitnexus_cypher({query: "MATCH ..."})` | + +## Impact Risk Levels + +| Depth | Meaning | Action | +|-------|---------|--------| +| d=1 | WILL BREAK — direct callers/importers | MUST update these | +| d=2 | LIKELY AFFECTED — indirect deps | Should test | +| d=3 | MAY NEED TESTING — transitive | Test if critical path | + +## Resources + +| Resource | Use for | +|----------|---------| +| `gitnexus://repo/cameleer-server/context` | Codebase overview, check index freshness | +| `gitnexus://repo/cameleer-server/clusters` | All functional areas | +| `gitnexus://repo/cameleer-server/processes` | All execution flows | +| `gitnexus://repo/cameleer-server/process/{name}` | Step-by-step execution trace | + +## Self-Check Before Finishing + +Before completing any code modification task, verify: +1. `gitnexus_impact` was run for all modified symbols +2. No HIGH/CRITICAL risk warnings were ignored +3. `gitnexus_detect_changes()` confirms changes match expected scope +4. All d=1 (WILL BREAK) dependents were updated + +## Keeping the Index Fresh + +After committing code changes, the GitNexus index becomes stale. Re-run analyze to update it: + +```bash +npx gitnexus analyze +``` + +If the index previously included embeddings, preserve them by adding `--embeddings`: + +```bash +npx gitnexus analyze --embeddings +``` + +To check whether embeddings exist, inspect `.gitnexus/meta.json` — the `stats.embeddings` field shows the count (0 means no embeddings). **Running analyze without `--embeddings` will delete any previously generated embeddings.** + +> Claude Code users: A PostToolUse hook handles this automatically after `git commit` and `git merge`. + +## CLI + +| Task | Read this skill file | +|------|---------------------| +| Understand architecture / "How does X work?" | `.claude/skills/gitnexus/gitnexus-exploring/SKILL.md` | +| Blast radius / "What breaks if I change X?" | `.claude/skills/gitnexus/gitnexus-impact-analysis/SKILL.md` | +| Trace bugs / "Why is X failing?" | `.claude/skills/gitnexus/gitnexus-debugging/SKILL.md` | +| Rename / extract / split / refactor | `.claude/skills/gitnexus/gitnexus-refactoring/SKILL.md` | +| Tools, resources, schema reference | `.claude/skills/gitnexus/gitnexus-guide/SKILL.md` | +| Index, status, clean, wiki CLI commands | `.claude/skills/gitnexus/gitnexus-cli/SKILL.md` | + + diff --git a/CLAUDE.md b/CLAUDE.md index 9ee1aa26..31e04aea 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,18 +4,18 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project -Cameleer3 Server — observability server that receives, stores, and serves Camel route execution data and route diagrams from Cameleer3 agents. Pushes config and commands to agents via SSE. Also orchestrates Docker container deployments when running under cameleer-saas. +Cameleer Server — observability server that receives, stores, and serves Camel route execution data and route diagrams from Cameleer agents. Pushes config and commands to agents via SSE. Also orchestrates Docker container deployments when running under cameleer-saas. ## Related Project -- **cameleer3** (`https://gitea.siegeln.net/cameleer/cameleer3`) — the Java agent that instruments Camel applications -- Protocol defined in `cameleer3-common/PROTOCOL.md` in the agent repo -- This server depends on `com.cameleer3:cameleer3-common` (shared models and graph API) +- **cameleer** (`https://gitea.siegeln.net/cameleer/cameleer`) — the Java agent that instruments Camel applications +- Protocol defined in `cameleer-common/PROTOCOL.md` in the agent repo +- This server depends on `com.cameleer:cameleer-common` (shared models and graph API) ## Modules -- `cameleer3-server-core` — domain logic, storage interfaces, services (no Spring dependencies) -- `cameleer3-server-app` — Spring Boot web app, REST controllers, SSE, persistence, Docker orchestration +- `cameleer-server-core` — domain logic, storage interfaces, services (no Spring dependencies) +- `cameleer-server-app` — Spring Boot web app, REST controllers, SSE, persistence, Docker orchestration ## Build Commands @@ -27,12 +27,12 @@ mvn clean verify # Full build with tests ## Run ```bash -java -jar cameleer3-server-app/target/cameleer3-server-app-1.0-SNAPSHOT.jar +java -jar cameleer-server-app/target/cameleer-server-app-1.0-SNAPSHOT.jar ``` ## Key Classes by Package -### Core Module (`cameleer3-server-core/src/main/java/com/cameleer3/server/core/`) +### Core Module (`cameleer-server-core/src/main/java/com/cameleer/server/core/`) **agent/** — Agent lifecycle and commands - `AgentRegistryService` — in-memory registry (ConcurrentHashMap), register/heartbeat/lifecycle @@ -81,7 +81,7 @@ java -jar cameleer3-server-app/target/cameleer3-server-app-1.0-SNAPSHOT.jar - `IngestionService` — ingestExecution, ingestMetric, ingestLog, ingestDiagram - `ChunkAccumulator` — batches data for efficient flush -### App Module (`cameleer3-server-app/src/main/java/com/cameleer3/server/app/`) +### App Module (`cameleer-server-app/src/main/java/com/cameleer/server/app/`) **controller/** — REST endpoints - `AgentRegistrationController` — POST /register, POST /heartbeat, GET / (list), POST /refresh-token @@ -160,7 +160,7 @@ java -jar cameleer3-server-app/target/cameleer3-server-app-1.0-SNAPSHOT.jar - Java 17+ required - Spring Boot 3.4.3 parent POM -- Depends on `com.cameleer3:cameleer3-common` from Gitea Maven registry +- Depends on `com.cameleer:cameleer-common` from Gitea Maven registry - Jackson `JavaTimeModule` for `Instant` deserialization - Communication: receives HTTP POST data from agents (executions, diagrams, metrics, logs), serves SSE event streams for config push/commands (config-update, deep-trace, replay, route-control) - Environment filtering: all data queries (exchanges, dashboard stats, route metrics, agent events, correlation) filter by the selected environment. All commands (config-update, route-control, set-traced-processors, replay) target only agents in the selected environment when one is selected. `AgentRegistryService.findByApplicationAndEnvironment()` for environment-scoped command dispatch. Backend endpoints accept optional `environment` query parameter; null = all environments (backward compatible). @@ -177,7 +177,7 @@ java -jar cameleer3-server-app/target/cameleer3-server-app-1.0-SNAPSHOT.jar ## Database Migrations -PostgreSQL (Flyway): `cameleer3-server-app/src/main/resources/db/migration/` +PostgreSQL (Flyway): `cameleer-server-app/src/main/resources/db/migration/` - V1 — RBAC (users, roles, groups, audit_log) - V2 — Claim mappings (OIDC) - V3 — Runtime management (apps, environments, deployments, app_versions) @@ -189,15 +189,15 @@ PostgreSQL (Flyway): `cameleer3-server-app/src/main/resources/db/migration/` - V9 — Password hardening (failed_login_attempts, locked_until, token_revoked_before on users) - V10 — Runtime type detection (detected_runtime_type, detected_main_class on app_versions) -ClickHouse: `cameleer3-server-app/src/main/resources/clickhouse/init.sql` (run idempotently on startup) +ClickHouse: `cameleer-server-app/src/main/resources/clickhouse/init.sql` (run idempotently on startup) ## CI/CD & Deployment - CI workflow: `.gitea/workflows/ci.yml` — build -> docker -> deploy on push to main or feature branches - Build step skips integration tests (`-DskipITs`) — Testcontainers needs Docker daemon - Docker: multi-stage build (`Dockerfile`), `$BUILDPLATFORM` for native Maven on ARM64 runner, amd64 runtime. `docker-entrypoint.sh` imports `/certs/ca.pem` into JVM truststore before starting the app (supports custom CAs for OIDC discovery without `CAMELEER_SERVER_SECURITY_OIDCTLSSKIPVERIFY`). -- `REGISTRY_TOKEN` build arg required for `cameleer3-common` dependency resolution -- Registry: `gitea.siegeln.net/cameleer/cameleer3-server` (container images) +- `REGISTRY_TOKEN` build arg required for `cameleer-common` dependency resolution +- Registry: `gitea.siegeln.net/cameleer/cameleer-server` (container images) - K8s manifests in `deploy/` — Kustomize base + overlays (main/feature), shared infra (PostgreSQL, ClickHouse, Logto) as top-level manifests - Deployment target: k3s at 192.168.50.86, namespace `cameleer` (main), `cam-` (feature branches) - Feature branches: isolated namespace, PG schema; Traefik Ingress at `-api.cameleer.siegeln.net` @@ -243,7 +243,7 @@ The UI has 4 main tabs: **Exchanges**, **Dashboard**, **Runtime**, **Deployments - Shared `PageLoader` component replaces copy-pasted spinner patterns. - Design system components used consistently: `Select`, `Tabs`, `Toggle`, `Button`, `LogViewer`, `Label` — prefer DS components over raw HTML elements. `LogViewer` renders optional source badges (`container`, `app`, `agent`) via `LogEntry.source` field (DS v0.1.49+). - Environment slugs are auto-computed from display name (read-only in UI). -- Brand assets: `@cameleer/design-system/assets/` provides `camel-logo.svg` (currentColor), `cameleer3-{16,32,48,192,512}.png`, and `cameleer3-logo.png`. Copied to `ui/public/` for use as favicon (`favicon-16.png`, `favicon-32.png`) and logo (`camel-logo.svg` — login dialog 36px, sidebar 28x24px). +- Brand assets: `@cameleer/design-system/assets/` provides `camel-logo.svg` (currentColor), `cameleer-{16,32,48,192,512}.png`, and `cameleer-logo.png`. Copied to `ui/public/` for use as favicon (`favicon-16.png`, `favicon-32.png`) and logo (`camel-logo.svg` — login dialog 36px, sidebar 28x24px). - Sidebar generates `/exchanges/` paths directly (no legacy `/apps/` redirects). basePath is centralized in `ui/src/config.ts`; router.tsx imports it instead of re-reading `` tag. - Global user preferences (environment selection) use Zustand stores with localStorage persistence — never URL search params. URL params are for page-specific state only (e.g. `?text=` search query). Switching environment resets all filters and remounts pages. @@ -255,9 +255,9 @@ When deployed via the cameleer-saas platform, this server orchestrates customer - **TraefikLabelBuilder** (`app/runtime/TraefikLabelBuilder.java`) — generates Traefik Docker labels for path-based (`/{envSlug}/{appSlug}/`) or subdomain-based (`{appSlug}-{envSlug}.{domain}`) routing. Supports strip-prefix and SSL offloading toggles. Also sets per-replica identity labels: `cameleer.replica` (index) and `cameleer.instance-id` (`{envSlug}-{appSlug}-{replicaIndex}`). Internal processing uses labels (not container name parsing) for extensibility. - **PrometheusLabelBuilder** (`app/runtime/PrometheusLabelBuilder.java`) — generates Prometheus `docker_sd_configs` labels per resolved runtime type: Spring Boot `/actuator/prometheus:8081`, Quarkus/native `/q/metrics:9000`, plain Java `/metrics:9464`. Labels merged into container metadata alongside Traefik labels at deploy time. - **DockerNetworkManager** (`app/runtime/DockerNetworkManager.java`) — manages two Docker network tiers: - - `cameleer-traefik` — shared network; Traefik, server, and all app containers attach here. Server joined via docker-compose with `cameleer3-server` DNS alias. + - `cameleer-traefik` — shared network; Traefik, server, and all app containers attach here. Server joined via docker-compose with `cameleer-server` DNS alias. - `cameleer-env-{slug}` — per-environment isolated network; containers in the same environment discover each other via Docker DNS. In SaaS mode, env networks are tenant-scoped: `cameleer-env-{tenantId}-{envSlug}` (overloaded `envNetworkName(tenantId, envSlug)` method) to prevent cross-tenant collisions when multiple tenants have identically-named environments. -- **DockerEventMonitor** (`app/runtime/DockerEventMonitor.java`) — persistent Docker event stream listener for containers with `managed-by=cameleer3-server` label. Detects die/oom/start/stop events and updates deployment replica states. Periodic reconciliation (@Scheduled every 30s) inspects actual container state and corrects deployment status mismatches (fixes stale DEGRADED with all replicas healthy). +- **DockerEventMonitor** (`app/runtime/DockerEventMonitor.java`) — persistent Docker event stream listener for containers with `managed-by=cameleer-server` label. Detects die/oom/start/stop events and updates deployment replica states. Periodic reconciliation (@Scheduled every 30s) inspects actual container state and corrects deployment status mismatches (fixes stale DEGRADED with all replicas healthy). - **DeploymentProgress** (`ui/src/components/DeploymentProgress.tsx`) — UI step indicator showing 7 deploy stages with amber active/green completed styling. - **ContainerLogForwarder** (`app/runtime/ContainerLogForwarder.java`) — streams Docker container stdout/stderr to ClickHouse `logs` table with `source='container'`. Uses `docker logs --follow` per container, batches lines every 2s or 50 lines. Parses Docker timestamp prefix, infers log level via regex. `DeploymentExecutor` starts capture after each replica launches with the replica's `instanceId` (`{envSlug}-{appSlug}-{replicaIndex}`); `DockerEventMonitor` stops capture on die/oom. 60-second max capture timeout with 30s cleanup scheduler. Thread pool of 10 daemon threads. Container logs use the same `instanceId` as the agent (set via `CAMELEER_AGENT_INSTANCEID` env var) for unified log correlation at the instance level. - **StartupLogPanel** (`ui/src/components/StartupLogPanel.tsx`) — collapsible log panel rendered below `DeploymentProgress`. Queries `/api/v1/logs?source=container&application={appSlug}&environment={envSlug}`. Auto-polls every 3s while deployment is STARTING; shows green "live" badge during polling, red "stopped" badge on FAILED. Uses `useStartupLogs` hook and `LogViewer` (design system). @@ -397,7 +397,7 @@ Mean processing time = `camel.route.policy.total_time / camel.route.policy.count # GitNexus — Code Intelligence -This project is indexed by GitNexus as **cameleer3-server** (6300 symbols, 15883 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. +This project is indexed by GitNexus as **cameleer-server** (6298 symbols, 15869 relationships, 300 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. > If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. @@ -413,7 +413,7 @@ This project is indexed by GitNexus as **cameleer3-server** (6300 symbols, 15883 1. `gitnexus_query({query: ""})` — find execution flows related to the issue 2. `gitnexus_context({name: ""})` — see all callers, callees, and process participation -3. `READ gitnexus://repo/cameleer3-server/process/{processName}` — trace the full execution flow step by step +3. `READ gitnexus://repo/cameleer-server/process/{processName}` — trace the full execution flow step by step 4. For regressions: `gitnexus_detect_changes({scope: "compare", base_ref: "main"})` — see what your branch changed ## When Refactoring @@ -452,10 +452,10 @@ This project is indexed by GitNexus as **cameleer3-server** (6300 symbols, 15883 | Resource | Use for | |----------|---------| -| `gitnexus://repo/cameleer3-server/context` | Codebase overview, check index freshness | -| `gitnexus://repo/cameleer3-server/clusters` | All functional areas | -| `gitnexus://repo/cameleer3-server/processes` | All execution flows | -| `gitnexus://repo/cameleer3-server/process/{name}` | Step-by-step execution trace | +| `gitnexus://repo/cameleer-server/context` | Codebase overview, check index freshness | +| `gitnexus://repo/cameleer-server/clusters` | All functional areas | +| `gitnexus://repo/cameleer-server/processes` | All execution flows | +| `gitnexus://repo/cameleer-server/process/{name}` | Step-by-step execution trace | ## Self-Check Before Finishing diff --git a/Dockerfile b/Dockerfile index 6676bc8c..aebfba83 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,14 @@ FROM --platform=$BUILDPLATFORM maven:3.9-eclipse-temurin-17 AS build WORKDIR /build -# Configure Gitea Maven Registry for cameleer3-common dependency +# Configure Gitea Maven Registry for cameleer-common dependency ARG REGISTRY_TOKEN RUN mkdir -p ~/.m2 && \ echo 'giteacameleer'${REGISTRY_TOKEN}'' > ~/.m2/settings.xml COPY pom.xml . -COPY cameleer3-server-core/pom.xml cameleer3-server-core/ -COPY cameleer3-server-app/pom.xml cameleer3-server-app/ +COPY cameleer-server-core/pom.xml cameleer-server-core/ +COPY cameleer-server-app/pom.xml cameleer-server-app/ # Cache deps — only re-downloaded when POMs change RUN mvn dependency:go-offline -B || true COPY . . @@ -16,7 +16,7 @@ RUN mvn clean package -DskipTests -U -B FROM eclipse-temurin:17-jre WORKDIR /app -COPY --from=build /build/cameleer3-server-app/target/cameleer3-server-app-*.jar /app/server.jar +COPY --from=build /build/cameleer-server-app/target/cameleer-server-app-*.jar /app/server.jar COPY docker-entrypoint.sh /app/ RUN chmod +x /app/docker-entrypoint.sh diff --git a/HOWTO.md b/HOWTO.md index 2a63a59b..fce321b0 100644 --- a/HOWTO.md +++ b/HOWTO.md @@ -1,4 +1,4 @@ -# HOWTO — Cameleer3 Server +# HOWTO — Cameleer Server ## Prerequisites @@ -6,7 +6,7 @@ - Maven 3.9+ - Node.js 22+ and npm - Docker & Docker Compose -- Access to the Gitea Maven registry (for `cameleer3-common` dependency) +- Access to the Gitea Maven registry (for `cameleer-common` dependency) ## Build @@ -33,17 +33,17 @@ This starts PostgreSQL 16. The database schema is applied automatically via Flyw |------------|------|----------------------| | PostgreSQL | 5432 | JDBC (Spring JDBC) | -PostgreSQL credentials: `cameleer` / `cameleer_dev`, database `cameleer3`. +PostgreSQL credentials: `cameleer` / `cameleer_dev`, database `cameleer`. ## Run the Server ```bash mvn clean package -DskipTests -SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/cameleer3 \ +SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/cameleer \ SPRING_DATASOURCE_USERNAME=cameleer \ SPRING_DATASOURCE_PASSWORD=cameleer_dev \ CAMELEER_SERVER_SECURITY_BOOTSTRAPTOKEN=my-secret-token \ -java -jar cameleer3-server-app/target/cameleer3-server-app-1.0-SNAPSHOT.jar +java -jar cameleer-server-app/target/cameleer-server-app-1.0-SNAPSHOT.jar ``` > **Note:** The Docker image no longer includes default database credentials. When running via `docker run`, pass `-e SPRING_DATASOURCE_URL=...` etc. The docker-compose setup provides these automatically. @@ -378,7 +378,7 @@ When the write buffer is full (default capacity: 50,000), ingestion endpoints re ## Configuration -Key settings in `cameleer3-server-app/src/main/resources/application.yml`. All custom properties live under `cameleer.server.*`. Env vars are a mechanical 1:1 mapping (dots to underscores, uppercase). +Key settings in `cameleer-server-app/src/main/resources/application.yml`. All custom properties live under `cameleer.server.*`. Env vars are a mechanical 1:1 mapping (dots to underscores, uppercase). **Security** (`cameleer.server.security.*`): @@ -487,10 +487,10 @@ Integration tests use Testcontainers (starts PostgreSQL automatically — requir mvn verify # Unit tests only (no Docker needed) -mvn test -pl cameleer3-server-core +mvn test -pl cameleer-server-core # Specific integration test -mvn test -pl cameleer3-server-app -Dtest=ExecutionControllerIT +mvn test -pl cameleer-server-app -Dtest=ExecutionControllerIT ``` ## Verify Database Data @@ -498,7 +498,7 @@ mvn test -pl cameleer3-server-app -Dtest=ExecutionControllerIT After posting data and waiting for the flush interval (1s default): ```bash -docker exec -it cameleer3-server-postgres-1 psql -U cameleer -d cameleer3 \ +docker exec -it cameleer-server-postgres-1 psql -U cameleer -d cameleer \ -c "SELECT count(*) FROM route_executions" ``` @@ -512,8 +512,8 @@ The full stack is deployed to k3s via CI/CD on push to `main`. K8s manifests are cameleer namespace: PostgreSQL (StatefulSet, 10Gi PVC) ← cameleer-postgres:5432 (ClusterIP) ClickHouse (StatefulSet, 10Gi PVC) ← cameleer-clickhouse:8123 (ClusterIP) - cameleer3-server (Deployment) ← NodePort 30081 - cameleer3-ui (Deployment, Nginx) ← NodePort 30090 + cameleer-server (Deployment) ← NodePort 30081 + cameleer-ui (Deployment, Nginx) ← NodePort 30090 cameleer-deploy-demo (Deployment) ← NodePort 30092 Logto Server (Deployment) ← NodePort 30951/30952 Logto PostgreSQL (StatefulSet, 1Gi) ← ClusterIP @@ -546,7 +546,7 @@ Required Gitea org secrets: `REGISTRY_TOKEN`, `KUBECONFIG_BASE64`, `CAMELEER_SER kubectl -n cameleer get pods # View server logs -kubectl -n cameleer logs -f deploy/cameleer3-server +kubectl -n cameleer logs -f deploy/cameleer-server # View PostgreSQL logs kubectl -n cameleer logs -f statefulset/cameleer-postgres @@ -555,5 +555,5 @@ kubectl -n cameleer logs -f statefulset/cameleer-postgres kubectl -n cameleer logs -f statefulset/cameleer-clickhouse # Restart server -kubectl -n cameleer rollout restart deployment/cameleer3-server +kubectl -n cameleer rollout restart deployment/cameleer-server ``` diff --git a/UI-CONSISTENCY-AUDIT.md b/UI-CONSISTENCY-AUDIT.md index 9f5ea65a..7f563c54 100644 --- a/UI-CONSISTENCY-AUDIT.md +++ b/UI-CONSISTENCY-AUDIT.md @@ -1,6 +1,6 @@ > **Status: RESOLVED** — All phases (1-5) executed on 2026-04-09. Remaining: responsive design (separate initiative). -# UI Consistency Audit — cameleer3-server +# UI Consistency Audit — cameleer-server **Date:** 2026-04-09 **Scope:** All files under `ui/src/` (26 CSS modules, ~45 TSX components, ~15 pages) diff --git a/UI_FINDINGS.md b/UI_FINDINGS.md index ee01397c..d8341957 100644 --- a/UI_FINDINGS.md +++ b/UI_FINDINGS.md @@ -1,4 +1,4 @@ -# UI/UX Evaluation Report — Cameleer3 Server +# UI/UX Evaluation Report — Cameleer Server **Date:** 2026-03-25 **Evaluated URL:** http://192.168.50.86:30090/ @@ -8,7 +8,7 @@ ## Executive Summary -The Cameleer3 dashboard has a **distinctive, well-crafted warm amber design language** that stands out in the observability space. The core monitoring pages (Dashboard, Exchange Detail, Routes, Agents) are polished and consistent. The design system provides a solid foundation. +The Cameleer dashboard has a **distinctive, well-crafted warm amber design language** that stands out in the observability space. The core monitoring pages (Dashboard, Exchange Detail, Routes, Agents) are polished and consistent. The design system provides a solid foundation. **Key strengths:** KPI strip pattern, command palette (Ctrl+K), agent card grouping, dark mode token system, cohesive brand identity. diff --git a/audit/01-exchanges-list.png b/audit/01-exchanges-list.png new file mode 100644 index 00000000..b75cae25 Binary files /dev/null and b/audit/01-exchanges-list.png differ diff --git a/audit/01-platform-dashboard.png b/audit/01-platform-dashboard.png new file mode 100644 index 00000000..628bed48 Binary files /dev/null and b/audit/01-platform-dashboard.png differ diff --git a/audit/02-exchanges-error-filter.png b/audit/02-exchanges-error-filter.png new file mode 100644 index 00000000..628bed48 Binary files /dev/null and b/audit/02-exchanges-error-filter.png differ diff --git a/audit/02-exchanges-list-overview.png b/audit/02-exchanges-list-overview.png new file mode 100644 index 00000000..b6267825 Binary files /dev/null and b/audit/02-exchanges-list-overview.png differ diff --git a/audit/02-platform-license.png b/audit/02-platform-license.png new file mode 100644 index 00000000..f58ffa67 Binary files /dev/null and b/audit/02-platform-license.png differ diff --git a/audit/03-exchanges-error-filtered.png b/audit/03-exchanges-error-filtered.png new file mode 100644 index 00000000..d0506aba Binary files /dev/null and b/audit/03-exchanges-error-filtered.png differ diff --git a/audit/03-exchanges-list-light.png b/audit/03-exchanges-list-light.png new file mode 100644 index 00000000..2496d022 Binary files /dev/null and b/audit/03-exchanges-list-light.png differ diff --git a/audit/03-server-exchanges-overview.png b/audit/03-server-exchanges-overview.png new file mode 100644 index 00000000..b91d513a Binary files /dev/null and b/audit/03-server-exchanges-overview.png differ diff --git a/audit/04-exchange-detail-ok.png b/audit/04-exchange-detail-ok.png new file mode 100644 index 00000000..ee1dbf2e Binary files /dev/null and b/audit/04-exchange-detail-ok.png differ diff --git a/audit/04-users-roles-list.png b/audit/04-users-roles-list.png new file mode 100644 index 00000000..3187b6f5 Binary files /dev/null and b/audit/04-users-roles-list.png differ diff --git a/audit/05-exchange-detail-err.png b/audit/05-exchange-detail-err.png new file mode 100644 index 00000000..50d089eb Binary files /dev/null and b/audit/05-exchange-detail-err.png differ diff --git a/audit/05-user-detail-admin.png b/audit/05-user-detail-admin.png new file mode 100644 index 00000000..957fb9d0 Binary files /dev/null and b/audit/05-user-detail-admin.png differ diff --git a/audit/05-users-roles-page.png b/audit/05-users-roles-page.png new file mode 100644 index 00000000..3fd30a41 Binary files /dev/null and b/audit/05-users-roles-page.png differ diff --git a/audit/06-exchange-detail-err-tab.png b/audit/06-exchange-detail-err-tab.png new file mode 100644 index 00000000..76a999ba Binary files /dev/null and b/audit/06-exchange-detail-err-tab.png differ diff --git a/audit/06-user-detail-admin.png b/audit/06-user-detail-admin.png new file mode 100644 index 00000000..575ae9b1 Binary files /dev/null and b/audit/06-user-detail-admin.png differ diff --git a/audit/07-add-user-dialog.png b/audit/07-add-user-dialog.png new file mode 100644 index 00000000..df6528d3 Binary files /dev/null and b/audit/07-add-user-dialog.png differ diff --git a/audit/07-dashboard-full.png b/audit/07-dashboard-full.png new file mode 100644 index 00000000..249f57f6 Binary files /dev/null and b/audit/07-dashboard-full.png differ diff --git a/audit/07-dashboard-tab.png b/audit/07-dashboard-tab.png new file mode 100644 index 00000000..a722f3e2 Binary files /dev/null and b/audit/07-dashboard-tab.png differ diff --git a/audit/08-dashboard-drilldown-full.png b/audit/08-dashboard-drilldown-full.png new file mode 100644 index 00000000..d8d94357 Binary files /dev/null and b/audit/08-dashboard-drilldown-full.png differ diff --git a/audit/08-dashboard-drilldown.png b/audit/08-dashboard-drilldown.png new file mode 100644 index 00000000..dd7c8cea Binary files /dev/null and b/audit/08-dashboard-drilldown.png differ diff --git a/audit/09-runtime-full.png b/audit/09-runtime-full.png new file mode 100644 index 00000000..abb55975 Binary files /dev/null and b/audit/09-runtime-full.png differ diff --git a/audit/09-runtime-tab.png b/audit/09-runtime-tab.png new file mode 100644 index 00000000..abb55975 Binary files /dev/null and b/audit/09-runtime-tab.png differ diff --git a/audit/09-user-create-filled.png b/audit/09-user-create-filled.png new file mode 100644 index 00000000..d8d94357 Binary files /dev/null and b/audit/09-user-create-filled.png differ diff --git a/audit/10-runtime-agent-detail.png b/audit/10-runtime-agent-detail.png new file mode 100644 index 00000000..8be471ad Binary files /dev/null and b/audit/10-runtime-agent-detail.png differ diff --git a/audit/10-user-create-result.png b/audit/10-user-create-result.png new file mode 100644 index 00000000..83d583c2 Binary files /dev/null and b/audit/10-user-create-result.png differ diff --git a/audit/11-create-app-full.png b/audit/11-create-app-full.png new file mode 100644 index 00000000..ad88d309 Binary files /dev/null and b/audit/11-create-app-full.png differ diff --git a/audit/11-deployments-tab.png b/audit/11-deployments-tab.png new file mode 100644 index 00000000..ad88d309 Binary files /dev/null and b/audit/11-deployments-tab.png differ diff --git a/audit/11-rbac-after-create.png b/audit/11-rbac-after-create.png new file mode 100644 index 00000000..e86dd523 Binary files /dev/null and b/audit/11-rbac-after-create.png differ diff --git a/audit/12-deployments-list.png b/audit/12-deployments-list.png new file mode 100644 index 00000000..6f5ae794 Binary files /dev/null and b/audit/12-deployments-list.png differ diff --git a/audit/12-user-create-attempt2.png b/audit/12-user-create-attempt2.png new file mode 100644 index 00000000..d90b94f5 Binary files /dev/null and b/audit/12-user-create-attempt2.png differ diff --git a/audit/13-deployment-detail.png b/audit/13-deployment-detail.png new file mode 100644 index 00000000..486e6f83 Binary files /dev/null and b/audit/13-deployment-detail.png differ diff --git a/audit/13-groups-tab.png b/audit/13-groups-tab.png new file mode 100644 index 00000000..7e98dc09 Binary files /dev/null and b/audit/13-groups-tab.png differ diff --git a/audit/14-command-palette.png b/audit/14-command-palette.png new file mode 100644 index 00000000..4ab57db2 Binary files /dev/null and b/audit/14-command-palette.png differ diff --git a/audit/14-roles-tab.png b/audit/14-roles-tab.png new file mode 100644 index 00000000..a34a4fb3 Binary files /dev/null and b/audit/14-roles-tab.png differ diff --git a/audit/15-audit-log.png b/audit/15-audit-log.png new file mode 100644 index 00000000..cedc6b05 Binary files /dev/null and b/audit/15-audit-log.png differ diff --git a/audit/15-command-palette-search.png b/audit/15-command-palette-search.png new file mode 100644 index 00000000..1312e24d Binary files /dev/null and b/audit/15-command-palette-search.png differ diff --git a/audit/16-clickhouse.png b/audit/16-clickhouse.png new file mode 100644 index 00000000..0122e679 Binary files /dev/null and b/audit/16-clickhouse.png differ diff --git a/audit/16-command-palette-keyboard.png b/audit/16-command-palette-keyboard.png new file mode 100644 index 00000000..49d9520d Binary files /dev/null and b/audit/16-command-palette-keyboard.png differ diff --git a/audit/17-dark-mode-exchanges.png b/audit/17-dark-mode-exchanges.png new file mode 100644 index 00000000..2dd562ec Binary files /dev/null and b/audit/17-dark-mode-exchanges.png differ diff --git a/audit/17-database.png b/audit/17-database.png new file mode 100644 index 00000000..fea0d488 Binary files /dev/null and b/audit/17-database.png differ diff --git a/audit/18-dark-mode-dashboard.png b/audit/18-dark-mode-dashboard.png new file mode 100644 index 00000000..6f686fa8 Binary files /dev/null and b/audit/18-dark-mode-dashboard.png differ diff --git a/audit/18-environments.png b/audit/18-environments.png new file mode 100644 index 00000000..5feda872 Binary files /dev/null and b/audit/18-environments.png differ diff --git a/audit/19-dark-mode-runtime.png b/audit/19-dark-mode-runtime.png new file mode 100644 index 00000000..0790db82 Binary files /dev/null and b/audit/19-dark-mode-runtime.png differ diff --git a/audit/19-oidc-full.png b/audit/19-oidc-full.png new file mode 100644 index 00000000..6ce4912f Binary files /dev/null and b/audit/19-oidc-full.png differ diff --git a/audit/19-oidc.png b/audit/19-oidc.png new file mode 100644 index 00000000..0d59cc9c Binary files /dev/null and b/audit/19-oidc.png differ diff --git a/audit/20-deployments-tab.png b/audit/20-deployments-tab.png new file mode 100644 index 00000000..ecc32189 Binary files /dev/null and b/audit/20-deployments-tab.png differ diff --git a/audit/20-sidebar-expanded.png b/audit/20-sidebar-expanded.png new file mode 100644 index 00000000..a4f52102 Binary files /dev/null and b/audit/20-sidebar-expanded.png differ diff --git a/audit/21-environment-detail.png b/audit/21-environment-detail.png new file mode 100644 index 00000000..cdc49db6 Binary files /dev/null and b/audit/21-environment-detail.png differ diff --git a/audit/21-time-range-3h.png b/audit/21-time-range-3h.png new file mode 100644 index 00000000..b3fb981c Binary files /dev/null and b/audit/21-time-range-3h.png differ diff --git a/audit/22-create-app.png b/audit/22-create-app.png new file mode 100644 index 00000000..fa2fb53a Binary files /dev/null and b/audit/22-create-app.png differ diff --git a/audit/22-env-development.png b/audit/22-env-development.png new file mode 100644 index 00000000..94beeb27 Binary files /dev/null and b/audit/22-env-development.png differ diff --git a/audit/23-app-detail.png b/audit/23-app-detail.png new file mode 100644 index 00000000..9d958325 Binary files /dev/null and b/audit/23-app-detail.png differ diff --git a/audit/23-sorting-route.png b/audit/23-sorting-route.png new file mode 100644 index 00000000..30146667 Binary files /dev/null and b/audit/23-sorting-route.png differ diff --git a/audit/24-runtime-agent-detail-full.png b/audit/24-runtime-agent-detail-full.png new file mode 100644 index 00000000..7ccab806 Binary files /dev/null and b/audit/24-runtime-agent-detail-full.png differ diff --git a/audit/24-runtime-tab.png b/audit/24-runtime-tab.png new file mode 100644 index 00000000..2815e400 Binary files /dev/null and b/audit/24-runtime-tab.png differ diff --git a/audit/25-app-detail.png b/audit/25-app-detail.png new file mode 100644 index 00000000..dc4f16ba Binary files /dev/null and b/audit/25-app-detail.png differ diff --git a/audit/25-dashboard-tab.png b/audit/25-dashboard-tab.png new file mode 100644 index 00000000..b7872451 Binary files /dev/null and b/audit/25-dashboard-tab.png differ diff --git a/audit/26-app-overview.png b/audit/26-app-overview.png new file mode 100644 index 00000000..9acadb38 Binary files /dev/null and b/audit/26-app-overview.png differ diff --git a/audit/26-oidc-delete-confirm.png b/audit/26-oidc-delete-confirm.png new file mode 100644 index 00000000..d7b938e7 Binary files /dev/null and b/audit/26-oidc-delete-confirm.png differ diff --git a/audit/27-exchange-err-error-tab.png b/audit/27-exchange-err-error-tab.png new file mode 100644 index 00000000..2fdc8bea Binary files /dev/null and b/audit/27-exchange-err-error-tab.png differ diff --git a/audit/admin-lifecycle-findings.md b/audit/admin-lifecycle-findings.md index fa2039d5..b504ea4b 100644 --- a/audit/admin-lifecycle-findings.md +++ b/audit/admin-lifecycle-findings.md @@ -1,4 +1,4 @@ -# Cameleer3 Admin UI UX Audit +# Cameleer Admin UI UX Audit **Date:** 2026-04-09 **Auditor:** Claude (automated) @@ -9,7 +9,7 @@ ## Executive Summary -The Cameleer3 UI is generally well-built with consistent styling, good information density, and a clear layout. However, there are several **Critical** bugs that prevent core CRUD operations from working, and a few **Important** UX issues that reduce clarity and usability. +The Cameleer UI is generally well-built with consistent styling, good information density, and a clear layout. However, there are several **Critical** bugs that prevent core CRUD operations from working, and a few **Important** UX issues that reduce clarity and usability. **Critical issues:** 3 **Important issues:** 7 diff --git a/audit/design-consistency-findings.md b/audit/design-consistency-findings.md index fd616bec..807559a8 100644 --- a/audit/design-consistency-findings.md +++ b/audit/design-consistency-findings.md @@ -1,8 +1,8 @@ -# Design Consistency Audit — Cameleer3 UI +# Design Consistency Audit — Cameleer UI **Audited**: 2026-04-09 **Scope**: All pages under `ui/src/pages/` -**Base path**: `C:/Users/Hendrik/Documents/projects/cameleer3-server/ui/src/` +**Base path**: `C:/Users/Hendrik/Documents/projects/cameleer-server/ui/src/` ## Shared Layout Infrastructure diff --git a/audit/interaction-patterns-findings.md b/audit/interaction-patterns-findings.md index 390f09be..96d46737 100644 --- a/audit/interaction-patterns-findings.md +++ b/audit/interaction-patterns-findings.md @@ -1,4 +1,4 @@ -# Cameleer3 UI Interaction Patterns Audit +# Cameleer UI Interaction Patterns Audit Audit date: 2026-04-09 Scope: All `.tsx` files under `ui/src/pages/` and `ui/src/components/` diff --git a/audit/monitoring-pages-findings.md b/audit/monitoring-pages-findings.md index 683f4f3a..a8934151 100644 --- a/audit/monitoring-pages-findings.md +++ b/audit/monitoring-pages-findings.md @@ -1,4 +1,4 @@ -# Cameleer3 Web UI - UX Audit Findings +# Cameleer Web UI - UX Audit Findings **Date:** 2026-04-09 **URL:** https://desktop-fb5vgj9.siegeln.internal/server/ diff --git a/audit/verify-01-exchanges.png b/audit/verify-01-exchanges.png new file mode 100644 index 00000000..1dcf962b Binary files /dev/null and b/audit/verify-01-exchanges.png differ diff --git a/audit/verify-02-apps-list.png b/audit/verify-02-apps-list.png new file mode 100644 index 00000000..bb3530f3 Binary files /dev/null and b/audit/verify-02-apps-list.png differ diff --git a/audit/verify-03-app-detail.png b/audit/verify-03-app-detail.png new file mode 100644 index 00000000..41e1134c Binary files /dev/null and b/audit/verify-03-app-detail.png differ diff --git a/audit/verify-04-oidc.png b/audit/verify-04-oidc.png new file mode 100644 index 00000000..07444dc0 Binary files /dev/null and b/audit/verify-04-oidc.png differ diff --git a/audit/verify-05-runtime.png b/audit/verify-05-runtime.png new file mode 100644 index 00000000..567f67d3 Binary files /dev/null and b/audit/verify-05-runtime.png differ diff --git a/audit/verify-06-agent-detail.png b/audit/verify-06-agent-detail.png new file mode 100644 index 00000000..10e2710c Binary files /dev/null and b/audit/verify-06-agent-detail.png differ diff --git a/audit/verify-07-deployments-redirect.png b/audit/verify-07-deployments-redirect.png new file mode 100644 index 00000000..d01d2cc5 Binary files /dev/null and b/audit/verify-07-deployments-redirect.png differ diff --git a/cameleer3-server-app/pom.xml b/cameleer-server-app/pom.xml similarity index 96% rename from cameleer3-server-app/pom.xml rename to cameleer-server-app/pom.xml index 70594769..b828c850 100644 --- a/cameleer3-server-app/pom.xml +++ b/cameleer-server-app/pom.xml @@ -5,19 +5,19 @@ 4.0.0 - com.cameleer3 - cameleer3-server-parent + com.cameleer + cameleer-server-parent 1.0-SNAPSHOT - cameleer3-server-app - Cameleer3 Server App + cameleer-server-app + Cameleer Server App Spring Boot web app with REST controllers and SSE - com.cameleer3 - cameleer3-server-core + com.cameleer + cameleer-server-core org.springframework.boot diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/.gitkeep b/cameleer-server-app/src/main/java/com/cameleer/server/app/.gitkeep similarity index 100% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/.gitkeep rename to cameleer-server-app/src/main/java/com/cameleer/server/app/.gitkeep diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/Cameleer3ServerApplication.java similarity index 53% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/Cameleer3ServerApplication.java index 1232f754..9f0f04aa 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/Cameleer3ServerApplication.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/Cameleer3ServerApplication.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app; +package com.cameleer.server.app; -import com.cameleer3.server.app.config.AgentRegistryConfig; -import com.cameleer3.server.app.config.IngestionConfig; +import com.cameleer.server.app.config.AgentRegistryConfig; +import com.cameleer.server.app.config.IngestionConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -9,20 +9,20 @@ import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; /** - * Main entry point for the Cameleer3 Server application. + * Main entry point for the Cameleer Server application. *

- * Scans {@code com.cameleer3.server.app} and {@code com.cameleer3.server.core} packages. + * Scans {@code com.cameleer.server.app} and {@code com.cameleer.server.core} packages. */ @SpringBootApplication(scanBasePackages = { - "com.cameleer3.server.app", - "com.cameleer3.server.core" + "com.cameleer.server.app", + "com.cameleer.server.core" }) @EnableAsync @EnableScheduling @EnableConfigurationProperties({IngestionConfig.class, AgentRegistryConfig.class}) -public class Cameleer3ServerApplication { +public class CameleerServerApplication { public static void main(String[] args) { - SpringApplication.run(Cameleer3ServerApplication.class, args); + SpringApplication.run(CameleerServerApplication.class, args); } } diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/AgentLifecycleMonitor.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/agent/AgentLifecycleMonitor.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/AgentLifecycleMonitor.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/agent/AgentLifecycleMonitor.java index d2cec6c6..4abb88da 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/AgentLifecycleMonitor.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/agent/AgentLifecycleMonitor.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.agent; +package com.cameleer.server.app.agent; -import com.cameleer3.server.app.metrics.ServerMetrics; -import com.cameleer3.server.core.agent.AgentEventService; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.AgentState; +import com.cameleer.server.app.metrics.ServerMetrics; +import com.cameleer.server.core.agent.AgentEventService; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.AgentState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java similarity index 95% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java index 1ffcdba3..ff38dd2c 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SseConnectionManager.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SseConnectionManager.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.agent; +package com.cameleer.server.app.agent; -import com.cameleer3.server.app.config.AgentRegistryConfig; -import com.cameleer3.server.core.agent.AgentCommand; -import com.cameleer3.server.core.agent.AgentEventListener; -import com.cameleer3.server.core.agent.AgentRegistryService; +import com.cameleer.server.app.config.AgentRegistryConfig; +import com.cameleer.server.core.agent.AgentCommand; +import com.cameleer.server.core.agent.AgentEventListener; +import com.cameleer.server.core.agent.AgentRegistryService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.PostConstruct; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SsePayloadSigner.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SsePayloadSigner.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SsePayloadSigner.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SsePayloadSigner.java index e08f124e..61c644d9 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/agent/SsePayloadSigner.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/agent/SsePayloadSigner.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.agent; +package com.cameleer.server.app.agent; -import com.cameleer3.server.core.security.Ed25519SigningService; +import com.cameleer.server.core.security.Ed25519SigningService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/analytics/UsageFlushScheduler.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/analytics/UsageFlushScheduler.java similarity index 86% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/analytics/UsageFlushScheduler.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/analytics/UsageFlushScheduler.java index d7a81023..a5d474b3 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/analytics/UsageFlushScheduler.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/analytics/UsageFlushScheduler.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.analytics; +package com.cameleer.server.app.analytics; -import com.cameleer3.server.app.storage.ClickHouseUsageTracker; +import com.cameleer.server.app.storage.ClickHouseUsageTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/analytics/UsageTrackingInterceptor.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/analytics/UsageTrackingInterceptor.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/analytics/UsageTrackingInterceptor.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/analytics/UsageTrackingInterceptor.java index 894b1f1d..15c915f8 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/analytics/UsageTrackingInterceptor.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/analytics/UsageTrackingInterceptor.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.analytics; +package com.cameleer.server.app.analytics; -import com.cameleer3.server.core.analytics.UsageEvent; -import com.cameleer3.server.core.analytics.UsageTracker; +import com.cameleer.server.core.analytics.UsageEvent; +import com.cameleer.server.core.analytics.UsageTracker; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.security.core.Authentication; @@ -28,7 +28,7 @@ public class UsageTrackingInterceptor implements HandlerInterceptor { "/[0-9a-f]{32,64}(?=/|$)", Pattern.CASE_INSENSITIVE); private static final Pattern NUMERIC_ID = Pattern.compile( "(?<=/)(\\d{2,})(?=/|$)"); - // Agent instance IDs like "cameleer3-sample-598867949d-g7nt4-1" + // Agent instance IDs like "cameleer-sample-598867949d-g7nt4-1" private static final Pattern INSTANCE_ID = Pattern.compile( "(?<=/agents/)[^/]+(?=/)", Pattern.CASE_INSENSITIVE); diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryBeanConfig.java similarity index 76% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryBeanConfig.java index 1b46e6a1..aeda9f9e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryBeanConfig.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.core.agent.AgentEventRepository; -import com.cameleer3.server.core.agent.AgentEventService; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.RouteStateRegistry; +import com.cameleer.server.core.agent.AgentEventRepository; +import com.cameleer.server.core.agent.AgentEventService; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.RouteStateRegistry; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryConfig.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryConfig.java index 84553962..09607f8b 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/AgentRegistryConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/AgentRegistryConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java index 9aafc450..03f76d31 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import com.zaxxer.hikari.HikariDataSource; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseProperties.java similarity index 95% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseProperties.java index 82290d78..79eba5a6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseProperties.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseProperties.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseSchemaInitializer.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseSchemaInitializer.java index 85171872..125d6485 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseSchemaInitializer.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/DiagramBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/DiagramBeanConfig.java similarity index 66% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/DiagramBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/DiagramBeanConfig.java index 1d847215..3a0ee798 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/DiagramBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/DiagramBeanConfig.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.app.diagram.ElkDiagramRenderer; -import com.cameleer3.server.core.diagram.DiagramRenderer; +import com.cameleer.server.app.diagram.ElkDiagramRenderer; +import com.cameleer.server.core.diagram.DiagramRenderer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java similarity index 70% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java index 8f30536b..776b2d3e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.core.ingestion.BufferedLogEntry; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.ingestion.WriteBuffer; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.core.ingestion.BufferedLogEntry; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.ingestion.WriteBuffer; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -12,7 +12,7 @@ import org.springframework.context.annotation.Configuration; * Creates write buffer beans for the ingestion pipeline. *

* Each {@link WriteBuffer} instance is shared between the - * {@link com.cameleer3.server.core.ingestion.IngestionService} (producer side) + * {@link com.cameleer.server.core.ingestion.IngestionService} (producer side) * and the flush scheduler (consumer side). */ @Configuration diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java index 428209a4..84f52e43 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/LicenseBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/LicenseBeanConfig.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/LicenseBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/LicenseBeanConfig.java index e0cbc7a1..41717c88 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/LicenseBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/LicenseBeanConfig.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.core.license.LicenseGate; -import com.cameleer3.server.core.license.LicenseInfo; -import com.cameleer3.server.core.license.LicenseValidator; +import com.cameleer.server.core.license.LicenseGate; +import com.cameleer.server.core.license.LicenseInfo; +import com.cameleer.server.core.license.LicenseValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenApiConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenApiConfig.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenApiConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenApiConfig.java index a1547f41..7bd95ace 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenApiConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenApiConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.security.SecurityScheme; @@ -40,7 +40,7 @@ public class OpenApiConfig { @Bean public OpenAPI openAPI() { return new OpenAPI() - .info(new Info().title("Cameleer3 Server API").version("1.0")) + .info(new Info().title("Cameleer Server API").version("1.0")) .addSecurityItem(new SecurityRequirement().addList("bearer")) .servers(List.of(new Server().url("/api/v1").description("Relative"))); } diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/RbacBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/RbacBeanConfig.java similarity index 74% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/RbacBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/RbacBeanConfig.java index 3cd5b0f1..a1e20383 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/RbacBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/RbacBeanConfig.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.app.storage.PostgresClaimMappingRepository; -import com.cameleer3.server.core.rbac.ClaimMappingRepository; -import com.cameleer3.server.core.rbac.ClaimMappingService; +import com.cameleer.server.app.storage.PostgresClaimMappingRepository; +import com.cameleer.server.core.rbac.ClaimMappingRepository; +import com.cameleer.server.core.rbac.ClaimMappingService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/RuntimeBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/RuntimeBeanConfig.java similarity index 76% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/RuntimeBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/RuntimeBeanConfig.java index 52778922..4de4e48c 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/RuntimeBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/RuntimeBeanConfig.java @@ -1,16 +1,16 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.app.storage.PostgresAppRepository; -import com.cameleer3.server.app.storage.PostgresAppVersionRepository; -import com.cameleer3.server.app.storage.PostgresDeploymentRepository; -import com.cameleer3.server.app.storage.PostgresEnvironmentRepository; -import com.cameleer3.server.core.runtime.AppRepository; -import com.cameleer3.server.core.runtime.AppService; -import com.cameleer3.server.core.runtime.AppVersionRepository; -import com.cameleer3.server.core.runtime.DeploymentRepository; -import com.cameleer3.server.core.runtime.DeploymentService; -import com.cameleer3.server.core.runtime.EnvironmentRepository; -import com.cameleer3.server.core.runtime.EnvironmentService; +import com.cameleer.server.app.storage.PostgresAppRepository; +import com.cameleer.server.app.storage.PostgresAppVersionRepository; +import com.cameleer.server.app.storage.PostgresDeploymentRepository; +import com.cameleer.server.app.storage.PostgresEnvironmentRepository; +import com.cameleer.server.core.runtime.AppRepository; +import com.cameleer.server.core.runtime.AppService; +import com.cameleer.server.core.runtime.AppVersionRepository; +import com.cameleer.server.core.runtime.DeploymentRepository; +import com.cameleer.server.core.runtime.DeploymentService; +import com.cameleer.server.core.runtime.EnvironmentRepository; +import com.cameleer.server.core.runtime.EnvironmentService; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java similarity index 64% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java index e722f0a8..c42917e5 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.core.search.SearchService; -import com.cameleer3.server.core.storage.SearchIndex; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.core.search.SearchService; +import com.cameleer.server.core.storage.SearchIndex; +import com.cameleer.server.core.storage.StatsStore; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ServerCapabilitiesHealthIndicator.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/ServerCapabilitiesHealthIndicator.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ServerCapabilitiesHealthIndicator.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/ServerCapabilitiesHealthIndicator.java index 1ddd454b..b8d275b6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ServerCapabilitiesHealthIndicator.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/ServerCapabilitiesHealthIndicator.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.actuate.health.Health; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java similarity index 76% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java index e203db2b..943f5534 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java @@ -1,32 +1,32 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.app.metrics.ServerMetrics; -import com.cameleer3.server.app.search.ClickHouseLogStore; -import com.cameleer3.server.app.storage.ClickHouseAgentEventRepository; -import com.cameleer3.server.app.storage.ClickHouseUsageTracker; -import com.cameleer3.server.app.storage.ClickHouseDiagramStore; -import com.cameleer3.server.app.storage.ClickHouseMetricsQueryStore; -import com.cameleer3.server.app.storage.ClickHouseMetricsStore; -import com.cameleer3.server.app.storage.ClickHouseStatsStore; -import com.cameleer3.server.core.admin.AuditRepository; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.agent.AgentEventRepository; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.detail.DetailService; -import com.cameleer3.server.core.indexing.SearchIndexer; -import com.cameleer3.server.app.ingestion.ExecutionFlushScheduler; -import com.cameleer3.server.app.search.ClickHouseSearchIndex; -import com.cameleer3.server.app.storage.ClickHouseExecutionStore; -import com.cameleer3.server.core.ingestion.BufferedLogEntry; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.IngestionService; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.ingestion.WriteBuffer; -import com.cameleer3.server.core.storage.*; -import com.cameleer3.server.core.storage.LogIndex; -import com.cameleer3.server.core.storage.StatsStore; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.app.metrics.ServerMetrics; +import com.cameleer.server.app.search.ClickHouseLogStore; +import com.cameleer.server.app.storage.ClickHouseAgentEventRepository; +import com.cameleer.server.app.storage.ClickHouseUsageTracker; +import com.cameleer.server.app.storage.ClickHouseDiagramStore; +import com.cameleer.server.app.storage.ClickHouseMetricsQueryStore; +import com.cameleer.server.app.storage.ClickHouseMetricsStore; +import com.cameleer.server.app.storage.ClickHouseStatsStore; +import com.cameleer.server.core.admin.AuditRepository; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.agent.AgentEventRepository; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.detail.DetailService; +import com.cameleer.server.core.indexing.SearchIndexer; +import com.cameleer.server.app.ingestion.ExecutionFlushScheduler; +import com.cameleer.server.app.search.ClickHouseSearchIndex; +import com.cameleer.server.app.storage.ClickHouseExecutionStore; +import com.cameleer.server.core.ingestion.BufferedLogEntry; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.IngestionService; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.ingestion.WriteBuffer; +import com.cameleer.server.core.storage.*; +import com.cameleer.server.core.storage.LogIndex; +import com.cameleer.server.core.storage.StatsStore; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -170,18 +170,18 @@ public class StorageBeanConfig { TenantProperties tenantProperties, @Qualifier("clickHouseJdbcTemplate") JdbcTemplate clickHouseJdbc) { return new ClickHouseUsageTracker(tenantProperties.getId(), clickHouseJdbc, - new com.cameleer3.server.core.ingestion.WriteBuffer<>(5000)); + new com.cameleer.server.core.ingestion.WriteBuffer<>(5000)); } @Bean - public com.cameleer3.server.app.analytics.UsageTrackingInterceptor usageTrackingInterceptor( + public com.cameleer.server.app.analytics.UsageTrackingInterceptor usageTrackingInterceptor( ClickHouseUsageTracker usageTracker) { - return new com.cameleer3.server.app.analytics.UsageTrackingInterceptor(usageTracker); + return new com.cameleer.server.app.analytics.UsageTrackingInterceptor(usageTracker); } @Bean - public com.cameleer3.server.app.analytics.UsageFlushScheduler usageFlushScheduler( + public com.cameleer.server.app.analytics.UsageFlushScheduler usageFlushScheduler( ClickHouseUsageTracker usageTracker) { - return new com.cameleer3.server.app.analytics.UsageFlushScheduler(usageTracker); + return new com.cameleer.server.app.analytics.UsageFlushScheduler(usageTracker); } } diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/TenantProperties.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/TenantProperties.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/TenantProperties.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/TenantProperties.java index 31752e62..476cfb70 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/TenantProperties.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/TenantProperties.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java index 160dbe54..b99820d6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/WebConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/config/WebConfig.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.app.analytics.UsageTrackingInterceptor; -import com.cameleer3.server.app.interceptor.AuditInterceptor; -import com.cameleer3.server.app.interceptor.ProtocolVersionInterceptor; +import com.cameleer.server.app.analytics.UsageTrackingInterceptor; +import com.cameleer.server.app.interceptor.AuditInterceptor; +import com.cameleer.server.app.interceptor.ProtocolVersionInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java index 336e7bc1..5f219f32 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java @@ -1,23 +1,23 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.agent.SseConnectionManager; -import com.cameleer3.server.app.dto.CommandAckRequest; -import com.cameleer3.server.app.dto.CommandBroadcastResponse; -import com.cameleer3.server.app.dto.CommandGroupResponse; -import com.cameleer3.server.app.dto.CommandRequest; -import com.cameleer3.server.app.dto.CommandSingleResponse; -import com.cameleer3.server.app.dto.ReplayRequest; -import com.cameleer3.server.app.dto.ReplayResponse; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.agent.AgentCommand; -import com.cameleer3.server.core.agent.AgentEventService; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.AgentState; -import com.cameleer3.server.core.agent.CommandReply; -import com.cameleer3.server.core.agent.CommandType; +import com.cameleer.server.app.agent.SseConnectionManager; +import com.cameleer.server.app.dto.CommandAckRequest; +import com.cameleer.server.app.dto.CommandBroadcastResponse; +import com.cameleer.server.app.dto.CommandGroupResponse; +import com.cameleer.server.app.dto.CommandRequest; +import com.cameleer.server.app.dto.CommandSingleResponse; +import com.cameleer.server.app.dto.ReplayRequest; +import com.cameleer.server.app.dto.ReplayResponse; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.agent.AgentCommand; +import com.cameleer.server.core.agent.AgentEventService; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.AgentState; +import com.cameleer.server.core.agent.CommandReply; +import com.cameleer.server.core.agent.CommandType; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentEventsController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentEventsController.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentEventsController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentEventsController.java index 9bf542ad..36214d7a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentEventsController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentEventsController.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.AgentEventResponse; -import com.cameleer3.server.core.agent.AgentEventService; +import com.cameleer.server.app.dto.AgentEventResponse; +import com.cameleer.server.core.agent.AgentEventService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java similarity index 86% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java index 5b1d4752..640afde6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java @@ -1,9 +1,9 @@ -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; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java index e4017fdd..78798efd 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java @@ -1,26 +1,26 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.config.AgentRegistryConfig; -import com.cameleer3.server.app.dto.AgentInstanceResponse; -import com.cameleer3.server.app.dto.AgentRefreshRequest; -import com.cameleer3.server.app.dto.AgentRefreshResponse; -import com.cameleer3.server.app.dto.AgentRegistrationRequest; -import com.cameleer3.server.app.dto.AgentRegistrationResponse; -import com.cameleer3.server.app.dto.ErrorResponse; -import com.cameleer3.common.model.HeartbeatRequest; -import com.cameleer3.server.app.security.BootstrapTokenValidator; -import com.cameleer3.server.app.security.JwtAuthenticationFilter; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.agent.AgentEventService; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.AgentState; -import com.cameleer3.server.core.agent.RouteStateRegistry; -import com.cameleer3.server.core.security.Ed25519SigningService; -import com.cameleer3.server.core.security.InvalidTokenException; -import com.cameleer3.server.core.security.JwtService; +import com.cameleer.server.app.config.AgentRegistryConfig; +import com.cameleer.server.app.dto.AgentInstanceResponse; +import com.cameleer.server.app.dto.AgentRefreshRequest; +import com.cameleer.server.app.dto.AgentRefreshResponse; +import com.cameleer.server.app.dto.AgentRegistrationRequest; +import com.cameleer.server.app.dto.AgentRegistrationResponse; +import com.cameleer.server.app.dto.ErrorResponse; +import com.cameleer.common.model.HeartbeatRequest; +import com.cameleer.server.app.security.BootstrapTokenValidator; +import com.cameleer.server.app.security.JwtAuthenticationFilter; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.agent.AgentEventService; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.AgentState; +import com.cameleer.server.core.agent.RouteStateRegistry; +import com.cameleer.server.core.security.Ed25519SigningService; +import com.cameleer.server.core.security.InvalidTokenException; +import com.cameleer.server.core.security.JwtService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java index 94dd0735..d92c4fe7 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentSseController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentSseController.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.agent.SseConnectionManager; -import com.cameleer3.server.app.security.JwtAuthenticationFilter; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.security.JwtService; +import com.cameleer.server.app.agent.SseConnectionManager; +import com.cameleer.server.app.security.JwtAuthenticationFilter; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.security.JwtService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.responses.ApiResponse; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ApiExceptionHandler.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ApiExceptionHandler.java similarity index 88% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ApiExceptionHandler.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ApiExceptionHandler.java index 5585f279..aba52b29 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ApiExceptionHandler.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ApiExceptionHandler.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.ErrorResponse; +import com.cameleer.server.app.dto.ErrorResponse; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppController.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppController.java index 559d32a4..3b3c778a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppController.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.runtime.App; -import com.cameleer3.server.core.runtime.AppService; -import com.cameleer3.server.core.runtime.AppVersion; -import com.cameleer3.server.core.runtime.RuntimeType; +import com.cameleer.server.core.runtime.App; +import com.cameleer.server.core.runtime.AppService; +import com.cameleer.server.core.runtime.AppVersion; +import com.cameleer.server.core.runtime.RuntimeType; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppSettingsController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppSettingsController.java similarity index 89% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppSettingsController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppSettingsController.java index 4d5ee267..7c71b5bf 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppSettingsController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppSettingsController.java @@ -1,11 +1,11 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.AppSettingsRequest; -import com.cameleer3.server.core.admin.AppSettings; -import com.cameleer3.server.core.admin.AppSettingsRepository; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; +import com.cameleer.server.app.dto.AppSettingsRequest; +import com.cameleer.server.core.admin.AppSettings; +import com.cameleer.server.core.admin.AppSettingsRepository; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ApplicationConfigController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ApplicationConfigController.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ApplicationConfigController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ApplicationConfigController.java index 29242404..503b40bb 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ApplicationConfigController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ApplicationConfigController.java @@ -1,24 +1,24 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.common.model.ApplicationConfig; -import com.cameleer3.server.app.dto.AppConfigResponse; -import com.cameleer3.server.app.dto.CommandGroupResponse; -import com.cameleer3.server.app.dto.ConfigUpdateResponse; -import com.cameleer3.server.app.dto.TestExpressionRequest; -import com.cameleer3.server.app.dto.TestExpressionResponse; -import com.cameleer3.server.app.storage.PostgresApplicationConfigRepository; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.admin.SensitiveKeysConfig; -import com.cameleer3.server.core.admin.SensitiveKeysMerger; -import com.cameleer3.server.core.admin.SensitiveKeysRepository; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.AgentState; -import com.cameleer3.server.core.agent.CommandReply; -import com.cameleer3.server.core.agent.CommandType; -import com.cameleer3.server.core.storage.DiagramStore; +import com.cameleer.common.model.ApplicationConfig; +import com.cameleer.server.app.dto.AppConfigResponse; +import com.cameleer.server.app.dto.CommandGroupResponse; +import com.cameleer.server.app.dto.ConfigUpdateResponse; +import com.cameleer.server.app.dto.TestExpressionRequest; +import com.cameleer.server.app.dto.TestExpressionResponse; +import com.cameleer.server.app.storage.PostgresApplicationConfigRepository; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.admin.SensitiveKeysConfig; +import com.cameleer.server.core.admin.SensitiveKeysMerger; +import com.cameleer.server.core.admin.SensitiveKeysRepository; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.AgentState; +import com.cameleer.server.core.agent.CommandReply; +import com.cameleer.server.core.agent.CommandType; +import com.cameleer.server.core.storage.DiagramStore; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.Operation; @@ -203,7 +203,7 @@ public class ApplicationConfigController { /** * Extracts sensitiveKeys from ApplicationConfig via JsonNode to avoid compile-time - * dependency on getSensitiveKeys() which may not be in the published cameleer3-common jar yet. + * dependency on getSensitiveKeys() which may not be in the published cameleer-common jar yet. */ private List extractSensitiveKeys(ApplicationConfig config) { try { diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AuditLogController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AuditLogController.java similarity index 86% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AuditLogController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AuditLogController.java index 92bcb7ac..edf01d48 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AuditLogController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AuditLogController.java @@ -1,12 +1,12 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.AuditLogPageResponse; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditRepository; -import com.cameleer3.server.core.admin.AuditRepository.AuditPage; -import com.cameleer3.server.core.admin.AuditRepository.AuditQuery; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; +import com.cameleer.server.app.dto.AuditLogPageResponse; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditRepository; +import com.cameleer.server.core.admin.AuditRepository.AuditPage; +import com.cameleer.server.core.admin.AuditRepository.AuditQuery; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/CatalogController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/CatalogController.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/CatalogController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/CatalogController.java index 09b4a134..8c0b2c1e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/CatalogController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/CatalogController.java @@ -1,16 +1,16 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.config.TenantProperties; -import com.cameleer3.server.app.dto.AgentSummary; -import com.cameleer3.server.app.dto.CatalogApp; -import com.cameleer3.server.app.dto.RouteSummary; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.AgentState; -import com.cameleer3.server.core.agent.RouteStateRegistry; -import com.cameleer3.server.core.runtime.*; -import com.cameleer3.server.core.storage.DiagramStore; +import com.cameleer.server.app.config.TenantProperties; +import com.cameleer.server.app.dto.AgentSummary; +import com.cameleer.server.app.dto.CatalogApp; +import com.cameleer.server.app.dto.RouteSummary; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.AgentState; +import com.cameleer.server.core.agent.RouteStateRegistry; +import com.cameleer.server.core.runtime.*; +import com.cameleer.server.core.storage.DiagramStore; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ChunkIngestionController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ChunkIngestionController.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ChunkIngestionController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ChunkIngestionController.java index 221c8026..a6571f9a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ChunkIngestionController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ChunkIngestionController.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.common.model.ExecutionChunk; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.common.model.ExecutionChunk; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ClaimMappingAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClaimMappingAdminController.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ClaimMappingAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClaimMappingAdminController.java index 5003b04d..8543e46a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ClaimMappingAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClaimMappingAdminController.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.rbac.ClaimMappingRepository; -import com.cameleer3.server.core.rbac.ClaimMappingRule; -import com.cameleer3.server.core.rbac.ClaimMappingService; +import com.cameleer.server.core.rbac.ClaimMappingRepository; +import com.cameleer.server.core.rbac.ClaimMappingRule; +import com.cameleer.server.core.rbac.ClaimMappingService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ClickHouseAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClickHouseAdminController.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ClickHouseAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClickHouseAdminController.java index 69cbccd5..1cc0e793 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ClickHouseAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClickHouseAdminController.java @@ -1,11 +1,11 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.ClickHousePerformanceResponse; -import com.cameleer3.server.app.dto.ClickHouseQueryInfo; -import com.cameleer3.server.app.dto.ClickHouseStatusResponse; -import com.cameleer3.server.app.dto.ClickHouseTableInfo; -import com.cameleer3.server.app.dto.IndexerPipelineResponse; -import com.cameleer3.server.core.indexing.SearchIndexerStats; +import com.cameleer.server.app.dto.ClickHousePerformanceResponse; +import com.cameleer.server.app.dto.ClickHouseQueryInfo; +import com.cameleer.server.app.dto.ClickHouseStatusResponse; +import com.cameleer.server.app.dto.ClickHouseTableInfo; +import com.cameleer.server.app.dto.IndexerPipelineResponse; +import com.cameleer.server.core.indexing.SearchIndexerStats; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DatabaseAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DatabaseAdminController.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DatabaseAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DatabaseAdminController.java index b8b3eec8..4e2132b7 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DatabaseAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DatabaseAdminController.java @@ -1,12 +1,12 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.ActiveQueryResponse; -import com.cameleer3.server.app.dto.ConnectionPoolResponse; -import com.cameleer3.server.app.dto.DatabaseStatusResponse; -import com.cameleer3.server.app.dto.TableSizeResponse; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; +import com.cameleer.server.app.dto.ActiveQueryResponse; +import com.cameleer.server.app.dto.ConnectionPoolResponse; +import com.cameleer.server.app.dto.DatabaseStatusResponse; +import com.cameleer.server.app.dto.TableSizeResponse; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariPoolMXBean; import io.swagger.v3.oas.annotations.Operation; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DeploymentController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DeploymentController.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DeploymentController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DeploymentController.java index 83e6fbcd..4f7a49ee 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DeploymentController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DeploymentController.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.runtime.DeploymentExecutor; -import com.cameleer3.server.core.runtime.*; +import com.cameleer.server.app.runtime.DeploymentExecutor; +import com.cameleer.server.core.runtime.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java index b2d198e4..ce357486 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.detail.DetailService; -import com.cameleer3.server.core.detail.ExecutionDetail; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.server.core.detail.DetailService; +import com.cameleer.server.core.detail.ExecutionDetail; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramController.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramController.java index 3a447d30..14fb263a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramController.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.ingestion.IngestionService; -import com.cameleer3.server.core.ingestion.TaggedDiagram; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.ingestion.IngestionService; +import com.cameleer.server.core.ingestion.TaggedDiagram; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramRenderController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramRenderController.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramRenderController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramRenderController.java index ee64d282..0213155e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DiagramRenderController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DiagramRenderController.java @@ -1,11 +1,11 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.diagram.DiagramLayout; -import com.cameleer3.server.core.diagram.DiagramRenderer; -import com.cameleer3.server.core.storage.DiagramStore; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.diagram.DiagramLayout; +import com.cameleer.server.core.diagram.DiagramRenderer; +import com.cameleer.server.core.storage.DiagramStore; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EnvironmentAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EnvironmentAdminController.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EnvironmentAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EnvironmentAdminController.java index d3546ec7..fbc57832 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EnvironmentAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EnvironmentAdminController.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.runtime.Environment; -import com.cameleer3.server.core.runtime.EnvironmentService; -import com.cameleer3.server.core.runtime.RuntimeType; +import com.cameleer.server.core.runtime.Environment; +import com.cameleer.server.core.runtime.EnvironmentService; +import com.cameleer.server.core.runtime.RuntimeType; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EventIngestionController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EventIngestionController.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EventIngestionController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EventIngestionController.java index 9a620ade..87de2d17 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EventIngestionController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EventIngestionController.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.common.model.AgentEvent; -import com.cameleer3.server.core.agent.AgentEventService; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.RouteStateRegistry; +import com.cameleer.common.model.AgentEvent; +import com.cameleer.server.core.agent.AgentEventService; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.RouteStateRegistry; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.Operation; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java index 9bf09a15..64294981 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ExecutionController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ExecutionController.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.common.model.RouteExecution; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.IngestionService; +import com.cameleer.common.model.RouteExecution; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.IngestionService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/GroupAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/GroupAdminController.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/GroupAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/GroupAdminController.java index 045eb40e..9bd4b5ee 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/GroupAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/GroupAdminController.java @@ -1,13 +1,13 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.rbac.GroupDetail; -import com.cameleer3.server.core.rbac.GroupRepository; -import com.cameleer3.server.core.rbac.GroupSummary; -import com.cameleer3.server.core.rbac.RbacService; -import com.cameleer3.server.core.rbac.SystemRole; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.rbac.GroupDetail; +import com.cameleer.server.core.rbac.GroupRepository; +import com.cameleer.server.core.rbac.GroupSummary; +import com.cameleer.server.core.rbac.RbacService; +import com.cameleer.server.core.rbac.SystemRole; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LicenseAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LicenseAdminController.java similarity index 89% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LicenseAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LicenseAdminController.java index 2ecffd0e..05557017 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LicenseAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LicenseAdminController.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.license.LicenseGate; -import com.cameleer3.server.core.license.LicenseInfo; -import com.cameleer3.server.core.license.LicenseValidator; +import com.cameleer.server.core.license.LicenseGate; +import com.cameleer.server.core.license.LicenseInfo; +import com.cameleer.server.core.license.LicenseValidator; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Value; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LogIngestionController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LogIngestionController.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LogIngestionController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LogIngestionController.java index 073b9cd9..5690e937 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LogIngestionController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LogIngestionController.java @@ -1,18 +1,18 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.common.model.LogEntry; -import com.cameleer3.server.app.metrics.ServerMetrics; -import com.cameleer3.server.app.security.JwtAuthenticationFilter; -import com.cameleer3.server.core.ingestion.BufferedLogEntry; +import com.cameleer.common.model.LogEntry; +import com.cameleer.server.app.metrics.ServerMetrics; +import com.cameleer.server.app.security.JwtAuthenticationFilter; +import com.cameleer.server.core.ingestion.BufferedLogEntry; import java.util.List; -import com.cameleer3.server.core.ingestion.WriteBuffer; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.security.JwtService.JwtValidationResult; +import com.cameleer.server.core.ingestion.WriteBuffer; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.security.JwtService.JwtValidationResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import com.cameleer3.server.app.config.TenantProperties; +import com.cameleer.server.app.config.TenantProperties; import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LogQueryController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LogQueryController.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LogQueryController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LogQueryController.java index 46ff9100..1fb6890e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/LogQueryController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/LogQueryController.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.LogEntryResponse; -import com.cameleer3.server.app.dto.LogSearchPageResponse; -import com.cameleer3.server.core.search.LogSearchRequest; -import com.cameleer3.server.core.search.LogSearchResponse; -import com.cameleer3.server.core.storage.LogIndex; +import com.cameleer.server.app.dto.LogEntryResponse; +import com.cameleer.server.app.dto.LogSearchPageResponse; +import com.cameleer.server.core.search.LogSearchRequest; +import com.cameleer.server.core.search.LogSearchResponse; +import com.cameleer.server.core.storage.LogIndex; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/MetricsController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/MetricsController.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/MetricsController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/MetricsController.java index 203cb56d..f3c969d8 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/MetricsController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/MetricsController.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.ingestion.IngestionService; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.core.ingestion.IngestionService; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/OidcConfigAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/OidcConfigAdminController.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/OidcConfigAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/OidcConfigAdminController.java index 4eb7a427..a82c61d0 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/OidcConfigAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/OidcConfigAdminController.java @@ -1,15 +1,15 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.ErrorResponse; -import com.cameleer3.server.app.dto.OidcAdminConfigRequest; -import com.cameleer3.server.app.dto.OidcAdminConfigResponse; -import com.cameleer3.server.app.dto.OidcTestResult; -import com.cameleer3.server.app.security.OidcTokenExchanger; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.security.OidcConfig; -import com.cameleer3.server.core.security.OidcConfigRepository; +import com.cameleer.server.app.dto.ErrorResponse; +import com.cameleer.server.app.dto.OidcAdminConfigRequest; +import com.cameleer.server.app.dto.OidcAdminConfigResponse; +import com.cameleer.server.app.dto.OidcTestResult; +import com.cameleer.server.app.security.OidcTokenExchanger; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.security.OidcConfig; +import com.cameleer.server.core.security.OidcConfigRepository; import jakarta.servlet.http.HttpServletRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RbacStatsController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RbacStatsController.java similarity index 88% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RbacStatsController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RbacStatsController.java index cd325d15..844dff77 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RbacStatsController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RbacStatsController.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.rbac.RbacService; -import com.cameleer3.server.core.rbac.RbacStats; +import com.cameleer.server.core.rbac.RbacService; +import com.cameleer.server.core.rbac.RbacStats; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RoleAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RoleAdminController.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RoleAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RoleAdminController.java index cf365812..ec627220 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RoleAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RoleAdminController.java @@ -1,11 +1,11 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.rbac.RoleDetail; -import com.cameleer3.server.core.rbac.RoleRepository; -import com.cameleer3.server.core.rbac.SystemRole; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.rbac.RoleDetail; +import com.cameleer.server.core.rbac.RoleRepository; +import com.cameleer.server.core.rbac.SystemRole; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteCatalogController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteCatalogController.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteCatalogController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteCatalogController.java index 52cc8c14..847900b2 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteCatalogController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteCatalogController.java @@ -1,15 +1,15 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.AgentSummary; -import com.cameleer3.server.app.dto.AppCatalogEntry; -import com.cameleer3.server.app.dto.RouteSummary; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.AgentState; -import com.cameleer3.server.core.agent.RouteStateRegistry; -import com.cameleer3.server.core.storage.DiagramStore; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.app.dto.AgentSummary; +import com.cameleer.server.app.dto.AppCatalogEntry; +import com.cameleer.server.app.dto.RouteSummary; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.AgentState; +import com.cameleer.server.core.agent.RouteStateRegistry; +import com.cameleer.server.core.storage.DiagramStore; +import com.cameleer.server.core.storage.StatsStore; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteMetricsController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteMetricsController.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteMetricsController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteMetricsController.java index e4aa23b8..2dc552df 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteMetricsController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteMetricsController.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.ProcessorMetrics; -import com.cameleer3.server.app.dto.RouteMetrics; -import com.cameleer3.server.core.admin.AppSettings; -import com.cameleer3.server.core.admin.AppSettingsRepository; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.app.dto.ProcessorMetrics; +import com.cameleer.server.app.dto.RouteMetrics; +import com.cameleer.server.core.admin.AppSettings; +import com.cameleer.server.core.admin.AppSettingsRepository; +import com.cameleer.server.core.storage.StatsStore; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java index 63780723..3f235eaa 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SearchController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SearchController.java @@ -1,17 +1,17 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.admin.AppSettings; -import com.cameleer3.server.core.admin.AppSettingsRepository; -import com.cameleer3.server.core.agent.AgentInfo; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.search.ExecutionStats; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.server.core.search.SearchService; -import com.cameleer3.server.core.search.StatsTimeseries; -import com.cameleer3.server.core.search.TopError; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.core.admin.AppSettings; +import com.cameleer.server.core.admin.AppSettingsRepository; +import com.cameleer.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.search.ExecutionStats; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.server.core.search.SearchService; +import com.cameleer.server.core.search.StatsTimeseries; +import com.cameleer.server.core.search.TopError; +import com.cameleer.server.core.storage.StatsStore; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SensitiveKeysAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SensitiveKeysAdminController.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SensitiveKeysAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SensitiveKeysAdminController.java index 06728e3f..6c05c87e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/SensitiveKeysAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/SensitiveKeysAdminController.java @@ -1,19 +1,19 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.common.model.ApplicationConfig; -import com.cameleer3.server.app.dto.CommandGroupResponse; -import com.cameleer3.server.app.dto.SensitiveKeysRequest; -import com.cameleer3.server.app.dto.SensitiveKeysResponse; -import com.cameleer3.server.app.storage.PostgresApplicationConfigRepository; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.admin.SensitiveKeysConfig; -import com.cameleer3.server.core.admin.SensitiveKeysMerger; -import com.cameleer3.server.core.admin.SensitiveKeysRepository; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.CommandReply; -import com.cameleer3.server.core.agent.CommandType; +import com.cameleer.common.model.ApplicationConfig; +import com.cameleer.server.app.dto.CommandGroupResponse; +import com.cameleer.server.app.dto.SensitiveKeysRequest; +import com.cameleer.server.app.dto.SensitiveKeysResponse; +import com.cameleer.server.app.storage.PostgresApplicationConfigRepository; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.admin.SensitiveKeysConfig; +import com.cameleer.server.core.admin.SensitiveKeysMerger; +import com.cameleer.server.core.admin.SensitiveKeysRepository; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.CommandReply; +import com.cameleer.server.core.agent.CommandType; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; @@ -116,7 +116,7 @@ public class SensitiveKeysAdminController { * agents apply it as a partial config update. *

* Per-app keys are read via JsonNode rather than ApplicationConfig.getSensitiveKeys() - * to remain compatible with older published versions of cameleer3-common that may + * to remain compatible with older published versions of cameleer-common that may * not yet include that field accessor. */ private CommandGroupResponse fanOutToAllAgents(List globalKeys) { @@ -198,7 +198,7 @@ public class SensitiveKeysAdminController { /** * Extracts the sensitiveKeys list from an ApplicationConfig by round-tripping through * JsonNode. This avoids a compile-time dependency on ApplicationConfig.getSensitiveKeys() - * which may not be present in older published versions of cameleer3-common. + * which may not be present in older published versions of cameleer-common. */ private List extractSensitiveKeys(ApplicationConfig config) { try { diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ThresholdAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ThresholdAdminController.java similarity index 86% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ThresholdAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ThresholdAdminController.java index 56b34cac..8793305a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ThresholdAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ThresholdAdminController.java @@ -1,11 +1,11 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.ThresholdConfigRequest; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.admin.ThresholdConfig; -import com.cameleer3.server.core.admin.ThresholdRepository; +import com.cameleer.server.app.dto.ThresholdConfigRequest; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.admin.ThresholdConfig; +import com.cameleer.server.core.admin.ThresholdRepository; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UsageAnalyticsController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UsageAnalyticsController.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UsageAnalyticsController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UsageAnalyticsController.java index 104cdb52..f101b57e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UsageAnalyticsController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UsageAnalyticsController.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.storage.ClickHouseUsageTracker; -import com.cameleer3.server.core.analytics.UsageStats; +import com.cameleer.server.app.storage.ClickHouseUsageTracker; +import com.cameleer.server.core.analytics.UsageStats; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java index 4fa57c40..501e4522 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java @@ -1,15 +1,15 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.dto.SetPasswordRequest; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.rbac.RbacService; -import com.cameleer3.server.core.rbac.SystemRole; -import com.cameleer3.server.core.rbac.UserDetail; -import com.cameleer3.server.core.security.PasswordPolicyValidator; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.app.dto.SetPasswordRequest; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.rbac.RbacService; +import com.cameleer.server.core.rbac.SystemRole; +import com.cameleer.server.core.rbac.UserDetail; +import com.cameleer.server.core.security.PasswordPolicyValidator; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; @@ -28,7 +28,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; -import com.cameleer3.server.app.security.SecurityProperties; +import com.cameleer.server.app.security.SecurityProperties; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import java.time.Instant; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/diagram/ElkDiagramRenderer.java similarity index 99% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/diagram/ElkDiagramRenderer.java index 6c846f97..c60c6bea 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/diagram/ElkDiagramRenderer.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/diagram/ElkDiagramRenderer.java @@ -1,13 +1,13 @@ -package com.cameleer3.server.app.diagram; +package com.cameleer.server.app.diagram; -import com.cameleer3.common.graph.NodeType; -import com.cameleer3.common.graph.RouteEdge; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.common.graph.RouteNode; -import com.cameleer3.server.core.diagram.DiagramLayout; -import com.cameleer3.server.core.diagram.DiagramRenderer; -import com.cameleer3.server.core.diagram.PositionedEdge; -import com.cameleer3.server.core.diagram.PositionedNode; +import com.cameleer.common.graph.NodeType; +import com.cameleer.common.graph.RouteEdge; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.common.graph.RouteNode; +import com.cameleer.server.core.diagram.DiagramLayout; +import com.cameleer.server.core.diagram.DiagramRenderer; +import com.cameleer.server.core.diagram.PositionedEdge; +import com.cameleer.server.core.diagram.PositionedNode; import org.eclipse.elk.alg.layered.options.LayeredMetaDataProvider; import org.eclipse.elk.alg.layered.options.NodePlacementStrategy; import org.eclipse.elk.core.RecursiveGraphLayoutEngine; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ActiveQueryResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ActiveQueryResponse.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ActiveQueryResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ActiveQueryResponse.java index 39046869..8c752af7 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ActiveQueryResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ActiveQueryResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentEventResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentEventResponse.java similarity index 87% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentEventResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentEventResponse.java index 7a56b29d..be8803c7 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentEventResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentEventResponse.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; -import com.cameleer3.server.core.agent.AgentEventRecord; +import com.cameleer.server.core.agent.AgentEventRecord; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentInstanceResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentInstanceResponse.java similarity index 95% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentInstanceResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentInstanceResponse.java index 0bc85a6f..c30846b5 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentInstanceResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentInstanceResponse.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; -import com.cameleer3.server.core.agent.AgentInfo; +import com.cameleer.server.core.agent.AgentInfo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentMetricsResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentMetricsResponse.java similarity index 83% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentMetricsResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentMetricsResponse.java index 3f3465e2..a98f1f9f 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentMetricsResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentMetricsResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import java.util.List; import java.util.Map; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRefreshRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRefreshRequest.java similarity index 85% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRefreshRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRefreshRequest.java index 29fce1eb..1414572d 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRefreshRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRefreshRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRefreshResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRefreshResponse.java similarity index 87% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRefreshResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRefreshResponse.java index 70b16476..0870440b 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRefreshResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRefreshResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRegistrationRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRegistrationRequest.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRegistrationRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRegistrationRequest.java index 0e4569bc..1e1ba1f9 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRegistrationRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRegistrationRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRegistrationResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRegistrationResponse.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRegistrationResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRegistrationResponse.java index 498fc430..be518152 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentRegistrationResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentRegistrationResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentSummary.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentSummary.java similarity index 89% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentSummary.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentSummary.java index 89e88a95..a20b1a40 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentSummary.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentSummary.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppCatalogEntry.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppCatalogEntry.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppCatalogEntry.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppCatalogEntry.java index 4393be78..a4baf93d 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppCatalogEntry.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppCatalogEntry.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppConfigResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppConfigResponse.java similarity index 74% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppConfigResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppConfigResponse.java index b1898f1a..1c60c9f5 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppConfigResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppConfigResponse.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; -import com.cameleer3.common.model.ApplicationConfig; +import com.cameleer.common.model.ApplicationConfig; import java.util.List; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppSettingsRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppSettingsRequest.java similarity index 95% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppSettingsRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppSettingsRequest.java index 630b8b16..47846288 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AppSettingsRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AppSettingsRequest.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; -import com.cameleer3.server.core.admin.AppSettings; +import com.cameleer.server.core.admin.AppSettings; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AuditLogPageResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AuditLogPageResponse.java similarity index 85% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AuditLogPageResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AuditLogPageResponse.java index b1b1ea58..91b08d4b 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AuditLogPageResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AuditLogPageResponse.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; -import com.cameleer3.server.core.admin.AuditRecord; +import com.cameleer.server.core.admin.AuditRecord; import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AuthTokenResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AuthTokenResponse.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AuthTokenResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AuthTokenResponse.java index fe327cf2..e94c2a16 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AuthTokenResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AuthTokenResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CatalogApp.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CatalogApp.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CatalogApp.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CatalogApp.java index 2d45d63a..d2a02531 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CatalogApp.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CatalogApp.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHousePerformanceResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHousePerformanceResponse.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHousePerformanceResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHousePerformanceResponse.java index bd9d34fd..88d02a51 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHousePerformanceResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHousePerformanceResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseQueryInfo.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseQueryInfo.java similarity index 87% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseQueryInfo.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseQueryInfo.java index d92595f9..bc09a07b 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseQueryInfo.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseQueryInfo.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseStatusResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseStatusResponse.java similarity index 86% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseStatusResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseStatusResponse.java index 863c47de..2c85c065 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseStatusResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseStatusResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseTableInfo.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseTableInfo.java similarity index 88% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseTableInfo.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseTableInfo.java index b64adeaf..9dfc3015 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ClickHouseTableInfo.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ClickHouseTableInfo.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandAckRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandAckRequest.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandAckRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandAckRequest.java index 2e420b11..a3c69ce6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandAckRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandAckRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; /** * Request body for command acknowledgment from agents. diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandBroadcastResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandBroadcastResponse.java similarity index 89% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandBroadcastResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandBroadcastResponse.java index 9262735d..9abf8126 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandBroadcastResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandBroadcastResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandGroupResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandGroupResponse.java similarity index 87% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandGroupResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandGroupResponse.java index 82a524e3..b1790a21 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandGroupResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandGroupResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import java.util.List; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandRequest.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandRequest.java index b870662c..544f2745 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandSingleResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandSingleResponse.java similarity index 88% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandSingleResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandSingleResponse.java index a2773754..b540d835 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandSingleResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandSingleResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ConfigUpdateResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ConfigUpdateResponse.java similarity index 54% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ConfigUpdateResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ConfigUpdateResponse.java index c55f516f..e4bf4dfc 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ConfigUpdateResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ConfigUpdateResponse.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; -import com.cameleer3.common.model.ApplicationConfig; +import com.cameleer.common.model.ApplicationConfig; public record ConfigUpdateResponse( ApplicationConfig config, diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ConnectionPoolResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ConnectionPoolResponse.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ConnectionPoolResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ConnectionPoolResponse.java index cc3f0b60..b35ded75 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ConnectionPoolResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ConnectionPoolResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/DatabaseStatusResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/DatabaseStatusResponse.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/DatabaseStatusResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/DatabaseStatusResponse.java index 153a2cac..09b55389 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/DatabaseStatusResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/DatabaseStatusResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ErrorResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ErrorResponse.java similarity index 83% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ErrorResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ErrorResponse.java index a9ede4c9..dd70e1bf 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ErrorResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ErrorResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/IndexerPipelineResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/IndexerPipelineResponse.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/IndexerPipelineResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/IndexerPipelineResponse.java index eb7d25da..ae9126fb 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/IndexerPipelineResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/IndexerPipelineResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/LogEntryResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/LogEntryResponse.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/LogEntryResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/LogEntryResponse.java index 17ba4eda..5ebdfacb 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/LogEntryResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/LogEntryResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/LogSearchPageResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/LogSearchPageResponse.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/LogSearchPageResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/LogSearchPageResponse.java index 4b885630..5e273527 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/LogSearchPageResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/LogSearchPageResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/MetricBucket.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/MetricBucket.java similarity index 80% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/MetricBucket.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/MetricBucket.java index bbb17781..5c5f7493 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/MetricBucket.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/MetricBucket.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import java.time.Instant; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcAdminConfigRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcAdminConfigRequest.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcAdminConfigRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcAdminConfigRequest.java index ee45669e..b39701b0 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcAdminConfigRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcAdminConfigRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcAdminConfigResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcAdminConfigResponse.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcAdminConfigResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcAdminConfigResponse.java index 404c84ee..dbcde26d 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcAdminConfigResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcAdminConfigResponse.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; -import com.cameleer3.server.core.security.OidcConfig; +import com.cameleer.server.core.security.OidcConfig; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcPublicConfigResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcPublicConfigResponse.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcPublicConfigResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcPublicConfigResponse.java index 57994375..b1375f64 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcPublicConfigResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcPublicConfigResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcTestResult.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcTestResult.java similarity index 87% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcTestResult.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcTestResult.java index ee0ab634..292c367e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/OidcTestResult.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/OidcTestResult.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ProcessorMetrics.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ProcessorMetrics.java similarity index 89% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ProcessorMetrics.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ProcessorMetrics.java index 442e1489..48f3215b 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ProcessorMetrics.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ProcessorMetrics.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ReplayRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ReplayRequest.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ReplayRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ReplayRequest.java index 18b96cba..cc309060 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ReplayRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ReplayRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ReplayResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ReplayResponse.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ReplayResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ReplayResponse.java index c65147eb..bfc3378a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ReplayResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ReplayResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/RouteMetrics.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/RouteMetrics.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/RouteMetrics.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/RouteMetrics.java index bcb78f13..cddb9695 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/RouteMetrics.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/RouteMetrics.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/RouteSummary.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/RouteSummary.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/RouteSummary.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/RouteSummary.java index ac442369..d78d9112 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/RouteSummary.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/RouteSummary.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SensitiveKeysRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SensitiveKeysRequest.java similarity index 90% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SensitiveKeysRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SensitiveKeysRequest.java index f6d6e7b8..1ff220af 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SensitiveKeysRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SensitiveKeysRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SensitiveKeysResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SensitiveKeysResponse.java similarity index 77% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SensitiveKeysResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SensitiveKeysResponse.java index b8a63a7b..fe8dd1b6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SensitiveKeysResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SensitiveKeysResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import java.util.List; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SetPasswordRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SetPasswordRequest.java similarity index 75% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SetPasswordRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SetPasswordRequest.java index 6795575c..ce064cc2 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SetPasswordRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SetPasswordRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import jakarta.validation.constraints.NotBlank; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TableSizeResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TableSizeResponse.java similarity index 93% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TableSizeResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TableSizeResponse.java index 6849b528..d6bdbdb5 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TableSizeResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TableSizeResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionRequest.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionRequest.java index d5ba7f6d..c21207bf 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; /** * Request body for testing a tap expression against sample data via a live agent. diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionResponse.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionResponse.java similarity index 88% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionResponse.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionResponse.java index e2e93aa3..080772ae 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionResponse.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionResponse.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; /** * Response from testing a tap expression against sample data. diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ThresholdConfigRequest.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ThresholdConfigRequest.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ThresholdConfigRequest.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ThresholdConfigRequest.java index 5b4ac2d9..56c43e8a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ThresholdConfigRequest.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ThresholdConfigRequest.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; -import com.cameleer3.server.core.admin.ThresholdConfig; +import com.cameleer.server.core.admin.ThresholdConfig; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.Max; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ExecutionFlushScheduler.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ExecutionFlushScheduler.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ExecutionFlushScheduler.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ExecutionFlushScheduler.java index 4d1e341d..6353cf09 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ExecutionFlushScheduler.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ExecutionFlushScheduler.java @@ -1,18 +1,18 @@ -package com.cameleer3.server.app.ingestion; +package com.cameleer.server.app.ingestion; -import com.cameleer3.server.app.config.IngestionConfig; -import com.cameleer3.server.app.search.ClickHouseLogStore; -import com.cameleer3.server.app.storage.ClickHouseExecutionStore; -import com.cameleer3.server.core.ingestion.BufferedLogEntry; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.ingestion.WriteBuffer; +import com.cameleer.server.app.config.IngestionConfig; +import com.cameleer.server.app.search.ClickHouseLogStore; +import com.cameleer.server.app.storage.ClickHouseExecutionStore; +import com.cameleer.server.core.ingestion.BufferedLogEntry; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.ingestion.WriteBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.SmartLifecycle; import org.springframework.scheduling.annotation.Scheduled; -import com.cameleer3.server.app.metrics.ServerMetrics; +import com.cameleer.server.app.metrics.ServerMetrics; import java.time.Duration; import java.util.List; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/MetricsFlushScheduler.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/MetricsFlushScheduler.java similarity index 87% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/MetricsFlushScheduler.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/MetricsFlushScheduler.java index 1479c762..29500a51 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/MetricsFlushScheduler.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/MetricsFlushScheduler.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.ingestion; +package com.cameleer.server.app.ingestion; -import com.cameleer3.server.app.config.IngestionConfig; -import com.cameleer3.server.core.ingestion.WriteBuffer; -import com.cameleer3.server.core.storage.MetricsStore; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.app.config.IngestionConfig; +import com.cameleer.server.core.ingestion.WriteBuffer; +import com.cameleer.server.core.storage.MetricsStore; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.SmartLifecycle; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/AuditInterceptor.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/AuditInterceptor.java similarity index 89% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/AuditInterceptor.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/AuditInterceptor.java index 1a513dea..f1e574d8 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/AuditInterceptor.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/AuditInterceptor.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.interceptor; +package com.cameleer.server.app.interceptor; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/ProtocolVersionInterceptor.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/ProtocolVersionInterceptor.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/ProtocolVersionInterceptor.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/ProtocolVersionInterceptor.java index 9eb307fa..afe40963 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/interceptor/ProtocolVersionInterceptor.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/interceptor/ProtocolVersionInterceptor.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.interceptor; +package com.cameleer.server.app.interceptor; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/metrics/ServerMetrics.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/metrics/ServerMetrics.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/metrics/ServerMetrics.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/metrics/ServerMetrics.java index 534a4de2..0575c607 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/metrics/ServerMetrics.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/metrics/ServerMetrics.java @@ -1,13 +1,13 @@ -package com.cameleer3.server.app.metrics; +package com.cameleer.server.app.metrics; -import com.cameleer3.server.app.agent.SseConnectionManager; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.agent.AgentState; -import com.cameleer3.server.core.ingestion.BufferedLogEntry; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.ingestion.WriteBuffer; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.app.agent.SseConnectionManager; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.agent.AgentState; +import com.cameleer.server.core.ingestion.BufferedLogEntry; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.ingestion.WriteBuffer; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/rbac/RbacServiceImpl.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/rbac/RbacServiceImpl.java similarity index 95% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/rbac/RbacServiceImpl.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/rbac/RbacServiceImpl.java index 1e81a7d6..32bbfbc6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/rbac/RbacServiceImpl.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/rbac/RbacServiceImpl.java @@ -1,15 +1,15 @@ -package com.cameleer3.server.app.rbac; +package com.cameleer.server.app.rbac; -import com.cameleer3.server.core.rbac.GroupRepository; -import com.cameleer3.server.core.rbac.GroupSummary; -import com.cameleer3.server.core.rbac.RbacService; -import com.cameleer3.server.core.rbac.RbacStats; -import com.cameleer3.server.core.rbac.RoleSummary; -import com.cameleer3.server.core.rbac.SystemRole; -import com.cameleer3.server.core.rbac.UserDetail; -import com.cameleer3.server.core.rbac.UserSummary; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.core.rbac.GroupRepository; +import com.cameleer.server.core.rbac.GroupSummary; +import com.cameleer.server.core.rbac.RbacService; +import com.cameleer.server.core.rbac.RbacStats; +import com.cameleer.server.core.rbac.RoleSummary; +import com.cameleer.server.core.rbac.SystemRole; +import com.cameleer.server.core.rbac.UserDetail; +import com.cameleer.server.core.rbac.UserSummary; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import org.springframework.http.HttpStatus; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/retention/JarRetentionJob.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/retention/JarRetentionJob.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/retention/JarRetentionJob.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/retention/JarRetentionJob.java index d39d9744..bbaeed83 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/retention/JarRetentionJob.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/retention/JarRetentionJob.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.retention; +package com.cameleer.server.app.retention; -import com.cameleer3.server.core.runtime.*; +import com.cameleer.server.core.runtime.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/ContainerLogForwarder.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/ContainerLogForwarder.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/ContainerLogForwarder.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/ContainerLogForwarder.java index 720144df..a0caad2d 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/ContainerLogForwarder.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/ContainerLogForwarder.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.common.model.LogEntry; -import com.cameleer3.server.app.search.ClickHouseLogStore; -import com.cameleer3.server.core.ingestion.BufferedLogEntry; +import com.cameleer.common.model.LogEntry; +import com.cameleer.server.app.search.ClickHouseLogStore; +import com.cameleer.server.core.ingestion.BufferedLogEntry; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.async.ResultCallback; import com.github.dockerjava.api.model.Frame; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java index f73c7f03..6104c9f5 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.app.metrics.ServerMetrics; -import com.cameleer3.server.app.storage.PostgresDeploymentRepository; -import com.cameleer3.server.core.runtime.*; +import com.cameleer.server.app.metrics.ServerMetrics; +import com.cameleer.server.app.storage.PostgresDeploymentRepository; +import com.cameleer.server.core.runtime.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -97,7 +97,7 @@ public class DeploymentExecutor { globalCpuShares, globalRoutingMode, globalRoutingDomain, - globalServerUrl.isBlank() ? "http://cameleer3-server:8081" : globalServerUrl + globalServerUrl.isBlank() ? "http://cameleer-server:8081" : globalServerUrl ); ResolvedContainerConfig config = ConfigMerger.resolve( globalDefaults, env.defaultContainerConfig(), app.containerConfig()); diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DisabledRuntimeOrchestrator.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DisabledRuntimeOrchestrator.java similarity index 81% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DisabledRuntimeOrchestrator.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DisabledRuntimeOrchestrator.java index 8a434c83..e4c978a1 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DisabledRuntimeOrchestrator.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DisabledRuntimeOrchestrator.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.core.runtime.ContainerRequest; -import com.cameleer3.server.core.runtime.ContainerStatus; -import com.cameleer3.server.core.runtime.RuntimeOrchestrator; +import com.cameleer.server.core.runtime.ContainerRequest; +import com.cameleer.server.core.runtime.ContainerStatus; +import com.cameleer.server.core.runtime.RuntimeOrchestrator; import java.util.stream.Stream; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerEventMonitor.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerEventMonitor.java similarity index 95% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerEventMonitor.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerEventMonitor.java index 9adeb34a..776e0644 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerEventMonitor.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerEventMonitor.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.app.storage.PostgresDeploymentRepository; -import com.cameleer3.server.core.runtime.ContainerStatus; -import com.cameleer3.server.core.runtime.Deployment; -import com.cameleer3.server.core.runtime.DeploymentStatus; -import com.cameleer3.server.core.runtime.RuntimeOrchestrator; +import com.cameleer.server.app.storage.PostgresDeploymentRepository; +import com.cameleer.server.core.runtime.ContainerStatus; +import com.cameleer.server.core.runtime.Deployment; +import com.cameleer.server.core.runtime.DeploymentStatus; +import com.cameleer.server.core.runtime.RuntimeOrchestrator; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.async.ResultCallback; import com.github.dockerjava.api.model.Event; @@ -68,7 +68,7 @@ public class DockerEventMonitor { if (containerId == null) return; Map labels = event.getActor() != null ? event.getActor().getAttributes() : null; - if (labels == null || !"cameleer3-server".equals(labels.get("managed-by"))) return; + if (labels == null || !"cameleer-server".equals(labels.get("managed-by"))) return; String action = event.getAction(); log.debug("Docker event: {} for container {} ({})", action, containerId.substring(0, 12), diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerNetworkManager.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerNetworkManager.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerNetworkManager.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerNetworkManager.java index 6647f63c..cfc22b11 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerNetworkManager.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerNetworkManager.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.model.Network; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java index 7701243c..80648ae1 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.core.runtime.ContainerRequest; -import com.cameleer3.server.core.runtime.ContainerStatus; -import com.cameleer3.server.core.runtime.RuntimeOrchestrator; +import com.cameleer.server.core.runtime.ContainerRequest; +import com.cameleer.server.core.runtime.ContainerStatus; +import com.cameleer.server.core.runtime.RuntimeOrchestrator; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.async.ResultCallback; import com.github.dockerjava.api.model.AccessMode; @@ -119,10 +119,10 @@ public class DockerRuntimeOrchestrator implements RuntimeOrchestrator { String entrypoint = switch (request.runtimeType()) { case "quarkus" -> "exec java -javaagent:/app/agent.jar" + customArgs + " -jar " + appJarPath; case "plain-java" -> "exec java -javaagent:/app/agent.jar -cp " + appJarPath + - ":/app/cameleer3-log-appender.jar" + customArgs + " " + request.mainClass(); + ":/app/cameleer-log-appender.jar" + customArgs + " " + request.mainClass(); case "native" -> "exec " + appJarPath + customArgs; default -> // spring-boot (default) - "exec java -javaagent:/app/agent.jar -Dloader.path=/app/cameleer3-log-appender.jar" + + "exec java -javaagent:/app/agent.jar -Dloader.path=/app/cameleer-log-appender.jar" + customArgs + " -cp " + appJarPath + " org.springframework.boot.loader.launch.PropertiesLauncher"; }; createCmd.withEntrypoint("sh", "-c", entrypoint); diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/PrometheusLabelBuilder.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/PrometheusLabelBuilder.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/PrometheusLabelBuilder.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/PrometheusLabelBuilder.java index abdd3a9a..2ab78ea6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/PrometheusLabelBuilder.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/PrometheusLabelBuilder.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; import java.util.LinkedHashMap; import java.util.Map; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/RuntimeOrchestratorAutoConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/RuntimeOrchestratorAutoConfig.java similarity index 91% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/RuntimeOrchestratorAutoConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/RuntimeOrchestratorAutoConfig.java index bbad1145..67f7b6c2 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/RuntimeOrchestratorAutoConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/RuntimeOrchestratorAutoConfig.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.app.search.ClickHouseLogStore; -import com.cameleer3.server.app.storage.PostgresDeploymentRepository; -import com.cameleer3.server.core.runtime.DeploymentRepository; -import com.cameleer3.server.core.runtime.RuntimeOrchestrator; +import com.cameleer.server.app.search.ClickHouseLogStore; +import com.cameleer.server.app.storage.PostgresDeploymentRepository; +import com.cameleer.server.core.runtime.DeploymentRepository; +import com.cameleer.server.core.runtime.RuntimeOrchestrator; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientImpl; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/TraefikLabelBuilder.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/TraefikLabelBuilder.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/TraefikLabelBuilder.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/TraefikLabelBuilder.java index 731f1c4e..df223813 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/TraefikLabelBuilder.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/TraefikLabelBuilder.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.core.runtime.ResolvedContainerConfig; +import com.cameleer.server.core.runtime.ResolvedContainerConfig; import java.util.LinkedHashMap; import java.util.Map; @@ -16,7 +16,7 @@ public final class TraefikLabelBuilder { Map labels = new LinkedHashMap<>(); labels.put("traefik.enable", "true"); - labels.put("managed-by", "cameleer3-server"); + labels.put("managed-by", "cameleer-server"); labels.put("cameleer.tenant", tenantId); labels.put("cameleer.app", appSlug); labels.put("cameleer.environment", envSlug); diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseLogStore.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseLogStore.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseLogStore.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseLogStore.java index 1a51fd19..57895683 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseLogStore.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseLogStore.java @@ -1,11 +1,11 @@ -package com.cameleer3.server.app.search; +package com.cameleer.server.app.search; -import com.cameleer3.common.model.LogEntry; -import com.cameleer3.server.core.ingestion.BufferedLogEntry; -import com.cameleer3.server.core.search.LogSearchRequest; -import com.cameleer3.server.core.search.LogSearchResponse; -import com.cameleer3.server.core.storage.LogEntryResult; -import com.cameleer3.server.core.storage.LogIndex; +import com.cameleer.common.model.LogEntry; +import com.cameleer.server.core.ingestion.BufferedLogEntry; +import com.cameleer.server.core.search.LogSearchRequest; +import com.cameleer.server.core.search.LogSearchResponse; +import com.cameleer.server.core.storage.LogEntryResult; +import com.cameleer.server.core.storage.LogIndex; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchIndex.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchIndex.java index ce8bcff2..4569af5b 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchIndex.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.search; +package com.cameleer.server.app.search; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.server.core.storage.SearchIndex; -import com.cameleer3.server.core.storage.model.ExecutionDocument; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.server.core.storage.SearchIndex; +import com.cameleer.server.core.storage.model.ExecutionDocument; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/BootstrapTokenValidator.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/BootstrapTokenValidator.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/BootstrapTokenValidator.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/BootstrapTokenValidator.java index 7fbe52e3..b24690dd 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/BootstrapTokenValidator.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/BootstrapTokenValidator.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/Ed25519SigningServiceImpl.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/Ed25519SigningServiceImpl.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/Ed25519SigningServiceImpl.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/Ed25519SigningServiceImpl.java index d1b9240d..2d5d4225 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/Ed25519SigningServiceImpl.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/Ed25519SigningServiceImpl.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.core.security.Ed25519SigningService; +import com.cameleer.server.core.security.Ed25519SigningService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,7 +27,7 @@ import java.util.Base64; public class Ed25519SigningServiceImpl implements Ed25519SigningService { private static final Logger log = LoggerFactory.getLogger(Ed25519SigningServiceImpl.class); - private static final String DERIVATION_INFO = "cameleer3-ed25519-signing"; + private static final String DERIVATION_INFO = "cameleer-ed25519-signing"; private final PrivateKey privateKey; private final PublicKey publicKey; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/InsecureTlsHelper.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/InsecureTlsHelper.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/InsecureTlsHelper.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/InsecureTlsHelper.java index 35aa33e3..567e84de 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/InsecureTlsHelper.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/InsecureTlsHelper.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java index 5934a5d8..737c1b4a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java @@ -1,12 +1,12 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.metrics.ServerMetrics; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.rbac.SystemRole; -import com.cameleer3.server.core.security.JwtService; -import com.cameleer3.server.core.security.JwtService.JwtValidationResult; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.app.metrics.ServerMetrics; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.rbac.SystemRole; +import com.cameleer.server.core.security.JwtService; +import com.cameleer.server.core.security.JwtService.JwtValidationResult; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -90,7 +90,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { Instant revoked = user.tokenRevokedBefore(); if (revoked != null && result.issuedAt().isBefore(revoked)) { serverMetrics.recordAuthFailure("revoked"); - throw new com.cameleer3.server.core.security.InvalidTokenException("Token revoked"); + throw new com.cameleer.server.core.security.InvalidTokenException("Token revoked"); } }); } diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtServiceImpl.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtServiceImpl.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtServiceImpl.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtServiceImpl.java index f8cf86ae..8f7fbf4a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtServiceImpl.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtServiceImpl.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.core.security.InvalidTokenException; -import com.cameleer3.server.core.security.JwtService; +import com.cameleer.server.core.security.InvalidTokenException; +import com.cameleer.server.core.security.JwtService; import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.JWSHeader; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcAuthController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcAuthController.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcAuthController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcAuthController.java index 6e480967..f37feca1 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcAuthController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcAuthController.java @@ -1,22 +1,22 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.dto.AuthTokenResponse; -import com.cameleer3.server.app.dto.ErrorResponse; -import com.cameleer3.server.app.dto.OidcPublicConfigResponse; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.rbac.ClaimMappingRepository; -import com.cameleer3.server.core.rbac.ClaimMappingRule; -import com.cameleer3.server.core.rbac.ClaimMappingService; -import com.cameleer3.server.core.rbac.GroupRepository; -import com.cameleer3.server.core.rbac.RbacService; -import com.cameleer3.server.core.rbac.SystemRole; -import com.cameleer3.server.core.security.JwtService; -import com.cameleer3.server.core.security.OidcConfig; -import com.cameleer3.server.core.security.OidcConfigRepository; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.app.dto.AuthTokenResponse; +import com.cameleer.server.app.dto.ErrorResponse; +import com.cameleer.server.app.dto.OidcPublicConfigResponse; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.rbac.ClaimMappingRepository; +import com.cameleer.server.core.rbac.ClaimMappingRule; +import com.cameleer.server.core.rbac.ClaimMappingService; +import com.cameleer.server.core.rbac.GroupRepository; +import com.cameleer.server.core.rbac.RbacService; +import com.cameleer.server.core.rbac.SystemRole; +import com.cameleer.server.core.security.JwtService; +import com.cameleer.server.core.security.OidcConfig; +import com.cameleer.server.core.security.OidcConfigRepository; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import jakarta.servlet.http.HttpServletRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcProviderHelper.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcProviderHelper.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcProviderHelper.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcProviderHelper.java index f912301f..83902f5e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcProviderHelper.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcProviderHelper.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.jwk.source.JWKSource; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcTokenExchanger.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcTokenExchanger.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcTokenExchanger.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcTokenExchanger.java index 7eeabbd6..bbd34cb6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcTokenExchanger.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcTokenExchanger.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.core.security.OidcConfig; -import com.cameleer3.server.core.security.OidcConfigRepository; +import com.cameleer.server.core.security.OidcConfig; +import com.cameleer.server.core.security.OidcConfigRepository; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.proc.JWSVerificationKeySelector; import com.nimbusds.jose.proc.SecurityContext; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityBeanConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityBeanConfig.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityBeanConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityBeanConfig.java index 37924504..d9ed209b 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityBeanConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityBeanConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java index 63f98a39..0acf9a0b 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.metrics.ServerMetrics; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.security.JwtService; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.app.metrics.ServerMetrics; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.security.JwtService; +import com.cameleer.server.core.security.UserRepository; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.proc.JWSVerificationKeySelector; import com.nimbusds.jose.proc.SecurityContext; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java index 381883ca..85535239 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/UiAuthController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/UiAuthController.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/UiAuthController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/security/UiAuthController.java index 65cb4eba..e49540af 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/UiAuthController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/security/UiAuthController.java @@ -1,18 +1,18 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.dto.AuthTokenResponse; -import com.cameleer3.server.app.dto.ErrorResponse; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; -import com.cameleer3.server.core.rbac.RbacService; -import com.cameleer3.server.core.rbac.SystemRole; -import com.cameleer3.server.core.rbac.UserDetail; -import com.cameleer3.server.core.security.JwtService; +import com.cameleer.server.app.dto.AuthTokenResponse; +import com.cameleer.server.app.dto.ErrorResponse; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; +import com.cameleer.server.core.rbac.RbacService; +import com.cameleer.server.core.rbac.SystemRole; +import com.cameleer.server.core.rbac.UserDetail; +import com.cameleer.server.core.security.JwtService; import jakarta.servlet.http.HttpServletRequest; -import com.cameleer3.server.core.security.JwtService.JwtValidationResult; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.core.security.JwtService.JwtValidationResult; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseAgentEventRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseAgentEventRepository.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseAgentEventRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseAgentEventRepository.java index 8b47159a..41bbc2ab 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseAgentEventRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseAgentEventRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.agent.AgentEventRecord; -import com.cameleer3.server.core.agent.AgentEventRepository; +import com.cameleer.server.core.agent.AgentEventRecord; +import com.cameleer.server.core.agent.AgentEventRepository; import org.springframework.jdbc.core.JdbcTemplate; import java.sql.Timestamp; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseDiagramStore.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseDiagramStore.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseDiagramStore.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseDiagramStore.java index 41fb0bdb..efa61017 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseDiagramStore.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseDiagramStore.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.common.graph.RouteNode; -import com.cameleer3.server.core.ingestion.TaggedDiagram; -import com.cameleer3.server.core.storage.DiagramStore; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.common.graph.RouteNode; +import com.cameleer.server.core.ingestion.TaggedDiagram; +import com.cameleer.server.core.storage.DiagramStore; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionStore.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionStore.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionStore.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionStore.java index 4f5b837a..78eb6240 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionStore.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionStore.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.common.model.FlatProcessorRecord; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.common.model.FlatProcessorRecord; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStore.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStore.java index 5dde1cab..68d06d88 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStore.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStore.java @@ -1,7 +1,7 @@ -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; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsStore.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsStore.java similarity index 89% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsStore.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsStore.java index 48b271dc..9057b5cb 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseMetricsStore.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseMetricsStore.java @@ -1,7 +1,7 @@ -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; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseStatsStore.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseStatsStore.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseStatsStore.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseStatsStore.java index 25cb7133..9a5d27de 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseStatsStore.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseStatsStore.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.search.ExecutionStats; -import com.cameleer3.server.core.search.StatsTimeseries; -import com.cameleer3.server.core.search.StatsTimeseries.TimeseriesBucket; -import com.cameleer3.server.core.search.TopError; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.core.search.ExecutionStats; +import com.cameleer.server.core.search.StatsTimeseries; +import com.cameleer.server.core.search.StatsTimeseries.TimeseriesBucket; +import com.cameleer.server.core.search.TopError; +import com.cameleer.server.core.storage.StatsStore; import org.springframework.jdbc.core.JdbcTemplate; import java.sql.Timestamp; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseUsageTracker.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseUsageTracker.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseUsageTracker.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseUsageTracker.java index efabdbc5..58c5f3bc 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseUsageTracker.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseUsageTracker.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.analytics.UsageEvent; -import com.cameleer3.server.core.analytics.UsageStats; -import com.cameleer3.server.core.analytics.UsageTracker; -import com.cameleer3.server.core.ingestion.WriteBuffer; +import com.cameleer.server.core.analytics.UsageEvent; +import com.cameleer.server.core.analytics.UsageStats; +import com.cameleer.server.core.analytics.UsageTracker; +import com.cameleer.server.core.ingestion.WriteBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppRepository.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppRepository.java index b963682f..cfaffdf6 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.runtime.App; -import com.cameleer3.server.core.runtime.AppRepository; +import com.cameleer.server.core.runtime.App; +import com.cameleer.server.core.runtime.AppRepository; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppSettingsRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppSettingsRepository.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppSettingsRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppSettingsRepository.java index ccd90d6b..2a797458 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppSettingsRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppSettingsRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.admin.AppSettings; -import com.cameleer3.server.core.admin.AppSettingsRepository; +import com.cameleer.server.core.admin.AppSettings; +import com.cameleer.server.core.admin.AppSettingsRepository; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppVersionRepository.java similarity index 95% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppVersionRepository.java index 9db54f2f..a61fd556 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppVersionRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.runtime.AppVersion; -import com.cameleer3.server.core.runtime.AppVersionRepository; +import com.cameleer.server.core.runtime.AppVersion; +import com.cameleer.server.core.runtime.AppVersionRepository; import org.springframework.jdbc.core.JdbcTemplate; import java.sql.ResultSet; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresApplicationConfigRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresApplicationConfigRepository.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresApplicationConfigRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresApplicationConfigRepository.java index 7716190c..f850268f 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresApplicationConfigRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresApplicationConfigRepository.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.common.model.ApplicationConfig; +import com.cameleer.common.model.ApplicationConfig; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAuditRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAuditRepository.java similarity index 95% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAuditRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAuditRepository.java index 351b08d3..ae4ff712 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAuditRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAuditRepository.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditRecord; -import com.cameleer3.server.core.admin.AuditRepository; -import com.cameleer3.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditRecord; +import com.cameleer.server.core.admin.AuditRepository; +import com.cameleer.server.core.admin.AuditResult; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresClaimMappingRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresClaimMappingRepository.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresClaimMappingRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresClaimMappingRepository.java index 89d0531a..49ead566 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresClaimMappingRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresClaimMappingRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.rbac.ClaimMappingRepository; -import com.cameleer3.server.core.rbac.ClaimMappingRule; +import com.cameleer.server.core.rbac.ClaimMappingRepository; +import com.cameleer.server.core.rbac.ClaimMappingRule; import org.springframework.jdbc.core.JdbcTemplate; import java.util.List; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresDeploymentRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresDeploymentRepository.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresDeploymentRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresDeploymentRepository.java index a478bd1c..91aa4c0a 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresDeploymentRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresDeploymentRepository.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.runtime.Deployment; -import com.cameleer3.server.core.runtime.DeploymentRepository; -import com.cameleer3.server.core.runtime.DeploymentStatus; +import com.cameleer.server.core.runtime.Deployment; +import com.cameleer.server.core.runtime.DeploymentRepository; +import com.cameleer.server.core.runtime.DeploymentStatus; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresEnvironmentRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresEnvironmentRepository.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresEnvironmentRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresEnvironmentRepository.java index e2cbb042..119c8d53 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresEnvironmentRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresEnvironmentRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.runtime.Environment; -import com.cameleer3.server.core.runtime.EnvironmentRepository; +import com.cameleer.server.core.runtime.Environment; +import com.cameleer.server.core.runtime.EnvironmentRepository; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresGroupRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresGroupRepository.java similarity index 98% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresGroupRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresGroupRepository.java index 78e5cf21..7bd0a150 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresGroupRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresGroupRepository.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.rbac.*; +import com.cameleer.server.core.rbac.*; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresOidcConfigRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresOidcConfigRepository.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresOidcConfigRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresOidcConfigRepository.java index d711d2f8..18842d5f 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresOidcConfigRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresOidcConfigRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.security.OidcConfig; -import com.cameleer3.server.core.security.OidcConfigRepository; +import com.cameleer.server.core.security.OidcConfig; +import com.cameleer.server.core.security.OidcConfigRepository; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresRoleRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresRoleRepository.java similarity index 97% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresRoleRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresRoleRepository.java index f6c0eb9b..3e7aa0d3 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresRoleRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresRoleRepository.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.rbac.*; +import com.cameleer.server.core.rbac.*; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresSensitiveKeysRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresSensitiveKeysRepository.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresSensitiveKeysRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresSensitiveKeysRepository.java index 325cc77e..da82e5f4 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresSensitiveKeysRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresSensitiveKeysRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.admin.SensitiveKeysConfig; -import com.cameleer3.server.core.admin.SensitiveKeysRepository; +import com.cameleer.server.core.admin.SensitiveKeysConfig; +import com.cameleer.server.core.admin.SensitiveKeysRepository; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresThresholdRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresThresholdRepository.java similarity index 92% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresThresholdRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresThresholdRepository.java index fc81957a..7a8623ba 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresThresholdRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresThresholdRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.admin.ThresholdConfig; -import com.cameleer3.server.core.admin.ThresholdRepository; +import com.cameleer.server.core.admin.ThresholdConfig; +import com.cameleer.server.core.admin.ThresholdRepository; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresUserRepository.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresUserRepository.java similarity index 96% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresUserRepository.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresUserRepository.java index eb6848b8..64ee73a7 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresUserRepository.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresUserRepository.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/web/SpaForwardController.java b/cameleer-server-app/src/main/java/com/cameleer/server/app/web/SpaForwardController.java similarity index 94% rename from cameleer3-server-app/src/main/java/com/cameleer3/server/app/web/SpaForwardController.java rename to cameleer-server-app/src/main/java/com/cameleer/server/app/web/SpaForwardController.java index 7fdd5efb..1c7a4416 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/web/SpaForwardController.java +++ b/cameleer-server-app/src/main/java/com/cameleer/server/app/web/SpaForwardController.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.web; +package com.cameleer.server.app.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; diff --git a/cameleer3-server-app/src/main/resources/application.yml b/cameleer-server-app/src/main/resources/application.yml similarity index 96% rename from cameleer3-server-app/src/main/resources/application.yml rename to cameleer-server-app/src/main/resources/application.yml index 5caefa28..d0402871 100644 --- a/cameleer3-server-app/src/main/resources/application.yml +++ b/cameleer-server-app/src/main/resources/application.yml @@ -7,7 +7,7 @@ spring: max-file-size: 200MB max-request-size: 200MB datasource: - url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/cameleer3?currentSchema=tenant_${cameleer.server.tenant.id}&ApplicationName=tenant_${cameleer.server.tenant.id}} + url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/cameleer?currentSchema=tenant_${cameleer.server.tenant.id}&ApplicationName=tenant_${cameleer.server.tenant.id}} username: ${SPRING_DATASOURCE_USERNAME:cameleer} password: ${SPRING_DATASOURCE_PASSWORD:cameleer_dev} driver-class-name: org.postgresql.Driver diff --git a/cameleer3-server-app/src/main/resources/clickhouse/init.sql b/cameleer-server-app/src/main/resources/clickhouse/init.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/clickhouse/init.sql rename to cameleer-server-app/src/main/resources/clickhouse/init.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql b/cameleer-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql rename to cameleer-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V1__init.sql b/cameleer-server-app/src/main/resources/db/migration/V1__init.sql similarity index 98% rename from cameleer3-server-app/src/main/resources/db/migration/V1__init.sql rename to cameleer-server-app/src/main/resources/db/migration/V1__init.sql index 81d8ca6f..210e2b8e 100644 --- a/cameleer3-server-app/src/main/resources/db/migration/V1__init.sql +++ b/cameleer-server-app/src/main/resources/db/migration/V1__init.sql @@ -1,4 +1,4 @@ --- V1__init.sql — PostgreSQL schema for Cameleer3 Server +-- V1__init.sql — PostgreSQL schema for Cameleer Server -- PostgreSQL stores RBAC, configuration, and audit data only. -- All observability data (executions, metrics, diagrams, logs, stats) is in ClickHouse. diff --git a/cameleer3-server-app/src/main/resources/db/migration/V2__claim_mapping.sql b/cameleer-server-app/src/main/resources/db/migration/V2__claim_mapping.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V2__claim_mapping.sql rename to cameleer-server-app/src/main/resources/db/migration/V2__claim_mapping.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V3__runtime_management.sql b/cameleer-server-app/src/main/resources/db/migration/V3__runtime_management.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V3__runtime_management.sql rename to cameleer-server-app/src/main/resources/db/migration/V3__runtime_management.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V4__environment_config.sql b/cameleer-server-app/src/main/resources/db/migration/V4__environment_config.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V4__environment_config.sql rename to cameleer-server-app/src/main/resources/db/migration/V4__environment_config.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V5__app_container_config.sql b/cameleer-server-app/src/main/resources/db/migration/V5__app_container_config.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V5__app_container_config.sql rename to cameleer-server-app/src/main/resources/db/migration/V5__app_container_config.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V6__jar_retention_policy.sql b/cameleer-server-app/src/main/resources/db/migration/V6__jar_retention_policy.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V6__jar_retention_policy.sql rename to cameleer-server-app/src/main/resources/db/migration/V6__jar_retention_policy.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V7__deployment_orchestration.sql b/cameleer-server-app/src/main/resources/db/migration/V7__deployment_orchestration.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V7__deployment_orchestration.sql rename to cameleer-server-app/src/main/resources/db/migration/V7__deployment_orchestration.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V8__deployment_active_config.sql b/cameleer-server-app/src/main/resources/db/migration/V8__deployment_active_config.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V8__deployment_active_config.sql rename to cameleer-server-app/src/main/resources/db/migration/V8__deployment_active_config.sql diff --git a/cameleer3-server-app/src/main/resources/db/migration/V9__password_hardening.sql b/cameleer-server-app/src/main/resources/db/migration/V9__password_hardening.sql similarity index 100% rename from cameleer3-server-app/src/main/resources/db/migration/V9__password_hardening.sql rename to cameleer-server-app/src/main/resources/db/migration/V9__password_hardening.sql diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/.gitkeep b/cameleer-server-app/src/test/java/com/cameleer/server/app/.gitkeep similarity index 100% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/.gitkeep rename to cameleer-server-app/src/test/java/com/cameleer/server/app/.gitkeep diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractPostgresIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractPostgresIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractPostgresIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractPostgresIT.java index 1db96086..e3596e81 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractPostgresIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractPostgresIT.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app; +package com.cameleer.server.app; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -19,7 +19,7 @@ public abstract class AbstractPostgresIT { static { postgres = new PostgreSQLContainer<>("postgres:16") - .withDatabaseName("cameleer3") + .withDatabaseName("cameleer") .withUsername("cameleer") .withPassword("test"); postgres.start(); diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/ClickHouseTestHelper.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/ClickHouseTestHelper.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/ClickHouseTestHelper.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/ClickHouseTestHelper.java index 89b0f6cf..045c550e 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/ClickHouseTestHelper.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/ClickHouseTestHelper.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app; +package com.cameleer.server.app; import org.springframework.core.io.ClassPathResource; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/TestSecurityHelper.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/TestSecurityHelper.java similarity index 95% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/TestSecurityHelper.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/TestSecurityHelper.java index f9bc2feb..d24d5945 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/TestSecurityHelper.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/TestSecurityHelper.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app; +package com.cameleer.server.app; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.security.JwtService; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.security.JwtService; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/admin/AuditServiceTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/admin/AuditServiceTest.java similarity index 95% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/admin/AuditServiceTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/admin/AuditServiceTest.java index abf75a0c..db3f1acc 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/admin/AuditServiceTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/admin/AuditServiceTest.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.admin; +package com.cameleer.server.app.admin; -import com.cameleer3.server.core.admin.*; +import com.cameleer.server.core.admin.*; import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/agent/SsePayloadSignerTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/agent/SsePayloadSignerTest.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/agent/SsePayloadSignerTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/agent/SsePayloadSignerTest.java index 0cbee16a..08f68746 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/agent/SsePayloadSignerTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/agent/SsePayloadSignerTest.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.agent; +package com.cameleer.server.app.agent; -import com.cameleer3.server.app.security.Ed25519SigningServiceImpl; -import com.cameleer3.server.core.security.Ed25519SigningService; +import com.cameleer.server.app.security.Ed25519SigningServiceImpl; +import com.cameleer.server.core.security.Ed25519SigningService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentCommandControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentCommandControllerIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentCommandControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentCommandControllerIT.java index 3f9b1c07..132e34ea 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentCommandControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentCommandControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java index 63ec696b..7a117c61 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentRegistrationControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentRegistrationControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentSseControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentSseControllerIT.java similarity index 98% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentSseControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentSseControllerIT.java index 39bb130b..566a80ad 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AgentSseControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AgentSseControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AppControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AppControllerIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AppControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AppControllerIT.java index e29ddb57..599e4832 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AppControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AppControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AuditLogControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AuditLogControllerIT.java similarity index 92% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AuditLogControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AuditLogControllerIT.java index 138bb192..19c03e14 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AuditLogControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AuditLogControllerIT.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; -import com.cameleer3.server.core.admin.AuditCategory; -import com.cameleer3.server.core.admin.AuditResult; -import com.cameleer3.server.core.admin.AuditService; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; +import com.cameleer.server.core.admin.AuditCategory; +import com.cameleer.server.core.admin.AuditResult; +import com.cameleer.server.core.admin.AuditService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/BackpressureIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/BackpressureIT.java similarity index 94% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/BackpressureIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/BackpressureIT.java index f585f671..f67d2950 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/BackpressureIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/BackpressureIT.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; -import com.cameleer3.server.core.ingestion.IngestionService; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; +import com.cameleer.server.core.ingestion.IngestionService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ClaimMappingAdminControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ClaimMappingAdminControllerIT.java similarity index 94% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ClaimMappingAdminControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ClaimMappingAdminControllerIT.java index cf64e592..b6057dd5 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ClaimMappingAdminControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ClaimMappingAdminControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DatabaseAdminControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DatabaseAdminControllerIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DatabaseAdminControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DatabaseAdminControllerIT.java index dc40bed5..b126f17b 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DatabaseAdminControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DatabaseAdminControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DeploymentControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DeploymentControllerIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DeploymentControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DeploymentControllerIT.java index 1b0182ba..bcfdfba5 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DeploymentControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DeploymentControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java similarity index 98% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java index efee860c..6741f177 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DetailControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DetailControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeAll; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramControllerIT.java similarity index 95% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramControllerIT.java index 2c132955..b5ee8136 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramRenderControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramRenderControllerIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramRenderControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramRenderControllerIT.java index a19e924a..814563dd 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DiagramRenderControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DiagramRenderControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/EnvironmentAdminControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/EnvironmentAdminControllerIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/EnvironmentAdminControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/EnvironmentAdminControllerIT.java index a967207c..82a5e172 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/EnvironmentAdminControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/EnvironmentAdminControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ExecutionControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ExecutionControllerIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ExecutionControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ExecutionControllerIT.java index 1b183863..7f7fb26c 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ExecutionControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ExecutionControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ForwardCompatIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ForwardCompatIT.java similarity index 91% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ForwardCompatIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ForwardCompatIT.java index 555bbf7c..9389916c 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ForwardCompatIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ForwardCompatIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/HealthControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/HealthControllerIT.java similarity index 91% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/HealthControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/HealthControllerIT.java index 9ca31887..70b4fc2b 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/HealthControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/HealthControllerIT.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; +import com.cameleer.server.app.AbstractPostgresIT; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.web.client.TestRestTemplate; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/MetricsControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/MetricsControllerIT.java similarity index 94% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/MetricsControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/MetricsControllerIT.java index bc30e0a0..c93196d4 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/MetricsControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/MetricsControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/OpenApiIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/OpenApiIT.java similarity index 91% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/OpenApiIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/OpenApiIT.java index a8ceb053..5b4d8b89 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/OpenApiIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/OpenApiIT.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; +import com.cameleer.server.app.AbstractPostgresIT; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.web.client.TestRestTemplate; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java similarity index 99% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java index b77d869f..94431faa 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SearchControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SearchControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SensitiveKeysAdminControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SensitiveKeysAdminControllerIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SensitiveKeysAdminControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SensitiveKeysAdminControllerIT.java index 884297a5..138fde49 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/SensitiveKeysAdminControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/SensitiveKeysAdminControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ThresholdAdminControllerIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ThresholdAdminControllerIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ThresholdAdminControllerIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ThresholdAdminControllerIT.java index a8f4365b..3d336e9c 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ThresholdAdminControllerIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ThresholdAdminControllerIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/diagram/ElkDiagramRendererTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/diagram/ElkDiagramRendererTest.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/diagram/ElkDiagramRendererTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/diagram/ElkDiagramRendererTest.java index 84e994ab..b0fd11b2 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/diagram/ElkDiagramRendererTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/diagram/ElkDiagramRendererTest.java @@ -1,11 +1,11 @@ -package com.cameleer3.server.app.diagram; +package com.cameleer.server.app.diagram; -import com.cameleer3.common.graph.NodeType; -import com.cameleer3.common.graph.RouteEdge; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.common.graph.RouteNode; -import com.cameleer3.server.core.diagram.DiagramLayout; -import com.cameleer3.server.core.diagram.PositionedNode; +import com.cameleer.common.graph.NodeType; +import com.cameleer.common.graph.RouteEdge; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.common.graph.RouteNode; +import com.cameleer.server.core.diagram.DiagramLayout; +import com.cameleer.server.core.diagram.PositionedNode; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/interceptor/ProtocolVersionIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/interceptor/ProtocolVersionIT.java similarity index 95% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/interceptor/ProtocolVersionIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/interceptor/ProtocolVersionIT.java index 35d0c0d1..af2fc377 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/interceptor/ProtocolVersionIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/interceptor/ProtocolVersionIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.interceptor; +package com.cameleer.server.app.interceptor; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/runtime/PrometheusLabelBuilderTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/runtime/PrometheusLabelBuilderTest.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/runtime/PrometheusLabelBuilderTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/runtime/PrometheusLabelBuilderTest.java index 98a31fe5..6bd6967d 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/runtime/PrometheusLabelBuilderTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/runtime/PrometheusLabelBuilderTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseLogStoreIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseLogStoreIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseLogStoreIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseLogStoreIT.java index 179ddfb5..7c961189 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseLogStoreIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseLogStoreIT.java @@ -1,13 +1,13 @@ -package com.cameleer3.server.app.search; +package com.cameleer.server.app.search; -import com.cameleer3.common.model.LogEntry; -import com.cameleer3.server.core.search.LogSearchRequest; -import com.cameleer3.server.core.search.LogSearchResponse; -import com.cameleer3.server.core.storage.LogEntryResult; +import com.cameleer.common.model.LogEntry; +import com.cameleer.server.core.search.LogSearchRequest; +import com.cameleer.server.core.search.LogSearchResponse; +import com.cameleer.server.core.storage.LogEntryResult; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.cameleer3.server.app.ClickHouseTestHelper; +import com.cameleer.server.app.ClickHouseTestHelper; import org.springframework.jdbc.core.JdbcTemplate; import org.testcontainers.clickhouse.ClickHouseContainer; import org.testcontainers.junit.jupiter.Container; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseSearchIndexIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseSearchIndexIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseSearchIndexIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseSearchIndexIT.java index e7bd9036..9ecb2ede 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseSearchIndexIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseSearchIndexIT.java @@ -1,16 +1,16 @@ -package com.cameleer3.server.app.search; +package com.cameleer.server.app.search; -import com.cameleer3.server.app.storage.ClickHouseExecutionStore; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.common.model.ExecutionStatus; -import com.cameleer3.common.model.FlatProcessorRecord; +import com.cameleer.server.app.storage.ClickHouseExecutionStore; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.common.model.ExecutionStatus; +import com.cameleer.common.model.FlatProcessorRecord; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.cameleer3.server.app.ClickHouseTestHelper; +import com.cameleer.server.app.ClickHouseTestHelper; import org.springframework.jdbc.core.JdbcTemplate; import org.testcontainers.clickhouse.ClickHouseContainer; import org.testcontainers.junit.jupiter.Container; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenIT.java index 6c8131ed..e119dcba 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenIT.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.AbstractPostgresIT; +import com.cameleer.server.app.AbstractPostgresIT; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenValidatorTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenValidatorTest.java similarity index 98% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenValidatorTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenValidatorTest.java index ed7a8edd..248e0b46 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/BootstrapTokenValidatorTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/BootstrapTokenValidatorTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/Ed25519SigningServiceTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/Ed25519SigningServiceTest.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/Ed25519SigningServiceTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/Ed25519SigningServiceTest.java index 9a71c4fa..67ac8e0e 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/Ed25519SigningServiceTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/Ed25519SigningServiceTest.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.core.security.Ed25519SigningService; +import com.cameleer.server.core.security.Ed25519SigningService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtRefreshIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtRefreshIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtRefreshIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtRefreshIT.java index 9712bf2c..5672cdf4 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtRefreshIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtRefreshIT.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; -import com.cameleer3.server.core.security.JwtService; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; +import com.cameleer.server.core.security.JwtService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtServiceTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtServiceTest.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtServiceTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtServiceTest.java index 5c4d0f71..dc45ac42 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/JwtServiceTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/JwtServiceTest.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.core.security.InvalidTokenException; -import com.cameleer3.server.core.security.JwtService; +import com.cameleer.server.core.security.InvalidTokenException; +import com.cameleer.server.core.security.JwtService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/RegistrationSecurityIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/RegistrationSecurityIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/RegistrationSecurityIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/RegistrationSecurityIT.java index 4f068a9d..394dbaff 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/RegistrationSecurityIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/RegistrationSecurityIT.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.AbstractPostgresIT; +import com.cameleer.server.app.AbstractPostgresIT; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SecurityFilterIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/SecurityFilterIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SecurityFilterIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/SecurityFilterIT.java index 11ffd4bb..61326aa9 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SecurityFilterIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/SecurityFilterIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SseSigningIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/SseSigningIT.java similarity index 98% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SseSigningIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/SseSigningIT.java index 9badee29..cab8b9cc 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/SseSigningIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/SseSigningIT.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; -import com.cameleer3.server.core.security.Ed25519SigningService; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; +import com.cameleer.server.core.security.Ed25519SigningService; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/TestSecurityConfig.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/TestSecurityConfig.java similarity index 91% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/TestSecurityConfig.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/security/TestSecurityConfig.java index 2f67ae8f..1e32bfa9 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/security/TestSecurityConfig.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/security/TestSecurityConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; /** * Previously this class provided a permit-all SecurityFilterChain for tests. diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseAgentEventRepositoryIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseAgentEventRepositoryIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseAgentEventRepositoryIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseAgentEventRepositoryIT.java index 74a8ff6c..f4b898de 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseAgentEventRepositoryIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseAgentEventRepositoryIT.java @@ -1,10 +1,10 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.agent.AgentEventRecord; +import com.cameleer.server.core.agent.AgentEventRecord; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.cameleer3.server.app.ClickHouseTestHelper; +import com.cameleer.server.app.ClickHouseTestHelper; import org.springframework.jdbc.core.JdbcTemplate; import org.testcontainers.clickhouse.ClickHouseContainer; import org.testcontainers.junit.jupiter.Container; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseChunkPipelineIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseChunkPipelineIT.java similarity index 92% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseChunkPipelineIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseChunkPipelineIT.java index c26362b7..a687ea94 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseChunkPipelineIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseChunkPipelineIT.java @@ -1,15 +1,15 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.app.search.ClickHouseSearchIndex; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.storage.DiagramStore; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.common.model.ExecutionChunk; -import com.cameleer3.common.model.ExecutionStatus; -import com.cameleer3.common.model.FlatProcessorRecord; +import com.cameleer.server.app.search.ClickHouseSearchIndex; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.storage.DiagramStore; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.common.model.ExecutionChunk; +import com.cameleer.common.model.ExecutionStatus; +import com.cameleer.common.model.FlatProcessorRecord; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseDiagramStoreIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseDiagramStoreIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseDiagramStoreIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseDiagramStoreIT.java index 56f99883..46f3b4c5 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseDiagramStoreIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseDiagramStoreIT.java @@ -1,13 +1,13 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.common.graph.NodeType; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.common.graph.RouteNode; -import com.cameleer3.server.core.ingestion.TaggedDiagram; +import com.cameleer.common.graph.NodeType; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.common.graph.RouteNode; +import com.cameleer.server.core.ingestion.TaggedDiagram; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.cameleer3.server.app.ClickHouseTestHelper; +import com.cameleer.server.app.ClickHouseTestHelper; import org.springframework.jdbc.core.JdbcTemplate; import org.testcontainers.clickhouse.ClickHouseContainer; import org.testcontainers.junit.jupiter.Container; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionReadIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionReadIT.java similarity index 92% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionReadIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionReadIT.java index c5507bb5..19ac9aa2 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionReadIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionReadIT.java @@ -1,16 +1,16 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.common.model.ExecutionStatus; -import com.cameleer3.common.model.FlatProcessorRecord; -import com.cameleer3.server.core.detail.DetailService; -import com.cameleer3.server.core.detail.ExecutionDetail; -import com.cameleer3.server.core.detail.ProcessorNode; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.common.model.ExecutionStatus; +import com.cameleer.common.model.FlatProcessorRecord; +import com.cameleer.server.core.detail.DetailService; +import com.cameleer.server.core.detail.ExecutionDetail; +import com.cameleer.server.core.detail.ProcessorNode; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.cameleer3.server.app.ClickHouseTestHelper; +import com.cameleer.server.app.ClickHouseTestHelper; import org.springframework.jdbc.core.JdbcTemplate; import org.testcontainers.clickhouse.ClickHouseContainer; import org.testcontainers.junit.jupiter.Container; @@ -83,7 +83,7 @@ class ClickHouseExecutionReadIT { void findById_returnsInsertedExecution() { store.insertExecutionBatch(List.of(minimalExecution("exec-1"))); - Optional result = + Optional result = store.findById("exec-1"); assertThat(result).isPresent(); @@ -97,7 +97,7 @@ class ClickHouseExecutionReadIT { @Test void findById_notFound_returnsEmpty() { - Optional result = + Optional result = store.findById("nonexistent"); assertThat(result).isEmpty(); diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionStoreIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionStoreIT.java similarity index 96% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionStoreIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionStoreIT.java index e3fcf676..7523b64f 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionStoreIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionStoreIT.java @@ -1,12 +1,12 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.common.model.ExecutionStatus; -import com.cameleer3.common.model.FlatProcessorRecord; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.common.model.ExecutionStatus; +import com.cameleer.common.model.FlatProcessorRecord; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.cameleer3.server.app.ClickHouseTestHelper; +import com.cameleer.server.app.ClickHouseTestHelper; import org.springframework.jdbc.core.JdbcTemplate; import org.testcontainers.clickhouse.ClickHouseContainer; import org.testcontainers.junit.jupiter.Container; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStoreIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStoreIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStoreIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStoreIT.java index 3103b5ed..63ca8ff9 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsQueryStoreIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsQueryStoreIT.java @@ -1,6 +1,6 @@ -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; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsStoreIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsStoreIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsStoreIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsStoreIT.java index af555db1..f33ca3cb 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseMetricsStoreIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseMetricsStoreIT.java @@ -1,6 +1,6 @@ -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; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseStatsStoreIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseStatsStoreIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseStatsStoreIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseStatsStoreIT.java index 903cd032..a817ed50 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseStatsStoreIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseStatsStoreIT.java @@ -1,13 +1,13 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.search.ExecutionStats; -import com.cameleer3.server.core.search.StatsTimeseries; -import com.cameleer3.server.core.search.TopError; -import com.cameleer3.server.core.storage.StatsStore.PunchcardCell; +import com.cameleer.server.core.search.ExecutionStats; +import com.cameleer.server.core.search.StatsTimeseries; +import com.cameleer.server.core.search.TopError; +import com.cameleer.server.core.storage.StatsStore.PunchcardCell; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.cameleer3.server.app.ClickHouseTestHelper; +import com.cameleer.server.app.ClickHouseTestHelper; import org.springframework.jdbc.core.JdbcTemplate; import org.testcontainers.clickhouse.ClickHouseContainer; import org.testcontainers.junit.jupiter.Container; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java index e92b2d57..5da644d8 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/DiagramLinkingIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/DiagramLinkingIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/FlywayMigrationIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/FlywayMigrationIT.java similarity index 94% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/FlywayMigrationIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/FlywayMigrationIT.java index 68ed2a65..17a6f400 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/FlywayMigrationIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/FlywayMigrationIT.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.app.AbstractPostgresIT; +import com.cameleer.server.app.AbstractPostgresIT; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java similarity index 98% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java rename to cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java index dc4140d7..414a700d 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/IngestionSchemaIT.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/app/storage/IngestionSchemaIT.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.app.TestSecurityHelper; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.app.TestSecurityHelper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/core/license/LicenseGateTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/core/license/LicenseGateTest.java similarity index 97% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/core/license/LicenseGateTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/core/license/LicenseGateTest.java index 00404d24..95186fdd 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/core/license/LicenseGateTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/core/license/LicenseGateTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.license; +package com.cameleer.server.core.license; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/core/license/LicenseValidatorTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/core/license/LicenseValidatorTest.java similarity index 98% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/core/license/LicenseValidatorTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/core/license/LicenseValidatorTest.java index de3bab2c..d321a2b0 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/core/license/LicenseValidatorTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/core/license/LicenseValidatorTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.license; +package com.cameleer.server.core.license; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/java/com/cameleer3/server/core/rbac/ClaimMappingServiceTest.java b/cameleer-server-app/src/test/java/com/cameleer/server/core/rbac/ClaimMappingServiceTest.java similarity index 98% rename from cameleer3-server-app/src/test/java/com/cameleer3/server/core/rbac/ClaimMappingServiceTest.java rename to cameleer-server-app/src/test/java/com/cameleer/server/core/rbac/ClaimMappingServiceTest.java index 7f82915b..73c5473a 100644 --- a/cameleer3-server-app/src/test/java/com/cameleer3/server/core/rbac/ClaimMappingServiceTest.java +++ b/cameleer-server-app/src/test/java/com/cameleer/server/core/rbac/ClaimMappingServiceTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-app/src/test/resources/application-test.yml b/cameleer-server-app/src/test/resources/application-test.yml similarity index 100% rename from cameleer3-server-app/src/test/resources/application-test.yml rename to cameleer-server-app/src/test/resources/application-test.yml diff --git a/cameleer3-server-core/pom.xml b/cameleer-server-core/pom.xml similarity index 86% rename from cameleer3-server-core/pom.xml rename to cameleer-server-core/pom.xml index fcc2542d..9c959ab3 100644 --- a/cameleer3-server-core/pom.xml +++ b/cameleer-server-core/pom.xml @@ -5,19 +5,19 @@ 4.0.0 - com.cameleer3 - cameleer3-server-parent + com.cameleer + cameleer-server-parent 1.0-SNAPSHOT - cameleer3-server-core - Cameleer3 Server Core + cameleer-server-core + Cameleer Server Core Domain logic, storage, and agent registry - com.cameleer3 - cameleer3-common + com.cameleer + cameleer-common com.fasterxml.jackson.core diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/.gitkeep b/cameleer-server-core/src/main/java/com/cameleer/server/core/.gitkeep similarity index 100% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/.gitkeep rename to cameleer-server-core/src/main/java/com/cameleer/server/core/.gitkeep diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AppSettings.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AppSettings.java similarity index 92% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AppSettings.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AppSettings.java index b25c47ac..989a9e02 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AppSettings.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AppSettings.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AppSettingsRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AppSettingsRepository.java similarity index 87% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AppSettingsRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AppSettingsRepository.java index 29613133..d8a55530 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AppSettingsRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AppSettingsRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.util.List; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditCategory.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditCategory.java similarity index 65% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditCategory.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditCategory.java index 1e365da3..968ee093 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditCategory.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditCategory.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; public enum AuditCategory { INFRA, AUTH, USER_MGMT, CONFIG, RBAC, AGENT diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditRecord.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditRecord.java similarity index 95% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditRecord.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditRecord.java index 6e4f6f1b..23cce792 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditRecord.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditRecord.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.time.Instant; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditRepository.java similarity index 92% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditRepository.java index 76b5a721..89a055f4 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditResult.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditResult.java similarity index 54% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditResult.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditResult.java index d8be64ed..cc055805 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditResult.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditResult.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; public enum AuditResult { SUCCESS, FAILURE diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditService.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditService.java index 82b25595..e3b975c5 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysConfig.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysConfig.java similarity index 81% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysConfig.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysConfig.java index f686eafa..09b3949f 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysConfig.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysMerger.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysMerger.java similarity index 96% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysMerger.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysMerger.java index 62cd2af7..c1c4d9d2 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysMerger.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysMerger.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.util.ArrayList; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysRepository.java similarity index 81% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysRepository.java index 556de2da..ef8141e5 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/SensitiveKeysRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/SensitiveKeysRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/ThresholdConfig.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/ThresholdConfig.java similarity index 92% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/ThresholdConfig.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/ThresholdConfig.java index babcd89f..d211e2b8 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/ThresholdConfig.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/ThresholdConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; public record ThresholdConfig( DatabaseThresholds database diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/ThresholdRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/ThresholdRepository.java similarity index 80% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/ThresholdRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/admin/ThresholdRepository.java index 2e9a02f9..97b6e342 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/ThresholdRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/admin/ThresholdRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentCommand.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentCommand.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentCommand.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentCommand.java index f4fa8820..41234489 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentCommand.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentCommand.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventListener.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventListener.java similarity index 93% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventListener.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventListener.java index 9ee41e81..bfc09752 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventListener.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventListener.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; /** * Listener interface for agent registry events. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventRecord.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventRecord.java similarity index 83% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventRecord.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventRecord.java index ff7f88e0..e322b1c0 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventRecord.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventRecord.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventRepository.java similarity index 91% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventRepository.java index 0908f950..24aa8465 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventService.java similarity index 96% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventService.java index 9348144b..91fe90d7 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentEventService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentEventService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentInfo.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentInfo.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentInfo.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentInfo.java index 5c0546ca..cb8cdaca 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentInfo.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentInfo.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java similarity index 99% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java index eb411d1b..32b55245 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentState.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentState.java similarity index 75% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentState.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentState.java index 51a2a1a4..a6b1af29 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentState.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentState.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; /** * Lifecycle states for a connected agent. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandReply.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandReply.java similarity index 90% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandReply.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandReply.java index 3538d3d3..21923d81 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandReply.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandReply.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; /** * Represents the reply data from an agent command acknowledgment. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandStatus.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandStatus.java similarity index 78% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandStatus.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandStatus.java index 4a13e78a..cb9599ff 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandStatus.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandStatus.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; /** * Delivery status of a command pushed to an agent. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandType.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandType.java similarity index 83% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandType.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandType.java index 02baff74..c80bff20 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandType.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandType.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; /** * Types of commands that can be pushed to agents. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/RouteStateRegistry.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/RouteStateRegistry.java similarity index 96% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/RouteStateRegistry.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/agent/RouteStateRegistry.java index d2794bdc..9d6b5fd8 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/RouteStateRegistry.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/agent/RouteStateRegistry.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; import java.util.LinkedHashMap; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageEvent.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageEvent.java similarity index 85% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageEvent.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageEvent.java index d99de3f7..5cd6acef 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageEvent.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageEvent.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.analytics; +package com.cameleer.server.core.analytics; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageStats.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageStats.java similarity index 68% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageStats.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageStats.java index d27182c7..86ae0642 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageStats.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageStats.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.analytics; +package com.cameleer.server.core.analytics; public record UsageStats( String key, diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageTracker.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageTracker.java similarity index 60% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageTracker.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageTracker.java index 26495899..43aa7092 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/analytics/UsageTracker.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/analytics/UsageTracker.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.analytics; +package com.cameleer.server.core.analytics; public interface UsageTracker { diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java index a11c323e..79bb5b59 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.core.detail; +package com.cameleer.server.core.detail; -import com.cameleer3.common.model.ProcessorExecution; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.common.model.ProcessorExecution; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ExecutionDetail.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ExecutionDetail.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ExecutionDetail.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ExecutionDetail.java index 09d2ca64..e375e9e2 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ExecutionDetail.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ExecutionDetail.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.detail; +package com.cameleer.server.core.detail; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java similarity index 99% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java index ebfb8184..e4cce197 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.detail; +package com.cameleer.server.core.detail; import java.time.Instant; import java.util.ArrayList; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramLayout.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramLayout.java similarity index 91% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramLayout.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramLayout.java index ff30b664..79f0439a 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramLayout.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramLayout.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.diagram; +package com.cameleer.server.core.diagram; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramRenderer.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramRenderer.java similarity index 90% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramRenderer.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramRenderer.java index 540e39b7..46f92390 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/DiagramRenderer.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/DiagramRenderer.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.core.diagram; +package com.cameleer.server.core.diagram; -import com.cameleer3.common.graph.RouteGraph; +import com.cameleer.common.graph.RouteGraph; /** * Renders a route graph as SVG or as a positioned JSON layout. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedEdge.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedEdge.java similarity index 90% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedEdge.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedEdge.java index cdd29f24..3d68eb3e 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedEdge.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedEdge.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.diagram; +package com.cameleer.server.core.diagram; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedNode.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedNode.java similarity index 95% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedNode.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedNode.java index 9f664278..d3f32881 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/diagram/PositionedNode.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/diagram/PositionedNode.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.diagram; +package com.cameleer.server.core.diagram; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/ExecutionUpdatedEvent.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/ExecutionUpdatedEvent.java similarity index 70% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/ExecutionUpdatedEvent.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/ExecutionUpdatedEvent.java index 08488fab..269ea318 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/ExecutionUpdatedEvent.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/ExecutionUpdatedEvent.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.indexing; +package com.cameleer.server.core.indexing; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexer.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexer.java similarity index 91% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexer.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexer.java index 966c92d4..48377a5e 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexer.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexer.java @@ -1,11 +1,11 @@ -package com.cameleer3.server.core.indexing; +package com.cameleer.server.core.indexing; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ExecutionRecord; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; -import com.cameleer3.server.core.storage.SearchIndex; -import com.cameleer3.server.core.storage.model.ExecutionDocument; -import com.cameleer3.server.core.storage.model.ExecutionDocument.ProcessorDoc; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ExecutionRecord; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.server.core.storage.SearchIndex; +import com.cameleer.server.core.storage.model.ExecutionDocument; +import com.cameleer.server.core.storage.model.ExecutionDocument.ProcessorDoc; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexerStats.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexerStats.java similarity index 88% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexerStats.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexerStats.java index e743fe9d..4bb1bef4 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexerStats.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexerStats.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.indexing; +package com.cameleer.server.core.indexing; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/BufferedLogEntry.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/BufferedLogEntry.java similarity index 75% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/BufferedLogEntry.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/BufferedLogEntry.java index 83575fae..330bf2ba 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/BufferedLogEntry.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/BufferedLogEntry.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; -import com.cameleer3.common.model.LogEntry; +import com.cameleer.common.model.LogEntry; /** * A log entry paired with its agent metadata, ready for buffered ClickHouse insertion. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/ChunkAccumulator.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/ChunkAccumulator.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/ChunkAccumulator.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/ChunkAccumulator.java index 3729720a..9a8f1c0b 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/ChunkAccumulator.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/ChunkAccumulator.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; -import com.cameleer3.common.model.ExchangeSnapshot; -import com.cameleer3.common.model.ExecutionChunk; -import com.cameleer3.common.model.FlatProcessorRecord; -import com.cameleer3.server.core.storage.DiagramStore; +import com.cameleer.common.model.ExchangeSnapshot; +import com.cameleer.common.model.ExecutionChunk; +import com.cameleer.common.model.FlatProcessorRecord; +import com.cameleer.server.core.storage.DiagramStore; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java similarity index 92% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java index 63df17bf..01649c45 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java @@ -1,15 +1,15 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; -import com.cameleer3.common.model.ExchangeSnapshot; -import com.cameleer3.common.model.ProcessorExecution; -import com.cameleer3.common.model.RouteExecution; +import com.cameleer.common.model.ExchangeSnapshot; +import com.cameleer.common.model.ProcessorExecution; +import com.cameleer.common.model.RouteExecution; import com.fasterxml.jackson.databind.SerializationFeature; -import com.cameleer3.server.core.indexing.ExecutionUpdatedEvent; -import com.cameleer3.server.core.storage.DiagramStore; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ExecutionRecord; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.core.indexing.ExecutionUpdatedEvent; +import com.cameleer.server.core.storage.DiagramStore; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ExecutionRecord; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/MergedExecution.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/MergedExecution.java similarity index 96% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/MergedExecution.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/MergedExecution.java index 34d27689..e82cf3e7 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/MergedExecution.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/MergedExecution.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/TaggedDiagram.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/TaggedDiagram.java similarity index 78% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/TaggedDiagram.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/TaggedDiagram.java index a30b93fd..328bd0a9 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/TaggedDiagram.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/TaggedDiagram.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; -import com.cameleer3.common.graph.RouteGraph; +import com.cameleer.common.graph.RouteGraph; /** * Pairs a {@link RouteGraph} with the authenticated agent identity. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/TaggedExecution.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/TaggedExecution.java similarity index 77% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/TaggedExecution.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/TaggedExecution.java index 68280b8d..13d56c8a 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/TaggedExecution.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/TaggedExecution.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; -import com.cameleer3.common.model.RouteExecution; +import com.cameleer.common.model.RouteExecution; /** * Pairs a {@link RouteExecution} with the authenticated agent identity. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/WriteBuffer.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/WriteBuffer.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/WriteBuffer.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/WriteBuffer.java index 29450a72..dbb898aa 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/WriteBuffer.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/WriteBuffer.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/Feature.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/license/Feature.java similarity index 68% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/Feature.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/license/Feature.java index 42d6a0d5..72e74df4 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/Feature.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/license/Feature.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.license; +package com.cameleer.server.core.license; public enum Feature { topology, diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseGate.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseGate.java similarity index 95% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseGate.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseGate.java index da298960..b6ca83fa 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseGate.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseGate.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.license; +package com.cameleer.server.core.license; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseInfo.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseInfo.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseInfo.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseInfo.java index e71d395c..2940e3e6 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseInfo.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseInfo.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.license; +package com.cameleer.server.core.license; import java.time.Instant; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseValidator.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseValidator.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseValidator.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseValidator.java index 3c4f314f..07e29043 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/license/LicenseValidator.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/license/LicenseValidator.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.license; +package com.cameleer.server.core.license; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/AssignmentOrigin.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/AssignmentOrigin.java similarity index 57% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/AssignmentOrigin.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/AssignmentOrigin.java index 1ec842f8..8e45205e 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/AssignmentOrigin.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/AssignmentOrigin.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; public enum AssignmentOrigin { direct, managed diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingRepository.java similarity index 92% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingRepository.java index 8e76cae9..8f87fbbb 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.List; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingRule.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingRule.java similarity index 90% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingRule.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingRule.java index fe13d840..f4724cf3 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingRule.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingRule.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.time.Instant; import java.util.UUID; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingService.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingService.java index a3d12a0a..05f3cfdb 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/ClaimMappingService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/ClaimMappingService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupDetail.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupDetail.java similarity index 88% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupDetail.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupDetail.java index 1a446ce4..8977247e 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupDetail.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupDetail.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupRepository.java similarity index 92% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupRepository.java index afd94464..6a5afb15 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.List; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupSummary.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupSummary.java similarity index 65% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupSummary.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupSummary.java index 36bc31c9..9ff7610a 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupSummary.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupSummary.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.UUID; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacService.java similarity index 96% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacService.java index ab72af74..1c7a4454 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.List; import java.util.UUID; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacStats.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacStats.java similarity index 74% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacStats.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacStats.java index 463f3b4d..98467348 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacStats.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacStats.java @@ -1,3 +1,3 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; public record RbacStats(int userCount, int activeUserCount, int groupCount, int maxGroupDepth, int roleCount) {} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleDetail.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleDetail.java similarity index 88% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleDetail.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleDetail.java index 6145870a..6ba7362d 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleDetail.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleDetail.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleRepository.java similarity index 89% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleRepository.java index c5bfdbf6..820137e3 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.List; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleSummary.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleSummary.java similarity index 72% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleSummary.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleSummary.java index 6a332d83..54690b68 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleSummary.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleSummary.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.UUID; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/SystemRole.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/SystemRole.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/SystemRole.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/SystemRole.java index f28d909a..de106f45 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/SystemRole.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/SystemRole.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.Map; import java.util.Set; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserDetail.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserDetail.java similarity index 88% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserDetail.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserDetail.java index 5b1553dc..2cedb55e 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserDetail.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserDetail.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserSummary.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserSummary.java similarity index 67% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserSummary.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserSummary.java index 7ff00180..fcf95137 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserSummary.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserSummary.java @@ -1,3 +1,3 @@ -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; public record UserSummary(String userId, String displayName, String provider) {} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/App.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/App.java similarity index 85% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/App.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/App.java index 6291bae3..e9617109 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/App.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/App.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.time.Instant; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppRepository.java similarity index 92% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppRepository.java index 443ac0dd..ec4ea778 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java similarity index 99% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java index 5c220e2b..9c1e861f 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersion.java similarity index 87% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersion.java index 4e5fef2d..0e1fe69f 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersion.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.time.Instant; import java.util.UUID; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersionRepository.java similarity index 91% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersionRepository.java index c3344955..43b3be31 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersionRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java similarity index 99% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java index edd8b7b3..f9ee6251 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.Collections; import java.util.HashMap; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java index 8e8b5e7d..8aa8b715 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerStatus.java similarity index 84% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerStatus.java index eb7e7bec..99c9da71 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerStatus.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerStatus.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; public record ContainerStatus(String state, boolean running, int exitCode, String error) { public static ContainerStatus notFound() { diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeployStage.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeployStage.java similarity index 74% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeployStage.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeployStage.java index 2105e13c..8c8f1379 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeployStage.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeployStage.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; public enum DeployStage { PRE_FLIGHT, PULL_IMAGE, CREATE_NETWORK, START_REPLICAS, HEALTH_CHECK, SWAP_TRAFFIC, COMPLETE diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/Deployment.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/Deployment.java similarity index 95% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/Deployment.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/Deployment.java index e72791a6..d4153c68 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/Deployment.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/Deployment.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentRepository.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentRepository.java index bbce038a..4512bdfa 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentService.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentService.java index 0fcc3be1..9f05b448 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentStatus.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentStatus.java similarity index 68% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentStatus.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentStatus.java index 7440dc23..365a7f09 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentStatus.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentStatus.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; public enum DeploymentStatus { STOPPED, STARTING, RUNNING, DEGRADED, STOPPING, FAILED diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/Environment.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/Environment.java similarity index 88% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/Environment.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/Environment.java index 52dde023..76cb72b3 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/Environment.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/Environment.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.time.Instant; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/EnvironmentRepository.java similarity index 93% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/EnvironmentRepository.java index b4b205a4..2d22c338 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/EnvironmentRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/EnvironmentService.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/EnvironmentService.java index d03d17d2..567171a0 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/EnvironmentService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/EnvironmentService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java similarity index 96% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java index b1674745..77b58e66 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RoutingMode.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RoutingMode.java similarity index 51% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RoutingMode.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RoutingMode.java index 11d1efe3..5c26e0f0 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RoutingMode.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RoutingMode.java @@ -1,3 +1,3 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; public enum RoutingMode { path, subdomain } diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeDetector.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeDetector.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeDetector.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeDetector.java index 9e7c4644..339d7553 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeDetector.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeDetector.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.io.IOException; import java.io.InputStream; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeOrchestrator.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeOrchestrator.java index b0f7292b..605243c0 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeOrchestrator.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeOrchestrator.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.stream.Stream; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeType.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeType.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeType.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeType.java index 07050cf6..8ac2a1aa 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeType.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeType.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; public enum RuntimeType { AUTO, diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionStats.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionStats.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionStats.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionStats.java index 2c13886d..7f1f1468 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionStats.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionStats.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; /** * Aggregate execution statistics within a time window, with comparison to the diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionSummary.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionSummary.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionSummary.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionSummary.java index 1a2ad626..e273f052 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionSummary.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionSummary.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; import java.time.Instant; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/LogSearchRequest.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/LogSearchRequest.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/LogSearchRequest.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/LogSearchRequest.java index 0235ccd8..f14e23dc 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/LogSearchRequest.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/LogSearchRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/LogSearchResponse.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/LogSearchResponse.java similarity index 85% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/LogSearchResponse.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/LogSearchResponse.java index 027018e3..412e1b29 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/LogSearchResponse.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/LogSearchResponse.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; -import com.cameleer3.server.core.storage.LogEntryResult; +import com.cameleer.server.core.storage.LogEntryResult; import java.util.List; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchRequest.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchRequest.java similarity index 99% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchRequest.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchRequest.java index ba763b42..3f1b3c47 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchRequest.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchRequest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchResult.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchResult.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchResult.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchResult.java index dcd56461..5d3a1bc4 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchResult.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchResult.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java index 53ae779a..e22e685e 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; -import com.cameleer3.server.core.storage.SearchIndex; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.core.storage.SearchIndex; +import com.cameleer.server.core.storage.StatsStore; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/StatsTimeseries.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/StatsTimeseries.java similarity index 88% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/StatsTimeseries.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/StatsTimeseries.java index 3387571a..f8a4980f 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/StatsTimeseries.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/StatsTimeseries.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/TopError.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/TopError.java similarity index 84% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/TopError.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/search/TopError.java index 300df75b..94e2cced 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/TopError.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/search/TopError.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/Ed25519SigningService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/Ed25519SigningService.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/Ed25519SigningService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/security/Ed25519SigningService.java index 8f337922..72d570ad 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/Ed25519SigningService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/Ed25519SigningService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; /** * Service for Ed25519 digital signatures. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/InvalidTokenException.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/InvalidTokenException.java similarity index 88% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/InvalidTokenException.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/security/InvalidTokenException.java index f6daed00..3fec4391 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/InvalidTokenException.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/InvalidTokenException.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; /** * Thrown when a JWT token is invalid, expired, or of the wrong type. diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/JwtService.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/JwtService.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/JwtService.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/security/JwtService.java index 9ea2471b..4d2e06b3 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/JwtService.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/JwtService.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfig.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfig.java similarity index 97% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfig.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfig.java index 2180a59c..2ad44ed4 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfig.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfig.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfigRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfigRepository.java similarity index 86% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfigRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfigRepository.java index c8cef8e2..bc46d5c8 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfigRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfigRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; import java.util.Optional; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/PasswordPolicyValidator.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/PasswordPolicyValidator.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/PasswordPolicyValidator.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/security/PasswordPolicyValidator.java index 491f9213..ae82110b 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/PasswordPolicyValidator.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/PasswordPolicyValidator.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; import java.util.ArrayList; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserInfo.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserInfo.java similarity index 96% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserInfo.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserInfo.java index 884b5a8f..1967e2e8 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserInfo.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserInfo.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; import java.time.Instant; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserRepository.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserRepository.java similarity index 95% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserRepository.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserRepository.java index f6c17802..c8ff86f4 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserRepository.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserRepository.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramStore.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramStore.java similarity index 76% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramStore.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramStore.java index 548edb64..a3fe0ff6 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramStore.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramStore.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.server.core.ingestion.TaggedDiagram; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.server.core.ingestion.TaggedDiagram; import java.util.List; import java.util.Map; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java similarity index 98% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java index 5e8cdc1d..7f4946ad 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/LogEntryResult.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/LogEntryResult.java similarity index 88% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/LogEntryResult.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/LogEntryResult.java index 0e5bd585..26438838 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/LogEntryResult.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/LogEntryResult.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; import java.util.Map; diff --git a/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/LogIndex.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/LogIndex.java new file mode 100644 index 00000000..7a2162ec --- /dev/null +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/LogIndex.java @@ -0,0 +1,14 @@ +package com.cameleer.server.core.storage; + +import com.cameleer.common.model.LogEntry; +import com.cameleer.server.core.search.LogSearchRequest; +import com.cameleer.server.core.search.LogSearchResponse; + +import java.util.List; + +public interface LogIndex { + + LogSearchResponse search(LogSearchRequest request); + + void indexBatch(String instanceId, String applicationId, List entries); +} diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsQueryStore.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsQueryStore.java similarity index 85% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsQueryStore.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsQueryStore.java index fdf8e875..c68c5df8 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsQueryStore.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsQueryStore.java @@ -1,6 +1,6 @@ -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; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsStore.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsStore.java similarity index 52% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsStore.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsStore.java index b7af4122..53b621ed 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsStore.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsStore.java @@ -1,6 +1,6 @@ -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/SearchIndex.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/SearchIndex.java similarity index 56% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/SearchIndex.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/SearchIndex.java index a57a2eb7..0f02682a 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/SearchIndex.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/SearchIndex.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.server.core.storage.model.ExecutionDocument; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.server.core.storage.model.ExecutionDocument; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/StatsStore.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/StatsStore.java similarity index 93% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/StatsStore.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/StatsStore.java index 744c1398..742ab35a 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/StatsStore.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/StatsStore.java @@ -1,8 +1,8 @@ -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.server.core.search.ExecutionStats; -import com.cameleer3.server.core.search.StatsTimeseries; -import com.cameleer3.server.core.search.TopError; +import com.cameleer.server.core.search.ExecutionStats; +import com.cameleer.server.core.search.StatsTimeseries; +import com.cameleer.server.core.search.TopError; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionDocument.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionDocument.java similarity index 94% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionDocument.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionDocument.java index a99151bd..38592823 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionDocument.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionDocument.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.storage.model; +package com.cameleer.server.core.storage.model; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/MetricTimeSeries.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/MetricTimeSeries.java similarity index 78% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/MetricTimeSeries.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/MetricTimeSeries.java index 6107fa0e..0ac07dc6 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/MetricTimeSeries.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/MetricTimeSeries.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.storage.model; +package com.cameleer.server.core.storage.model; import java.time.Instant; import java.util.List; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/MetricsSnapshot.java b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/MetricsSnapshot.java similarity index 85% rename from cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/MetricsSnapshot.java rename to cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/MetricsSnapshot.java index 4fe35778..c5f1cde3 100644 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/MetricsSnapshot.java +++ b/cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/MetricsSnapshot.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.storage.model; +package com.cameleer.server.core.storage.model; import java.time.Instant; import java.util.Map; diff --git a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/.gitkeep b/cameleer-server-core/src/test/java/com/cameleer/server/core/.gitkeep similarity index 100% rename from cameleer3-server-core/src/test/java/com/cameleer3/server/core/.gitkeep rename to cameleer-server-core/src/test/java/com/cameleer/server/core/.gitkeep diff --git a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/admin/SensitiveKeysMergerTest.java b/cameleer-server-core/src/test/java/com/cameleer/server/core/admin/SensitiveKeysMergerTest.java similarity index 97% rename from cameleer3-server-core/src/test/java/com/cameleer3/server/core/admin/SensitiveKeysMergerTest.java rename to cameleer-server-core/src/test/java/com/cameleer/server/core/admin/SensitiveKeysMergerTest.java index b758a31a..c89991f5 100644 --- a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/admin/SensitiveKeysMergerTest.java +++ b/cameleer-server-core/src/test/java/com/cameleer/server/core/admin/SensitiveKeysMergerTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/agent/AgentRegistryServiceTest.java b/cameleer-server-core/src/test/java/com/cameleer/server/core/agent/AgentRegistryServiceTest.java similarity index 99% rename from cameleer3-server-core/src/test/java/com/cameleer3/server/core/agent/AgentRegistryServiceTest.java rename to cameleer-server-core/src/test/java/com/cameleer/server/core/agent/AgentRegistryServiceTest.java index d6bf8b2f..ad96894e 100644 --- a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/agent/AgentRegistryServiceTest.java +++ b/cameleer-server-core/src/test/java/com/cameleer/server/core/agent/AgentRegistryServiceTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.agent; +package com.cameleer.server.core.agent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; diff --git a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/detail/TreeReconstructionTest.java b/cameleer-server-core/src/test/java/com/cameleer/server/core/detail/TreeReconstructionTest.java similarity index 98% rename from cameleer3-server-core/src/test/java/com/cameleer3/server/core/detail/TreeReconstructionTest.java rename to cameleer-server-core/src/test/java/com/cameleer/server/core/detail/TreeReconstructionTest.java index dfb2448c..4441c2fc 100644 --- a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/detail/TreeReconstructionTest.java +++ b/cameleer-server-core/src/test/java/com/cameleer/server/core/detail/TreeReconstructionTest.java @@ -1,7 +1,7 @@ -package com.cameleer3.server.core.detail; +package com.cameleer.server.core.detail; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; import org.junit.jupiter.api.Test; import java.time.Instant; diff --git a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/ChunkAccumulatorTest.java b/cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/ChunkAccumulatorTest.java similarity index 95% rename from cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/ChunkAccumulatorTest.java rename to cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/ChunkAccumulatorTest.java index 012df44b..53a0ce6a 100644 --- a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/ChunkAccumulatorTest.java +++ b/cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/ChunkAccumulatorTest.java @@ -1,9 +1,9 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; -import com.cameleer3.common.model.ExecutionChunk; -import com.cameleer3.common.model.ExecutionStatus; -import com.cameleer3.common.model.FlatProcessorRecord; -import com.cameleer3.server.core.storage.DiagramStore; +import com.cameleer.common.model.ExecutionChunk; +import com.cameleer.common.model.ExecutionStatus; +import com.cameleer.common.model.FlatProcessorRecord; +import com.cameleer.server.core.storage.DiagramStore; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -19,8 +19,8 @@ import static org.assertj.core.api.Assertions.assertThat; class ChunkAccumulatorTest { private static final DiagramStore NO_OP_DIAGRAM_STORE = new DiagramStore() { - public void store(com.cameleer3.server.core.ingestion.TaggedDiagram d) {} - public Optional findByContentHash(String h) { return Optional.empty(); } + public void store(com.cameleer.server.core.ingestion.TaggedDiagram d) {} + public Optional findByContentHash(String h) { return Optional.empty(); } public Optional findContentHashForRoute(String r, String a) { return Optional.empty(); } public Optional findContentHashForRouteByAgents(String r, List a) { return Optional.empty(); } public Map findProcessorRouteMapping(String app) { return Map.of(); } diff --git a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/WriteBufferTest.java b/cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/WriteBufferTest.java similarity index 98% rename from cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/WriteBufferTest.java rename to cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/WriteBufferTest.java index 447270d7..09eec9ea 100644 --- a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/WriteBufferTest.java +++ b/cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/WriteBufferTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/runtime/RuntimeDetectorTest.java b/cameleer-server-core/src/test/java/com/cameleer/server/core/runtime/RuntimeDetectorTest.java similarity index 98% rename from cameleer3-server-core/src/test/java/com/cameleer3/server/core/runtime/RuntimeDetectorTest.java rename to cameleer-server-core/src/test/java/com/cameleer/server/core/runtime/RuntimeDetectorTest.java index 7f4aec7c..bcb2473f 100644 --- a/cameleer3-server-core/src/test/java/com/cameleer3/server/core/runtime/RuntimeDetectorTest.java +++ b/cameleer-server-core/src/test/java/com/cameleer/server/core/runtime/RuntimeDetectorTest.java @@ -1,4 +1,4 @@ -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/LogIndex.java b/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/LogIndex.java deleted file mode 100644 index b069bc86..00000000 --- a/cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/LogIndex.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.cameleer3.server.core.storage; - -import com.cameleer3.common.model.LogEntry; -import com.cameleer3.server.core.search.LogSearchRequest; -import com.cameleer3.server.core.search.LogSearchResponse; - -import java.util.List; - -public interface LogIndex { - - LogSearchResponse search(LogSearchRequest request); - - void indexBatch(String instanceId, String applicationId, List entries); -} diff --git a/ci-log.txt b/ci-log.txt index cc1147fb..efde89a0 100644 --- a/ci-log.txt +++ b/ci-log.txt @@ -284,19 +284,19 @@ 2026-03-25T12:06:09.9635324Z [INFO] ------------------------------------------------------------------------ 2026-03-25T12:06:09.9636148Z [INFO] Reactor Build Order: 2026-03-25T12:06:09.9636467Z [INFO] -2026-03-25T12:06:09.9659474Z [INFO] Cameleer3 Server Parent [pom] -2026-03-25T12:06:09.9660313Z [INFO] Cameleer3 Server Core [jar] -2026-03-25T12:06:09.9660795Z [INFO] Cameleer3 Server App [jar] +2026-03-25T12:06:09.9659474Z [INFO] Cameleer Server Parent [pom] +2026-03-25T12:06:09.9660313Z [INFO] Cameleer Server Core [jar] +2026-03-25T12:06:09.9660795Z [INFO] Cameleer Server App [jar] 2026-03-25T12:06:09.9828555Z [INFO] 2026-03-25T12:06:09.9829990Z [INFO] ---------------< com.***3:***3-server-parent >---------------- -2026-03-25T12:06:09.9830445Z [INFO] Building Cameleer3 Server Parent 1.0-SNAPSHOT [1/3] +2026-03-25T12:06:09.9830445Z [INFO] Building Cameleer Server Parent 1.0-SNAPSHOT [1/3] 2026-03-25T12:06:09.9831993Z [INFO] from pom.xml 2026-03-25T12:06:09.9832701Z [INFO] --------------------------------[ pom ]--------------------------------- 2026-03-25T12:06:10.0308726Z [INFO] 2026-03-25T12:06:10.0310168Z [INFO] --- clean:3.4.1:clean (default-clean) @ ***3-server-parent --- 2026-03-25T12:06:10.1462826Z [INFO] 2026-03-25T12:06:10.1463418Z [INFO] ----------------< com.***3:***3-server-core >----------------- -2026-03-25T12:06:10.1463669Z [INFO] Building Cameleer3 Server Core 1.0-SNAPSHOT [2/3] +2026-03-25T12:06:10.1463669Z [INFO] Building Cameleer Server Core 1.0-SNAPSHOT [2/3] 2026-03-25T12:06:10.1464039Z [INFO] from ***3-server-core/pom.xml 2026-03-25T12:06:10.1464250Z [INFO] --------------------------------[ jar ]--------------------------------- 2026-03-25T12:06:10.4658491Z [INFO] @@ -321,11 +321,11 @@ 2026-03-25T12:06:12.7620033Z [INFO] 2 errors 2026-03-25T12:06:12.7622462Z [INFO] ------------------------------------------------------------- 2026-03-25T12:06:12.7631912Z [INFO] ------------------------------------------------------------------------ -2026-03-25T12:06:12.7640947Z [INFO] Reactor Summary for Cameleer3 Server Parent 1.0-SNAPSHOT: +2026-03-25T12:06:12.7640947Z [INFO] Reactor Summary for Cameleer Server Parent 1.0-SNAPSHOT: 2026-03-25T12:06:12.7641508Z [INFO] -2026-03-25T12:06:12.7641764Z [INFO] Cameleer3 Server Parent ............................ SUCCESS [ 0.164 s] -2026-03-25T12:06:12.7643553Z [INFO] Cameleer3 Server Core .............................. FAILURE [ 2.617 s] -2026-03-25T12:06:12.7646103Z [INFO] Cameleer3 Server App ............................... SKIPPED +2026-03-25T12:06:12.7641764Z [INFO] Cameleer Server Parent ............................ SUCCESS [ 0.164 s] +2026-03-25T12:06:12.7643553Z [INFO] Cameleer Server Core .............................. FAILURE [ 2.617 s] +2026-03-25T12:06:12.7646103Z [INFO] Cameleer Server App ............................... SKIPPED 2026-03-25T12:06:12.7647941Z [INFO] ------------------------------------------------------------------------ 2026-03-25T12:06:12.7649783Z [INFO] BUILD FAILURE 2026-03-25T12:06:12.7651509Z [INFO] ------------------------------------------------------------------------ diff --git a/ci-log2.txt b/ci-log2.txt index 90a703b2..679329e0 100644 --- a/ci-log2.txt +++ b/ci-log2.txt @@ -284,19 +284,19 @@ 2026-03-25T12:12:09.3994902Z [INFO] ------------------------------------------------------------------------ 2026-03-25T12:12:09.3995662Z [INFO] Reactor Build Order: 2026-03-25T12:12:09.3995968Z [INFO] -2026-03-25T12:12:09.4015044Z [INFO] Cameleer3 Server Parent [pom] -2026-03-25T12:12:09.4016943Z [INFO] Cameleer3 Server Core [jar] -2026-03-25T12:12:09.4020267Z [INFO] Cameleer3 Server App [jar] +2026-03-25T12:12:09.4015044Z [INFO] Cameleer Server Parent [pom] +2026-03-25T12:12:09.4016943Z [INFO] Cameleer Server Core [jar] +2026-03-25T12:12:09.4020267Z [INFO] Cameleer Server App [jar] 2026-03-25T12:12:09.4204897Z [INFO] 2026-03-25T12:12:09.4206974Z [INFO] ---------------< com.***3:***3-server-parent >---------------- -2026-03-25T12:12:09.4209665Z [INFO] Building Cameleer3 Server Parent 1.0-SNAPSHOT [1/3] +2026-03-25T12:12:09.4209665Z [INFO] Building Cameleer Server Parent 1.0-SNAPSHOT [1/3] 2026-03-25T12:12:09.4213444Z [INFO] from pom.xml 2026-03-25T12:12:09.4215425Z [INFO] --------------------------------[ pom ]--------------------------------- 2026-03-25T12:12:09.4758836Z [INFO] 2026-03-25T12:12:09.4761722Z [INFO] --- clean:3.4.1:clean (default-clean) @ ***3-server-parent --- 2026-03-25T12:12:09.5985349Z [INFO] 2026-03-25T12:12:09.5998691Z [INFO] ----------------< com.***3:***3-server-core >----------------- -2026-03-25T12:12:09.5999367Z [INFO] Building Cameleer3 Server Core 1.0-SNAPSHOT [2/3] +2026-03-25T12:12:09.5999367Z [INFO] Building Cameleer Server Core 1.0-SNAPSHOT [2/3] 2026-03-25T12:12:09.5999608Z [INFO] from ***3-server-core/pom.xml 2026-03-25T12:12:09.5999870Z [INFO] --------------------------------[ jar ]--------------------------------- 2026-03-25T12:12:09.9264378Z [INFO] @@ -353,7 +353,7 @@ 2026-03-25T12:12:17.3553610Z [INFO] Building jar: /workspace/***/***3-server/***3-server-core/target/***3-server-core-1.0-SNAPSHOT.jar 2026-03-25T12:12:17.4343059Z [INFO] 2026-03-25T12:12:17.4343761Z [INFO] -----------------< com.***3:***3-server-app >----------------- -2026-03-25T12:12:17.4344006Z [INFO] Building Cameleer3 Server App 1.0-SNAPSHOT [3/3] +2026-03-25T12:12:17.4344006Z [INFO] Building Cameleer Server App 1.0-SNAPSHOT [3/3] 2026-03-25T12:12:17.4346242Z [INFO] from ***3-server-app/pom.xml 2026-03-25T12:12:17.4347591Z [INFO] --------------------------------[ jar ]--------------------------------- 2026-03-25T12:12:18.7737910Z [INFO] @@ -395,11 +395,11 @@ 2026-03-25T12:12:21.8492176Z [INFO] 6 errors 2026-03-25T12:12:21.8492385Z [INFO] ------------------------------------------------------------- 2026-03-25T12:12:21.8502503Z [INFO] ------------------------------------------------------------------------ -2026-03-25T12:12:21.8503274Z [INFO] Reactor Summary for Cameleer3 Server Parent 1.0-SNAPSHOT: +2026-03-25T12:12:21.8503274Z [INFO] Reactor Summary for Cameleer Server Parent 1.0-SNAPSHOT: 2026-03-25T12:12:21.8503850Z [INFO] -2026-03-25T12:12:21.8524175Z [INFO] Cameleer3 Server Parent ............................ SUCCESS [ 0.178 s] -2026-03-25T12:12:21.8524906Z [INFO] Cameleer3 Server Core .............................. SUCCESS [ 7.835 s] -2026-03-25T12:12:21.8525142Z [INFO] Cameleer3 Server App ............................... FAILURE [ 4.416 s] +2026-03-25T12:12:21.8524175Z [INFO] Cameleer Server Parent ............................ SUCCESS [ 0.178 s] +2026-03-25T12:12:21.8524906Z [INFO] Cameleer Server Core .............................. SUCCESS [ 7.835 s] +2026-03-25T12:12:21.8525142Z [INFO] Cameleer Server App ............................... FAILURE [ 4.416 s] 2026-03-25T12:12:21.8525315Z [INFO] ------------------------------------------------------------------------ 2026-03-25T12:12:21.8525608Z [INFO] BUILD FAILURE 2026-03-25T12:12:21.8525797Z [INFO] ------------------------------------------------------------------------ diff --git a/deploy/base/server.yaml b/deploy/base/server.yaml index ab22820e..08a1f423 100644 --- a/deploy/base/server.yaml +++ b/deploy/base/server.yaml @@ -1,16 +1,16 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: cameleer3-server + name: cameleer-server spec: replicas: 1 selector: matchLabels: - app: cameleer3-server + app: cameleer-server template: metadata: labels: - app: cameleer3-server + app: cameleer-server spec: imagePullSecrets: - name: gitea-registry @@ -19,7 +19,7 @@ spec: runAsUser: 1000 containers: - name: server - image: gitea.siegeln.net/cameleer/cameleer3-server:latest + image: gitea.siegeln.net/cameleer/cameleer-server:latest ports: - containerPort: 8081 env: @@ -110,11 +110,11 @@ spec: apiVersion: v1 kind: Service metadata: - name: cameleer3-server + name: cameleer-server spec: type: ClusterIP selector: - app: cameleer3-server + app: cameleer-server ports: - port: 8081 targetPort: 8081 diff --git a/deploy/base/ui.yaml b/deploy/base/ui.yaml index 12033e50..37b96567 100644 --- a/deploy/base/ui.yaml +++ b/deploy/base/ui.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: cameleer3-ui-config + name: cameleer-ui-config data: config.js: | window.__CAMELEER_CONFIG__ = { @@ -11,27 +11,27 @@ data: apiVersion: apps/v1 kind: Deployment metadata: - name: cameleer3-ui + name: cameleer-ui spec: replicas: 1 selector: matchLabels: - app: cameleer3-ui + app: cameleer-ui template: metadata: labels: - app: cameleer3-ui + app: cameleer-ui spec: imagePullSecrets: - name: gitea-registry containers: - name: ui - image: gitea.siegeln.net/cameleer/cameleer3-server-ui:latest + image: gitea.siegeln.net/cameleer/cameleer-server-ui:latest ports: - containerPort: 80 env: - name: CAMELEER_API_URL - value: "http://cameleer3-server:8081" + value: "http://cameleer-server:8081" volumeMounts: - name: config mountPath: /usr/share/nginx/html/config.js @@ -56,16 +56,16 @@ spec: volumes: - name: config configMap: - name: cameleer3-ui-config + name: cameleer-ui-config --- apiVersion: v1 kind: Service metadata: - name: cameleer3-ui + name: cameleer-ui spec: type: ClusterIP selector: - app: cameleer3-ui + app: cameleer-ui ports: - port: 80 targetPort: 80 diff --git a/deploy/cameleer-postgres.yaml b/deploy/cameleer-postgres.yaml index c65135e4..d9e9f710 100644 --- a/deploy/cameleer-postgres.yaml +++ b/deploy/cameleer-postgres.yaml @@ -26,7 +26,7 @@ spec: name: cameleer-pg env: - name: POSTGRES_DB - value: cameleer3 + value: cameleer - name: POSTGRES_USER valueFrom: secretKeyRef: @@ -52,7 +52,7 @@ spec: command: - sh - -c - - pg_isready -U "$POSTGRES_USER" -d cameleer3 + - pg_isready -U "$POSTGRES_USER" -d cameleer initialDelaySeconds: 15 periodSeconds: 10 timeoutSeconds: 3 @@ -62,7 +62,7 @@ spec: command: - sh - -c - - pg_isready -U "$POSTGRES_USER" -d cameleer3 + - pg_isready -U "$POSTGRES_USER" -d cameleer initialDelaySeconds: 5 periodSeconds: 5 timeoutSeconds: 3 diff --git a/deploy/overlays/feature/ingress.yaml b/deploy/overlays/feature/ingress.yaml index eb4d8e53..e98030c1 100644 --- a/deploy/overlays/feature/ingress.yaml +++ b/deploy/overlays/feature/ingress.yaml @@ -11,6 +11,6 @@ spec: pathType: Prefix backend: service: - name: cameleer3-ui + name: cameleer-ui port: number: 80 diff --git a/deploy/overlays/feature/init-job.yaml b/deploy/overlays/feature/init-job.yaml index 0222321d..a5305e62 100644 --- a/deploy/overlays/feature/init-job.yaml +++ b/deploy/overlays/feature/init-job.yaml @@ -14,7 +14,7 @@ spec: - | PGPASSWORD=$POSTGRES_PASSWORD psql \ -h cameleer-postgres.cameleer.svc.cluster.local \ - -U $POSTGRES_USER -d cameleer3 \ + -U $POSTGRES_USER -d cameleer \ -c "CREATE SCHEMA IF NOT EXISTS BRANCH_SCHEMA" env: - name: POSTGRES_USER diff --git a/deploy/overlays/feature/kustomization.yaml b/deploy/overlays/feature/kustomization.yaml index 4b88fd13..8c823f9f 100644 --- a/deploy/overlays/feature/kustomization.yaml +++ b/deploy/overlays/feature/kustomization.yaml @@ -6,9 +6,9 @@ resources: - ingress.yaml - init-job.yaml images: - - name: gitea.siegeln.net/cameleer/cameleer3-server + - name: gitea.siegeln.net/cameleer/cameleer-server newTag: BRANCH_SHA - - name: gitea.siegeln.net/cameleer/cameleer3-server-ui + - name: gitea.siegeln.net/cameleer/cameleer-server-ui newTag: BRANCH_SHA patches: # Server Deployment: branch-specific schema, index prefix, UI origin @@ -16,7 +16,7 @@ patches: apiVersion: apps/v1 kind: Deployment metadata: - name: cameleer3-server + name: cameleer-server spec: template: spec: @@ -24,13 +24,13 @@ patches: - name: server env: - name: SPRING_DATASOURCE_URL - value: "jdbc:postgresql://cameleer-postgres.cameleer.svc.cluster.local:5432/cameleer3?currentSchema=BRANCH_SCHEMA&ApplicationName=BRANCH_SCHEMA" + value: "jdbc:postgresql://cameleer-postgres.cameleer.svc.cluster.local:5432/cameleer?currentSchema=BRANCH_SCHEMA&ApplicationName=BRANCH_SCHEMA" - name: CAMELEER_SERVER_SECURITY_UIORIGIN value: "http://BRANCH_SLUG.cameleer.siegeln.net" # UI ConfigMap: branch-specific API URL - target: kind: ConfigMap - name: cameleer3-ui-config + name: cameleer-ui-config patch: | - op: replace path: /data/config.js diff --git a/deploy/overlays/main/kustomization.yaml b/deploy/overlays/main/kustomization.yaml index 6cb8a93d..38efa635 100644 --- a/deploy/overlays/main/kustomization.yaml +++ b/deploy/overlays/main/kustomization.yaml @@ -7,7 +7,7 @@ patches: # Server Service: NodePort 30081 - target: kind: Service - name: cameleer3-server + name: cameleer-server patch: | - op: replace path: /spec/type @@ -18,7 +18,7 @@ patches: # UI Service: NodePort 30090 - target: kind: Service - name: cameleer3-ui + name: cameleer-ui patch: | - op: replace path: /spec/type @@ -31,7 +31,7 @@ patches: apiVersion: apps/v1 kind: Deployment metadata: - name: cameleer3-server + name: cameleer-server spec: template: spec: @@ -41,11 +41,11 @@ patches: - name: CAMELEER_SERVER_SECURITY_UIORIGIN value: "http://192.168.50.86:30090" - name: SPRING_DATASOURCE_URL - value: "jdbc:postgresql://cameleer-postgres:5432/cameleer3?currentSchema=public&ApplicationName=tenant_default" + value: "jdbc:postgresql://cameleer-postgres:5432/cameleer?currentSchema=public&ApplicationName=tenant_default" # UI ConfigMap: production API URL - target: kind: ConfigMap - name: cameleer3-ui-config + name: cameleer-ui-config patch: | - op: replace path: /data/config.js diff --git a/docker-compose.yml b/docker-compose.yml index ff35acff..5439cb51 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: ports: - "5432:5432" environment: - POSTGRES_DB: cameleer3 + POSTGRES_DB: cameleer POSTGRES_USER: cameleer POSTGRES_PASSWORD: cameleer_dev volumes: diff --git a/docs/SERVER-CAPABILITIES.md b/docs/SERVER-CAPABILITIES.md index 18acf41b..11fb3cf6 100644 --- a/docs/SERVER-CAPABILITIES.md +++ b/docs/SERVER-CAPABILITIES.md @@ -1,11 +1,11 @@ -# Cameleer3 Server — Capabilities Reference +# Cameleer Server — Capabilities Reference -> Standalone reference for systems integrating with or managing Cameleer3 Server instances. +> Standalone reference for systems integrating with or managing Cameleer Server instances. > Generated 2026-04-04. Source of truth: the codebase and OpenAPI spec at `/api/v1/api-docs`. ## What It Does -Cameleer3 Server is an observability platform for Apache Camel applications. It receives execution traces, metrics, logs, and route diagrams from instrumented Camel agents, stores them in ClickHouse, and serves a web UI for searching, visualizing, and controlling routes. +Cameleer Server is an observability platform for Apache Camel applications. It receives execution traces, metrics, logs, and route diagrams from instrumented Camel agents, stores them in ClickHouse, and serves a web UI for searching, visualizing, and controlling routes. **Core capabilities:** - Real-time execution tracing with processor-level detail @@ -393,7 +393,7 @@ Stats tables are fed by Materialized Views from base tables. Query with `-Merge( Multi-stage Docker build: Maven 3.9 + JDK 17 (build) → JRE 17 (runtime). Port 8081. No default credentials baked in — all database config comes from env vars at runtime. -Registry: `gitea.siegeln.net/cameleer/cameleer3-server` +Registry: `gitea.siegeln.net/cameleer/cameleer-server` ### Infrastructure Requirements @@ -416,7 +416,7 @@ Registry: `gitea.siegeln.net/cameleer/cameleer3-server` | `CAMELEER_SERVER_CLICKHOUSE_URL` | No | `jdbc:clickhouse://localhost:8123/cameleer` | ClickHouse JDBC URL | | `CAMELEER_SERVER_CLICKHOUSE_USERNAME` | No | `default` | ClickHouse user | | `CAMELEER_SERVER_CLICKHOUSE_PASSWORD` | No | (empty) | ClickHouse password | -| `SPRING_DATASOURCE_URL` | No | `jdbc:postgresql://localhost:5432/cameleer3` | PostgreSQL JDBC URL | +| `SPRING_DATASOURCE_URL` | No | `jdbc:postgresql://localhost:5432/cameleer` | PostgreSQL JDBC URL | | `SPRING_DATASOURCE_USERNAME` | No | `cameleer` | PostgreSQL user | | `SPRING_DATASOURCE_PASSWORD` | No | `cameleer_dev` | PostgreSQL password | | `CAMELEER_SERVER_INGESTION_BODYSIZELIMIT` | No | `16384` | Max body size per execution (bytes) | diff --git a/docs/design-system-update-instructions.md b/docs/design-system-update-instructions.md index d25813da..b1c4f64f 100644 --- a/docs/design-system-update-instructions.md +++ b/docs/design-system-update-instructions.md @@ -1,6 +1,6 @@ # Design System Update Instructions -Status: Both changes below were implemented in `@cameleer/design-system` v0.1.19 and consumed by cameleer3-server. +Status: Both changes below were implemented in `@cameleer/design-system` v0.1.19 and consumed by cameleer-server. ## 1. Sidebar: `onNavigate` callback prop — DONE (v0.1.19) diff --git a/docs/superpowers/plans/2026-03-16-storage-layer-refactor.md b/docs/superpowers/plans/2026-03-16-storage-layer-refactor.md index b4f7777a..bace6f3f 100644 --- a/docs/superpowers/plans/2026-03-16-storage-layer-refactor.md +++ b/docs/superpowers/plans/2026-03-16-storage-layer-refactor.md @@ -16,7 +16,7 @@ ### New files -**Core module** (`cameleer3-server-core/src/main/java/com/cameleer3/server/core/`): +**Core module** (`cameleer-server-core/src/main/java/com/cameleer/server/core/`): - `storage/ExecutionStore.java` — new interface replacing ExecutionRepository - `storage/StatsStore.java` — new interface for stats from continuous aggregates - `storage/SearchIndex.java` — new interface for OpenSearch operations @@ -28,7 +28,7 @@ - `indexing/SearchIndexer.java` — debounced event listener for OpenSearch indexing - `indexing/ExecutionUpdatedEvent.java` — event published after execution write -**App module** (`cameleer3-server-app/src/main/java/com/cameleer3/server/app/`): +**App module** (`cameleer-server-app/src/main/java/com/cameleer/server/app/`): - `storage/PostgresExecutionStore.java` — ExecutionStore impl with upsert - `storage/PostgresStatsStore.java` — StatsStore impl querying continuous aggregates - `storage/PostgresDiagramStore.java` — DiagramStore impl @@ -41,7 +41,7 @@ - `ingestion/MetricsFlushScheduler.java` — scheduled metrics buffer flush (replaces ClickHouseFlushScheduler, metrics only) - `retention/RetentionScheduler.java` — scheduled job for drop_chunks and OpenSearch index deletion -**Flyway migrations** (`cameleer3-server-app/src/main/resources/db/migration/`): +**Flyway migrations** (`cameleer-server-app/src/main/resources/db/migration/`): - `V1__extensions.sql` — CREATE EXTENSION timescaledb, timescaledb_toolkit - `V2__executions.sql` — executions hypertable - `V3__processor_executions.sql` — processor_executions hypertable @@ -53,7 +53,7 @@ Note: Retention is NOT in a Flyway migration (Flyway migrations are immutable once applied). No V9 file. Retention is handled by `RetentionScheduler` at runtime with configurable intervals. -**Test files** (`cameleer3-server-app/src/test/java/com/cameleer3/server/app/`): +**Test files** (`cameleer-server-app/src/test/java/com/cameleer/server/app/`): - `AbstractPostgresIT.java` — replaces AbstractClickHouseIT (TimescaleDB Testcontainer) - `storage/PostgresExecutionStoreIT.java` — upsert, dedup, chunked arrival tests - `storage/PostgresStatsStoreIT.java` — continuous aggregate query tests @@ -64,35 +64,35 @@ Note: Retention is NOT in a Flyway migration (Flyway migrations are immutable on ### Files to modify - `pom.xml` (root) — no changes needed -- `cameleer3-server-app/pom.xml` — swap clickhouse-jdbc for postgresql + opensearch-java + flyway -- `cameleer3-server-core/.../core/search/SearchService.java` — split: search delegates to SearchIndex, stats/timeseries to StatsStore -- `cameleer3-server-core/.../core/detail/DetailService.java` — use ExecutionStore instead of ExecutionRepository -- `cameleer3-server-core/.../core/detail/RawExecutionRow.java` — remove (replaced by normalized model) -- `cameleer3-server-core/.../core/ingestion/IngestionService.java` — synchronous execution/diagram writes, keep buffer for metrics -- `cameleer3-server-app/.../app/config/SearchBeanConfig.java` — wire StatsStore into SearchService -- `cameleer3-server-app/.../app/config/IngestionBeanConfig.java` — update bean wiring -- `cameleer3-server-app/src/main/resources/application.yml` — PostgreSQL + OpenSearch config -- `cameleer3-server-app/src/test/resources/application-test.yml` — test config +- `cameleer-server-app/pom.xml` — swap clickhouse-jdbc for postgresql + opensearch-java + flyway +- `cameleer-server-core/.../core/search/SearchService.java` — split: search delegates to SearchIndex, stats/timeseries to StatsStore +- `cameleer-server-core/.../core/detail/DetailService.java` — use ExecutionStore instead of ExecutionRepository +- `cameleer-server-core/.../core/detail/RawExecutionRow.java` — remove (replaced by normalized model) +- `cameleer-server-core/.../core/ingestion/IngestionService.java` — synchronous execution/diagram writes, keep buffer for metrics +- `cameleer-server-app/.../app/config/SearchBeanConfig.java` — wire StatsStore into SearchService +- `cameleer-server-app/.../app/config/IngestionBeanConfig.java` — update bean wiring +- `cameleer-server-app/src/main/resources/application.yml` — PostgreSQL + OpenSearch config +- `cameleer-server-app/src/test/resources/application-test.yml` — test config ### Files to delete -- `cameleer3-server-app/.../app/storage/ClickHouseExecutionRepository.java` -- `cameleer3-server-app/.../app/storage/ClickHouseDiagramRepository.java` -- `cameleer3-server-app/.../app/storage/ClickHouseMetricsRepository.java` -- `cameleer3-server-app/.../app/storage/ClickHouseUserRepository.java` -- `cameleer3-server-app/.../app/storage/ClickHouseOidcConfigRepository.java` -- `cameleer3-server-app/.../app/search/ClickHouseSearchEngine.java` -- `cameleer3-server-app/.../app/ingestion/ClickHouseFlushScheduler.java` -- `cameleer3-server-app/.../app/config/ClickHouseConfig.java` -- `cameleer3-server-core/.../core/storage/ExecutionRepository.java` -- `cameleer3-server-core/.../core/storage/DiagramRepository.java` -- `cameleer3-server-core/.../core/storage/MetricsRepository.java` -- `cameleer3-server-core/.../core/search/SearchEngine.java` -- `cameleer3-server-core/.../core/detail/RawExecutionRow.java` +- `cameleer-server-app/.../app/storage/ClickHouseExecutionRepository.java` +- `cameleer-server-app/.../app/storage/ClickHouseDiagramRepository.java` +- `cameleer-server-app/.../app/storage/ClickHouseMetricsRepository.java` +- `cameleer-server-app/.../app/storage/ClickHouseUserRepository.java` +- `cameleer-server-app/.../app/storage/ClickHouseOidcConfigRepository.java` +- `cameleer-server-app/.../app/search/ClickHouseSearchEngine.java` +- `cameleer-server-app/.../app/ingestion/ClickHouseFlushScheduler.java` +- `cameleer-server-app/.../app/config/ClickHouseConfig.java` +- `cameleer-server-core/.../core/storage/ExecutionRepository.java` +- `cameleer-server-core/.../core/storage/DiagramRepository.java` +- `cameleer-server-core/.../core/storage/MetricsRepository.java` +- `cameleer-server-core/.../core/search/SearchEngine.java` +- `cameleer-server-core/.../core/detail/RawExecutionRow.java` Note: `UserRepository` and `OidcConfigRepository` interfaces in `core.security` are **kept** — the new Postgres implementations implement these existing interfaces. No rename needed since their contracts are unchanged. -- `cameleer3-server-app/src/main/resources/clickhouse/*.sql` (all 8 files) -- `cameleer3-server-app/src/test/.../app/AbstractClickHouseIT.java` +- `cameleer-server-app/src/main/resources/clickhouse/*.sql` (all 8 files) +- `cameleer-server-app/src/test/.../app/AbstractClickHouseIT.java` --- @@ -101,11 +101,11 @@ Note: `UserRepository` and `OidcConfigRepository` interfaces in `core.security` ### Task 1: Update Maven dependencies **Files:** -- Modify: `cameleer3-server-app/pom.xml` +- Modify: `cameleer-server-app/pom.xml` - [ ] **Step 1: Replace ClickHouse JDBC with PostgreSQL driver + Flyway + OpenSearch client** -In `cameleer3-server-app/pom.xml`, replace the ClickHouse dependency and add new ones: +In `cameleer-server-app/pom.xml`, replace the ClickHouse dependency and add new ones: Remove: ```xml @@ -165,22 +165,22 @@ Note: `postgresql` driver and `flyway-core` versions are managed by Spring Boot - [ ] **Step 2: Commit** (compilation will fail until ClickHouse code is deleted in Task 16 — this is expected) ```bash -git add cameleer3-server-app/pom.xml +git add cameleer-server-app/pom.xml git commit -m "chore: swap ClickHouse deps for PostgreSQL, Flyway, OpenSearch" ``` ### Task 2: Write Flyway migrations **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V1__extensions.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V2__executions.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V3__processor_executions.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V4__agent_metrics.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V5__route_diagrams.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V6__users.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V7__oidc_config.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V8__continuous_aggregates.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V9__retention_policies.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V1__extensions.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V2__executions.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V3__processor_executions.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V4__agent_metrics.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V5__route_diagrams.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V6__users.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V7__oidc_config.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V8__continuous_aggregates.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V9__retention_policies.sql` - [ ] **Step 1: Create V1__extensions.sql** @@ -405,19 +405,19 @@ SELECT add_continuous_aggregate_policy('stats_1m_processor', - [ ] **Step 9: Commit** ```bash -git add cameleer3-server-app/src/main/resources/db/migration/ +git add cameleer-server-app/src/main/resources/db/migration/ git commit -m "feat: add Flyway migrations for PostgreSQL/TimescaleDB schema" ``` ### Task 3: Create test base class with TimescaleDB Testcontainer **Files:** -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractPostgresIT.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractPostgresIT.java` - [ ] **Step 1: Write AbstractPostgresIT** ```java -package com.cameleer3.server.app; +package com.cameleer.server.app; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.DynamicPropertyRegistry; @@ -433,7 +433,7 @@ public abstract class AbstractPostgresIT { @Container static final PostgreSQLContainer postgres = new PostgreSQLContainer<>("timescale/timescaledb:latest-pg16") - .withDatabaseName("cameleer3") + .withDatabaseName("cameleer") .withUsername("cameleer") .withPassword("test"); @@ -450,12 +450,12 @@ public abstract class AbstractPostgresIT { - [ ] **Step 2: Write a smoke test to verify migrations run** -Create `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/FlywayMigrationIT.java`: +Create `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/FlywayMigrationIT.java`: ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.app.AbstractPostgresIT; +import com.cameleer.server.app.AbstractPostgresIT; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -493,22 +493,22 @@ class FlywayMigrationIT extends AbstractPostgresIT { - [ ] **Step 3: Verify test passes** (this test will not compile until Task 16 deletes ClickHouse code. Run it after Task 16 is complete. Listed here for logical grouping.) -Run: `mvn test -pl cameleer3-server-app -Dtest=FlywayMigrationIT -q` +Run: `mvn test -pl cameleer-server-app -Dtest=FlywayMigrationIT -q` Expected: PASS — all migrations apply, tables and continuous aggregates exist - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractPostgresIT.java -git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/FlywayMigrationIT.java +git add cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractPostgresIT.java +git add cameleer-server-app/src/test/java/com/cameleer/server/app/storage/FlywayMigrationIT.java git commit -m "test: add TimescaleDB test base class and Flyway migration smoke test" ``` ### Task 4: Update application.yml for PostgreSQL + OpenSearch **Files:** -- Modify: `cameleer3-server-app/src/main/resources/application.yml` -- Modify: `cameleer3-server-app/src/test/resources/application-test.yml` +- Modify: `cameleer-server-app/src/main/resources/application.yml` +- Modify: `cameleer-server-app/src/test/resources/application-test.yml` - [ ] **Step 1: Update application.yml datasource section** @@ -516,7 +516,7 @@ Replace: ```yaml spring: datasource: - url: jdbc:ch://localhost:8123/cameleer3 + url: jdbc:ch://localhost:8123/cameleer username: cameleer password: cameleer_dev driver-class-name: com.clickhouse.jdbc.ClickHouseDriver @@ -526,7 +526,7 @@ With: ```yaml spring: datasource: - url: jdbc:postgresql://localhost:5432/cameleer3 + url: jdbc:postgresql://localhost:5432/cameleer username: cameleer password: ${CAMELEER_DB_PASSWORD:cameleer_dev} driver-class-name: org.postgresql.Driver @@ -565,8 +565,8 @@ opensearch: - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/resources/application.yml -git add cameleer3-server-app/src/test/resources/application-test.yml +git add cameleer-server-app/src/main/resources/application.yml +git add cameleer-server-app/src/test/resources/application-test.yml git commit -m "config: switch datasource to PostgreSQL, add OpenSearch and Flyway config" ``` @@ -577,18 +577,18 @@ git commit -m "config: switch datasource to PostgreSQL, add OpenSearch and Flywa ### Task 5: Create new storage interfaces in core module **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/StatsStore.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/SearchIndex.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramStore.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsStore.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/StatsStore.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/SearchIndex.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramStore.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsStore.java` - [ ] **Step 1: Create ExecutionStore interface** ```java -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.server.core.detail.ProcessorNode; +import com.cameleer.server.core.detail.ProcessorNode; import java.time.Instant; import java.util.List; @@ -629,10 +629,10 @@ public interface ExecutionStore { Supports all 4 aggregation levels: global, per-app, per-route, per-processor. ```java -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.server.core.search.ExecutionStats; -import com.cameleer3.server.core.search.StatsTimeseries; +import com.cameleer.server.core.search.ExecutionStats; +import com.cameleer.server.core.search.StatsTimeseries; import java.time.Instant; import java.util.List; @@ -670,12 +670,12 @@ public interface StatsStore { - [ ] **Step 3: Create SearchIndex interface** ```java -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.server.core.storage.model.ExecutionDocument; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.server.core.storage.model.ExecutionDocument; public interface SearchIndex { @@ -692,10 +692,10 @@ public interface SearchIndex { - [ ] **Step 4: Create DiagramStore interface** ```java -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.common.graph.RouteGraph; -import com.cameleer3.server.core.ingestion.TaggedDiagram; +import com.cameleer.common.graph.RouteGraph; +import com.cameleer.server.core.ingestion.TaggedDiagram; import java.util.List; import java.util.Optional; @@ -715,9 +715,9 @@ public interface DiagramStore { - [ ] **Step 5: Create MetricsStore interface** ```java -package com.cameleer3.server.core.storage; +package com.cameleer.server.core.storage; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import java.util.List; @@ -730,20 +730,20 @@ public interface MetricsStore { - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ +git add cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ git commit -m "feat: add new storage interfaces for PostgreSQL/OpenSearch backends" ``` ### Task 6: Create ExecutionDocument model and indexing event **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionDocument.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/ExecutionUpdatedEvent.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionDocument.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/ExecutionUpdatedEvent.java` - [ ] **Step 1: Create ExecutionDocument** ```java -package com.cameleer3.server.core.storage.model; +package com.cameleer.server.core.storage.model; import java.time.Instant; import java.util.List; @@ -767,7 +767,7 @@ public record ExecutionDocument( - [ ] **Step 2: Create ExecutionUpdatedEvent** ```java -package com.cameleer3.server.core.indexing; +package com.cameleer.server.core.indexing; import java.time.Instant; @@ -777,25 +777,25 @@ public record ExecutionUpdatedEvent(String executionId, Instant startTime) {} - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionDocument.java -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/ +git add cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionDocument.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/ git commit -m "feat: add ExecutionDocument model and ExecutionUpdatedEvent" ``` ### Task 7: Update SearchService to use StatsStore for stats/timeseries **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java` - [ ] **Step 1: Refactor SearchService to accept SearchIndex + StatsStore** Replace the single `SearchEngine` dependency with two dependencies: ```java -package com.cameleer3.server.core.search; +package com.cameleer.server.core.search; -import com.cameleer3.server.core.storage.SearchIndex; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.core.storage.SearchIndex; +import com.cameleer.server.core.storage.StatsStore; import java.time.Instant; import java.util.List; @@ -840,24 +840,24 @@ public class SearchService { - [ ] **Step 2: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchService.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchService.java git commit -m "refactor: SearchService uses SearchIndex + StatsStore instead of SearchEngine" ``` ### Task 8: Update DetailService to use ExecutionStore **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java` - [ ] **Step 1: Rewrite DetailService to use ExecutionStore** The tree reconstruction from parallel arrays is no longer needed. Processors are now individual records with `parentProcessorId` for tree structure. ```java -package com.cameleer3.server.core.detail; +package com.cameleer.server.core.detail; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; import java.util.*; @@ -920,30 +920,30 @@ public class DetailService { - [ ] **Step 2: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java git commit -m "refactor: DetailService uses ExecutionStore, tree built from parentProcessorId" ``` ### Task 9: Update IngestionService for synchronous writes **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java` - [ ] **Step 1: Rewrite IngestionService** Executions and diagrams become synchronous writes. Metrics keep the write buffer. Add event publishing for OpenSearch indexing. ```java -package com.cameleer3.server.core.ingestion; +package com.cameleer.server.core.ingestion; -import com.cameleer3.common.model.ProcessorExecution; -import com.cameleer3.common.model.RouteExecution; -import com.cameleer3.server.core.indexing.ExecutionUpdatedEvent; -import com.cameleer3.server.core.storage.DiagramStore; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ExecutionRecord; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.common.model.ProcessorExecution; +import com.cameleer.common.model.RouteExecution; +import com.cameleer.server.core.indexing.ExecutionUpdatedEvent; +import com.cameleer.server.core.storage.DiagramStore; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ExecutionRecord; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import java.util.ArrayList; import java.util.List; @@ -1055,7 +1055,7 @@ public class IngestionService { - [ ] **Step 2: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java git commit -m "refactor: IngestionService uses synchronous ExecutionStore writes with event publishing" ``` @@ -1066,18 +1066,18 @@ git commit -m "refactor: IngestionService uses synchronous ExecutionStore writes ### Task 10: Implement PostgresExecutionStore **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/PostgresExecutionStoreIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/PostgresExecutionStoreIT.java` - [ ] **Step 1: Write the failing test** ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ExecutionRecord; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ExecutionRecord; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -1159,15 +1159,15 @@ class PostgresExecutionStoreIT extends AbstractPostgresIT { - [ ] **Step 2: Run test to verify it fails** -Run: `mvn test -pl cameleer3-server-app -Dtest=PostgresExecutionStoreIT -q` +Run: `mvn test -pl cameleer-server-app -Dtest=PostgresExecutionStoreIT -q` Expected: FAIL — `ExecutionStore` bean not found - [ ] **Step 3: Implement PostgresExecutionStore** ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; @@ -1300,34 +1300,34 @@ public class PostgresExecutionStore implements ExecutionStore { - [ ] **Step 4: Run tests to verify they pass** -Run: `mvn test -pl cameleer3-server-app -Dtest=PostgresExecutionStoreIT -q` +Run: `mvn test -pl cameleer-server-app -Dtest=PostgresExecutionStoreIT -q` Expected: PASS — all 3 tests green - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java -git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/PostgresExecutionStoreIT.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java +git add cameleer-server-app/src/test/java/com/cameleer/server/app/storage/PostgresExecutionStoreIT.java git commit -m "feat: implement PostgresExecutionStore with upsert and dedup" ``` ### Task 11: Implement PostgresStatsStore **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresStatsStore.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/PostgresStatsStoreIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresStatsStore.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/PostgresStatsStoreIT.java` - [ ] **Step 1: Write the failing test** ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.core.search.ExecutionStats; -import com.cameleer3.server.core.search.StatsTimeseries; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ExecutionRecord; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.core.search.ExecutionStats; +import com.cameleer.server.core.search.StatsTimeseries; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ExecutionRecord; +import com.cameleer.server.core.storage.StatsStore; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -1385,18 +1385,18 @@ class PostgresStatsStoreIT extends AbstractPostgresIT { - [ ] **Step 2: Run test to verify it fails** -Run: `mvn test -pl cameleer3-server-app -Dtest=PostgresStatsStoreIT -q` +Run: `mvn test -pl cameleer-server-app -Dtest=PostgresStatsStoreIT -q` Expected: FAIL — `StatsStore` bean not found - [ ] **Step 3: Implement PostgresStatsStore** ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.search.ExecutionStats; -import com.cameleer3.server.core.search.StatsTimeseries; -import com.cameleer3.server.core.search.StatsTimeseries.TimeseriesBucket; -import com.cameleer3.server.core.storage.StatsStore; +import com.cameleer.server.core.search.ExecutionStats; +import com.cameleer.server.core.search.StatsTimeseries; +import com.cameleer.server.core.search.StatsTimeseries.TimeseriesBucket; +import com.cameleer.server.core.storage.StatsStore; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @@ -1582,24 +1582,24 @@ public class PostgresStatsStore implements StatsStore { - [ ] **Step 4: Run tests to verify they pass** -Run: `mvn test -pl cameleer3-server-app -Dtest=PostgresStatsStoreIT -q` +Run: `mvn test -pl cameleer-server-app -Dtest=PostgresStatsStoreIT -q` Expected: PASS - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresStatsStore.java -git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/PostgresStatsStoreIT.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresStatsStore.java +git add cameleer-server-app/src/test/java/com/cameleer/server/app/storage/PostgresStatsStoreIT.java git commit -m "feat: implement PostgresStatsStore querying continuous aggregates" ``` ### Task 12: Implement PostgresDiagramStore, PostgresUserRepository, PostgresOidcConfigRepository, PostgresMetricsStore **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresDiagramStore.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresUserRepository.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresOidcConfigRepository.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresMetricsStore.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresDiagramStore.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresUserRepository.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresOidcConfigRepository.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresMetricsStore.java` - [ ] **Step 1: Write failing test for PostgresDiagramStore** @@ -1620,10 +1620,10 @@ Straightforward CRUD with `ON CONFLICT (content_hash) DO NOTHING`. Port the SHA- Implements `UserRepository` interface (existing interface in `core.security`, unchanged). ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @@ -1696,10 +1696,10 @@ public class PostgresUserRepository implements UserRepository { Implements `OidcConfigRepository` interface (existing interface in `core.security`). ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.security.OidcConfig; -import com.cameleer3.server.core.security.OidcConfigRepository; +import com.cameleer.server.core.security.OidcConfig; +import com.cameleer.server.core.security.OidcConfigRepository; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @@ -1760,10 +1760,10 @@ public class PostgresOidcConfigRepository implements OidcConfigRepository { - [ ] **Step 6: Implement PostgresMetricsStore** ```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 com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; @@ -1806,13 +1806,13 @@ public class PostgresMetricsStore implements MetricsStore { - [ ] **Step 7: Run all store tests, verify pass** -Run: `mvn test -pl cameleer3-server-app -Dtest="Postgres*IT" -q` +Run: `mvn test -pl cameleer-server-app -Dtest="Postgres*IT" -q` - [ ] **Step 8: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/Postgres*.java -git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/Postgres*.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/Postgres*.java +git add cameleer-server-app/src/test/java/com/cameleer/server/app/storage/Postgres*.java git commit -m "feat: implement PostgresDiagramStore, PostgresUserRepository, PostgresOidcConfigRepository, PostgresMetricsStore" ``` @@ -1823,22 +1823,22 @@ git commit -m "feat: implement PostgresDiagramStore, PostgresUserRepository, Pos ### Task 13: Implement OpenSearchIndex **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenSearchConfig.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchIndex.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/OpenSearchIndexIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenSearchConfig.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/search/OpenSearchIndex.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/search/OpenSearchIndexIT.java` - [ ] **Step 1: Write failing test** ```java -package com.cameleer3.server.app.search; +package com.cameleer.server.app.search; -import com.cameleer3.server.app.AbstractPostgresIT; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.server.core.storage.SearchIndex; -import com.cameleer3.server.core.storage.model.ExecutionDocument; -import com.cameleer3.server.core.storage.model.ExecutionDocument.ProcessorDoc; +import com.cameleer.server.app.AbstractPostgresIT; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.server.core.storage.SearchIndex; +import com.cameleer.server.core.storage.model.ExecutionDocument; +import com.cameleer.server.core.storage.model.ExecutionDocument.ProcessorDoc; import org.junit.jupiter.api.Test; import org.opensearch.testcontainers.OpensearchContainer; import org.springframework.beans.factory.annotation.Autowired; @@ -1922,7 +1922,7 @@ class OpenSearchIndexIT extends AbstractPostgresIT { - [ ] **Step 2: Create OpenSearchConfig** ```java -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder; import org.apache.hc.core5.http.HttpHost; @@ -1950,14 +1950,14 @@ public class OpenSearchConfig { - [ ] **Step 3: Implement OpenSearchIndex** ```java -package com.cameleer3.server.app.search; +package com.cameleer.server.app.search; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.server.core.storage.SearchIndex; -import com.cameleer3.server.core.storage.model.ExecutionDocument; -import com.cameleer3.server.core.storage.model.ExecutionDocument.ProcessorDoc; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.server.core.storage.SearchIndex; +import com.cameleer.server.core.storage.model.ExecutionDocument; +import com.cameleer.server.core.storage.model.ExecutionDocument.ProcessorDoc; import jakarta.annotation.PostConstruct; import org.opensearch.client.opensearch.OpenSearchClient; import org.opensearch.client.opensearch._types.FieldValue; @@ -2264,34 +2264,34 @@ public class OpenSearchIndex implements SearchIndex { - [ ] **Step 4: Run tests to verify they pass** -Run: `mvn test -pl cameleer3-server-app -Dtest=OpenSearchIndexIT -q` +Run: `mvn test -pl cameleer-server-app -Dtest=OpenSearchIndexIT -q` Expected: PASS - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenSearchConfig.java -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchIndex.java -git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/OpenSearchIndexIT.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenSearchConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/search/OpenSearchIndex.java +git add cameleer-server-app/src/test/java/com/cameleer/server/app/search/OpenSearchIndexIT.java git commit -m "feat: implement OpenSearchIndex with full-text and wildcard search" ``` ### Task 14: Implement SearchIndexer (debounced event-driven indexer) **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexer.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexer.java` - [ ] **Step 1: Implement SearchIndexer** ```java -package com.cameleer3.server.core.indexing; +package com.cameleer.server.core.indexing; -import com.cameleer3.server.core.storage.ExecutionStore; -import com.cameleer3.server.core.storage.ExecutionStore.ExecutionRecord; -import com.cameleer3.server.core.storage.ExecutionStore.ProcessorRecord; -import com.cameleer3.server.core.storage.SearchIndex; -import com.cameleer3.server.core.storage.model.ExecutionDocument; -import com.cameleer3.server.core.storage.model.ExecutionDocument.ProcessorDoc; +import com.cameleer.server.core.storage.ExecutionStore; +import com.cameleer.server.core.storage.ExecutionStore.ExecutionRecord; +import com.cameleer.server.core.storage.ExecutionStore.ProcessorRecord; +import com.cameleer.server.core.storage.SearchIndex; +import com.cameleer.server.core.storage.model.ExecutionDocument; +import com.cameleer.server.core.storage.model.ExecutionDocument.ProcessorDoc; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -2368,7 +2368,7 @@ public class SearchIndexer { - [ ] **Step 2: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexer.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexer.java git commit -m "feat: implement debounced SearchIndexer for async OpenSearch indexing" ``` @@ -2379,25 +2379,25 @@ git commit -m "feat: implement debounced SearchIndexer for async OpenSearch inde ### Task 15: Create bean configuration and wire everything **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/MetricsFlushScheduler.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/retention/RetentionScheduler.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/SearchBeanConfig.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/MetricsFlushScheduler.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/retention/RetentionScheduler.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/SearchBeanConfig.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java` - [ ] **Step 1: Create StorageBeanConfig** Wire `DetailService`, `SearchIndexer`, `IngestionService` with new store beans: ```java -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; -import com.cameleer3.server.core.detail.DetailService; -import com.cameleer3.server.core.indexing.SearchIndexer; -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 com.cameleer.server.core.detail.DetailService; +import com.cameleer.server.core.indexing.SearchIndexer; +import com.cameleer.server.core.ingestion.IngestionService; +import com.cameleer.server.core.ingestion.WriteBuffer; +import com.cameleer.server.core.storage.*; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -2453,15 +2453,15 @@ public WriteBuffer metricsBuffer(IngestionConfig config) { - [ ] **Step 4: Create MetricsFlushScheduler** -Create `cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/MetricsFlushScheduler.java`: +Create `cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/MetricsFlushScheduler.java`: ```java -package com.cameleer3.server.app.ingestion; +package com.cameleer.server.app.ingestion; -import com.cameleer3.server.app.config.IngestionConfig; -import com.cameleer3.server.core.ingestion.WriteBuffer; -import com.cameleer3.server.core.storage.MetricsStore; -import com.cameleer3.server.core.storage.model.MetricsSnapshot; +import com.cameleer.server.app.config.IngestionConfig; +import com.cameleer.server.core.ingestion.WriteBuffer; +import com.cameleer.server.core.storage.MetricsStore; +import com.cameleer.server.core.storage.model.MetricsSnapshot; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.SmartLifecycle; @@ -2519,10 +2519,10 @@ public class MetricsFlushScheduler implements SmartLifecycle { - [ ] **Step 5: Create RetentionScheduler** -Create `cameleer3-server-app/src/main/java/com/cameleer3/server/app/retention/RetentionScheduler.java`: +Create `cameleer-server-app/src/main/java/com/cameleer/server/app/retention/RetentionScheduler.java`: ```java -package com.cameleer3.server.app.retention; +package com.cameleer.server.app.retention; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -2575,11 +2575,11 @@ public class RetentionScheduler { - [ ] **Step 6: 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/config/SearchBeanConfig.java -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/MetricsFlushScheduler.java -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/retention/RetentionScheduler.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/config/SearchBeanConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/MetricsFlushScheduler.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/retention/RetentionScheduler.java git commit -m "feat: wire new storage beans, add MetricsFlushScheduler and RetentionScheduler" ``` @@ -2591,10 +2591,10 @@ git commit -m "feat: wire new storage beans, add MetricsFlushScheduler and Reten - [ ] **Step 1: Delete ClickHouse implementations** ```bash -rm cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouse*.java -rm cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchEngine.java -rm cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ClickHouseFlushScheduler.java -rm cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseConfig.java +rm cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouse*.java +rm cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchEngine.java +rm cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ClickHouseFlushScheduler.java +rm cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseConfig.java ``` - [ ] **Step 2: Delete old core interfaces replaced by new ones** @@ -2602,23 +2602,23 @@ rm cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouse `UserRepository` and `OidcConfigRepository` in `core.security` are **kept** — the new Postgres implementations implement them. Only interfaces replaced by new storage interfaces are deleted. ```bash -rm cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionRepository.java -rm cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/DiagramRepository.java -rm cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/MetricsRepository.java -rm cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/SearchEngine.java -rm cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/RawExecutionRow.java +rm cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionRepository.java +rm cameleer-server-core/src/main/java/com/cameleer/server/core/storage/DiagramRepository.java +rm cameleer-server-core/src/main/java/com/cameleer/server/core/storage/MetricsRepository.java +rm cameleer-server-core/src/main/java/com/cameleer/server/core/search/SearchEngine.java +rm cameleer-server-core/src/main/java/com/cameleer/server/core/detail/RawExecutionRow.java ``` - [ ] **Step 3: Delete ClickHouse SQL migrations** ```bash -rm -r cameleer3-server-app/src/main/resources/clickhouse/ +rm -r cameleer-server-app/src/main/resources/clickhouse/ ``` - [ ] **Step 4: Delete old test base class** ```bash -rm cameleer3-server-app/src/test/java/com/cameleer3/server/app/AbstractClickHouseIT.java +rm cameleer-server-app/src/test/java/com/cameleer/server/app/AbstractClickHouseIT.java ``` - [ ] **Step 5: Fix compilation errors in specific files** @@ -2651,7 +2651,7 @@ git commit -m "refactor: remove all ClickHouse code, old interfaces, and SQL mig ### Task 17: Update existing integration tests **Files:** -- Modify: all IT files under `cameleer3-server-app/src/test/` +- Modify: all IT files under `cameleer-server-app/src/test/` - [ ] **Step 1: Update all ITs to extend AbstractPostgresIT** @@ -2689,7 +2689,7 @@ git commit -m "test: migrate all integration tests from ClickHouse to PostgreSQL - [ ] **Step 1: Update Dockerfile** -No JDBC driver changes needed in Dockerfile (drivers are in the fat JAR). Just verify the `REGISTRY_TOKEN` build arg still works for `cameleer3-common` resolution. +No JDBC driver changes needed in Dockerfile (drivers are in the fat JAR). Just verify the `REGISTRY_TOKEN` build arg still works for `cameleer-common` resolution. - [ ] **Step 2: Update K8s manifests** @@ -2717,7 +2717,7 @@ Changes needed: - Docker build: no ClickHouse references in the image (it's a fat JAR, driver is bundled) - Deploy step: update K8s secret names from `clickhouse-credentials` to `postgres-credentials` - Deploy step: add OpenSearch deployment manifests -- Verify `REGISTRY_TOKEN` build arg still works for `cameleer3-common` +- Verify `REGISTRY_TOKEN` build arg still works for `cameleer-common` - Integration tests still skipped in CI (`-DskipITs`) — Testcontainers needs Docker-in-Docker - [ ] **Step 2: Commit** @@ -2738,7 +2738,7 @@ Run: `mvn spring-boot:run` (briefly, to generate spec), then fetch `/api/v1/api- - [ ] **Step 2: Commit** ```bash -git add cameleer3-server-app/src/main/resources/static/openapi.json +git add cameleer-server-app/src/main/resources/static/openapi.json git commit -m "docs: regenerate openapi.json after storage layer refactor" ``` diff --git a/docs/superpowers/plans/2026-03-17-infrastructure-overview.md b/docs/superpowers/plans/2026-03-17-infrastructure-overview.md index 2146d846..412899f0 100644 --- a/docs/superpowers/plans/2026-03-17-infrastructure-overview.md +++ b/docs/superpowers/plans/2026-03-17-infrastructure-overview.md @@ -27,7 +27,7 @@ | `core/.../admin/ThresholdRepository.java` | Interface: find + save | | `core/.../indexing/SearchIndexerStats.java` | Interface: queue depth, failed count, rate, etc. | -> `core/...` = `cameleer3-server-core/src/main/java/com/cameleer3/server/core` +> `core/...` = `cameleer-server-core/src/main/java/com/cameleer/server/core` ### New Files — Backend (App Module) @@ -53,8 +53,8 @@ | `resources/db/migration/V9__admin_thresholds.sql` | Flyway: admin_thresholds table | | `resources/db/migration/V10__audit_log.sql` | Flyway: audit_log table | -> `app/...` = `cameleer3-server-app/src/main/java/com/cameleer3/server/app` -> `resources/...` = `cameleer3-server-app/src/main/resources` +> `app/...` = `cameleer-server-app/src/main/java/com/cameleer/server/app` +> `resources/...` = `cameleer-server-app/src/main/resources` ### New Files — Backend (Tests) @@ -66,7 +66,7 @@ | `test/.../controller/ThresholdAdminControllerIT.java` | Integration test: threshold endpoints | | `test/.../admin/AuditServiceTest.java` | Unit test: audit service logic | -> `test/...` = `cameleer3-server-app/src/test/java/com/cameleer3/server/app` +> `test/...` = `cameleer-server-app/src/test/java/com/cameleer/server/app` ### New Files — Frontend @@ -110,8 +110,8 @@ ### Task 1: Flyway Migrations **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V9__admin_thresholds.sql` -- Create: `cameleer3-server-app/src/main/resources/db/migration/V10__audit_log.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V9__admin_thresholds.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V10__audit_log.sql` - [ ] **Step 1: Create V9 migration** @@ -150,14 +150,14 @@ CREATE INDEX idx_audit_log_target ON audit_log (target); - [ ] **Step 3: Verify migrations compile** -Run: `cd cameleer3-server && mvn clean compile -pl cameleer3-server-app` +Run: `cd cameleer-server && mvn clean compile -pl cameleer-server-app` Expected: BUILD SUCCESS - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/resources/db/migration/V9__admin_thresholds.sql \ - cameleer3-server-app/src/main/resources/db/migration/V10__audit_log.sql +git add cameleer-server-app/src/main/resources/db/migration/V9__admin_thresholds.sql \ + cameleer-server-app/src/main/resources/db/migration/V10__audit_log.sql git commit -m "feat: add Flyway V9 (thresholds) and V10 (audit_log) migrations" ``` @@ -166,16 +166,16 @@ git commit -m "feat: add Flyway V9 (thresholds) and V10 (audit_log) migrations" ### Task 2: Core Module — Audit Domain Model + Repository Interface **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditCategory.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditResult.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditRecord.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditRepository.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditService.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditCategory.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditResult.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditRecord.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditRepository.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditService.java` - [ ] **Step 1: Create AuditCategory enum** ```java -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; public enum AuditCategory { INFRA, AUTH, USER_MGMT, CONFIG @@ -185,7 +185,7 @@ public enum AuditCategory { - [ ] **Step 2: Create AuditResult enum** ```java -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; public enum AuditResult { SUCCESS, FAILURE @@ -195,7 +195,7 @@ public enum AuditResult { - [ ] **Step 3: Create AuditRecord** ```java -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.time.Instant; import java.util.Map; @@ -224,7 +224,7 @@ public record AuditRecord( - [ ] **Step 4: Create AuditRepository interface** ```java -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.time.Instant; import java.util.List; @@ -256,7 +256,7 @@ public interface AuditRepository { The service lives in core so it can be referenced by any controller. It depends on `AuditRepository` (interface) and uses SLF4J for dual logging. It extracts username/IP/user-agent from Spring Security context and servlet request. ```java -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; @@ -307,7 +307,7 @@ public class AuditService { } ``` -**Note:** This class uses `jakarta.servlet` and `org.springframework.security` — the core POM must have these as `provided` scope dependencies if not already present. Check `cameleer3-server-core/pom.xml` and add if needed: +**Note:** This class uses `jakarta.servlet` and `org.springframework.security` — the core POM must have these as `provided` scope dependencies if not already present. Check `cameleer-server-core/pom.xml` and add if needed: ```xml jakarta.servlet @@ -364,14 +364,14 @@ class AuditServiceTest { - [ ] **Step 7: Verify core module compiles and test passes** -Run: `mvn clean compile -pl cameleer3-server-core` -Run: `mvn test -pl cameleer3-server-app -Dtest=AuditServiceTest` +Run: `mvn clean compile -pl cameleer-server-core` +Run: `mvn test -pl cameleer-server-app -Dtest=AuditServiceTest` Expected: BUILD SUCCESS, tests PASS - [ ] **Step 8: Commit** ```bash -git add cameleer3-server-core/ cameleer3-server-app/src/test/ +git add cameleer-server-core/ cameleer-server-app/src/test/ git commit -m "feat: add audit domain model, repository interface, AuditService, and unit test" ``` @@ -380,13 +380,13 @@ git commit -m "feat: add audit domain model, repository interface, AuditService, ### Task 3: Core Module — Threshold Model + Repository Interface **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/ThresholdConfig.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/ThresholdRepository.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/ThresholdConfig.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/ThresholdRepository.java` - [ ] **Step 1: Create ThresholdConfig record** ```java -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; public record ThresholdConfig( DatabaseThresholds database, @@ -427,7 +427,7 @@ public record ThresholdConfig( - [ ] **Step 2: Create ThresholdRepository interface** ```java -package com.cameleer3.server.core.admin; +package com.cameleer.server.core.admin; import java.util.Optional; @@ -439,10 +439,10 @@ public interface ThresholdRepository { - [ ] **Step 3: Compile and commit** -Run: `mvn clean compile -pl cameleer3-server-core` +Run: `mvn clean compile -pl cameleer-server-core` ```bash -git add cameleer3-server-core/ +git add cameleer-server-core/ git commit -m "feat: add ThresholdConfig model and ThresholdRepository interface" ``` @@ -451,13 +451,13 @@ git commit -m "feat: add ThresholdConfig model and ThresholdRepository interface ### Task 4: Core Module — SearchIndexerStats Interface + Instrumentation **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexerStats.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexer.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexerStats.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexer.java` - [ ] **Step 1: Create SearchIndexerStats interface** ```java -package com.cameleer3.server.core.indexing; +package com.cameleer.server.core.indexing; import java.time.Instant; @@ -518,10 +518,10 @@ private void updateRate() { - [ ] **Step 3: Compile and commit** -Run: `mvn clean compile -pl cameleer3-server-core` +Run: `mvn clean compile -pl cameleer-server-core` ```bash -git add cameleer3-server-core/ +git add cameleer-server-core/ git commit -m "feat: add SearchIndexerStats interface and instrument SearchIndexer" ``` @@ -530,8 +530,8 @@ git commit -m "feat: add SearchIndexerStats interface and instrument SearchIndex ### Task 5: App Module — Postgres Repository Implementations **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAuditRepository.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresThresholdRepository.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAuditRepository.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresThresholdRepository.java` - [ ] **Step 1: Create PostgresAuditRepository** @@ -686,10 +686,10 @@ public class PostgresThresholdRepository implements ThresholdRepository { - [ ] **Step 3: Compile and commit** -Run: `mvn clean compile -pl cameleer3-server-app` +Run: `mvn clean compile -pl cameleer-server-app` ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ +git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ git commit -m "feat: add Postgres implementations for AuditRepository and ThresholdRepository" ``` @@ -698,10 +698,10 @@ git commit -m "feat: add Postgres implementations for AuditRepository and Thresh ### Task 6: App Module — Bean Wiring + Security Retrofit **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/OidcConfigAdminController.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/OidcConfigAdminController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java` - [ ] **Step 1: Wire AuditService bean in StorageBeanConfig** @@ -757,7 +757,7 @@ Log OIDC login: Run: `mvn clean compile` ```bash -git add cameleer3-server-app/ +git add cameleer-server-app/ git commit -m "feat: wire AuditService, enable method security, retrofit audit logging into existing controllers" ``` @@ -898,10 +898,10 @@ public record ThresholdConfigRequest( - [ ] **Step 4: Compile and commit** -Run: `mvn clean compile -pl cameleer3-server-app` +Run: `mvn clean compile -pl cameleer-server-app` ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ +git add cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ git commit -m "feat: add response/request DTOs for admin infrastructure endpoints" ``` @@ -910,8 +910,8 @@ git commit -m "feat: add response/request DTOs for admin infrastructure endpoint ### Task 8: App Module — DatabaseAdminController **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DatabaseAdminController.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/DatabaseAdminControllerIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DatabaseAdminController.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/controller/DatabaseAdminControllerIT.java` - [ ] **Step 1: Write integration test** @@ -926,7 +926,7 @@ Use `TestRestTemplate` with admin JWT for authentication. Create a helper that g - [ ] **Step 2: Run test to verify it fails** -Run: `mvn test -pl cameleer3-server-app -Dtest=DatabaseAdminControllerIT` +Run: `mvn test -pl cameleer-server-app -Dtest=DatabaseAdminControllerIT` Expected: FAIL — controller class does not exist - [ ] **Step 3: Implement DatabaseAdminController** @@ -1025,13 +1025,13 @@ public class DatabaseAdminController { - [ ] **Step 4: Run integration test** -Run: `mvn test -pl cameleer3-server-app -Dtest=DatabaseAdminControllerIT` +Run: `mvn test -pl cameleer-server-app -Dtest=DatabaseAdminControllerIT` Expected: PASS - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/ +git add cameleer-server-app/ git commit -m "feat: add DatabaseAdminController with status, pool, tables, queries, and kill endpoints" ``` @@ -1040,8 +1040,8 @@ git commit -m "feat: add DatabaseAdminController with status, pool, tables, quer ### Task 9: App Module — OpenSearchAdminController **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/OpenSearchAdminController.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/OpenSearchAdminControllerIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/OpenSearchAdminController.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/controller/OpenSearchAdminControllerIT.java` - [ ] **Step 1: Write integration test** @@ -1054,7 +1054,7 @@ Extend `AbstractPostgresIT` (which starts both PG and OpenSearch containers). Te - [ ] **Step 2: Run test to verify it fails** -Run: `mvn test -pl cameleer3-server-app -Dtest=OpenSearchAdminControllerIT` +Run: `mvn test -pl cameleer-server-app -Dtest=OpenSearchAdminControllerIT` Expected: FAIL - [ ] **Step 3: Implement OpenSearchAdminController** @@ -1242,13 +1242,13 @@ public class OpenSearchAdminController { - [ ] **Step 4: Run integration test** -Run: `mvn test -pl cameleer3-server-app -Dtest=OpenSearchAdminControllerIT` +Run: `mvn test -pl cameleer-server-app -Dtest=OpenSearchAdminControllerIT` Expected: PASS - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/ +git add cameleer-server-app/ git commit -m "feat: add OpenSearchAdminController with status, pipeline, indices, performance, and delete endpoints" ``` @@ -1257,10 +1257,10 @@ git commit -m "feat: add OpenSearchAdminController with status, pipeline, indice ### Task 10: App Module — ThresholdAdminController + AuditLogController **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ThresholdAdminController.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AuditLogController.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/ThresholdAdminControllerIT.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/controller/AuditLogControllerIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ThresholdAdminController.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AuditLogController.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/controller/ThresholdAdminControllerIT.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/controller/AuditLogControllerIT.java` - [ ] **Step 1: Write ThresholdAdminController integration test** @@ -1351,13 +1351,13 @@ public class AuditLogController { - [ ] **Step 5: Run tests** -Run: `mvn test -pl cameleer3-server-app -Dtest="ThresholdAdminControllerIT,AuditLogControllerIT"` +Run: `mvn test -pl cameleer-server-app -Dtest="ThresholdAdminControllerIT,AuditLogControllerIT"` Expected: PASS - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-app/ +git add cameleer-server-app/ git commit -m "feat: add ThresholdAdminController and AuditLogController with integration tests" ``` diff --git a/docs/superpowers/plans/2026-03-17-rbac-crud-gaps.md b/docs/superpowers/plans/2026-03-17-rbac-crud-gaps.md index d5358fb5..fabae13f 100644 --- a/docs/superpowers/plans/2026-03-17-rbac-crud-gaps.md +++ b/docs/superpowers/plans/2026-03-17-rbac-crud-gaps.md @@ -17,9 +17,9 @@ ### Backend | File | Change | |---|---| -| Create: `cameleer3-server-app/src/main/resources/db/migration/V2__admin_group_seed.sql` | Seed Admins group + ADMIN role assignment | -| Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/SystemRole.java` | Add `ADMINS_GROUP_ID` | -| Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/UiAuthController.java` | Add admin user to Admins group on login | +| Create: `cameleer-server-app/src/main/resources/db/migration/V2__admin_group_seed.sql` | Seed Admins group + ADMIN role assignment | +| Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/SystemRole.java` | Add `ADMINS_GROUP_ID` | +| Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/UiAuthController.java` | Add admin user to Admins group on login | ### Frontend | File | Change | @@ -38,9 +38,9 @@ ### Task 1: Backend — Admins Group Seed + SystemRole Constant + Auth **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V2__admin_group_seed.sql` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/SystemRole.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/UiAuthController.java` +- Create: `cameleer-server-app/src/main/resources/db/migration/V2__admin_group_seed.sql` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/SystemRole.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/UiAuthController.java` - [ ] **Step 1: Create V2 migration** @@ -56,7 +56,7 @@ INSERT INTO group_roles (group_id, role_id) VALUES - [ ] **Step 2: Add ADMINS_GROUP_ID to SystemRole.java** -Read `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/SystemRole.java` and add after the existing UUID constants: +Read `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/SystemRole.java` and add after the existing UUID constants: ```java public static final UUID ADMINS_GROUP_ID = UUID.fromString("00000000-0000-0000-0000-000000000010"); @@ -64,7 +64,7 @@ public static final UUID ADMINS_GROUP_ID = UUID.fromString("00000000-0000-0000-0 - [ ] **Step 3: Update UiAuthController.login()** -Read `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/UiAuthController.java`. In the `login()` method, after the line that assigns ADMIN role (`rbacService.assignRoleToUser(subject, SystemRole.ADMIN_ID)`), add: +Read `cameleer-server-app/src/main/java/com/cameleer/server/app/security/UiAuthController.java`. In the `login()` method, after the line that assigns ADMIN role (`rbacService.assignRoleToUser(subject, SystemRole.ADMIN_ID)`), add: ```java rbacService.addUserToGroup(subject, SystemRole.ADMINS_GROUP_ID); @@ -79,7 +79,7 @@ mvn clean compile - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/resources/db/migration/V2__admin_group_seed.sql cameleer3-server-core/ cameleer3-server-app/src/main/java/ +git add cameleer-server-app/src/main/resources/db/migration/V2__admin_group_seed.sql cameleer-server-core/ cameleer-server-app/src/main/java/ git commit -m "feat: seed built-in Admins group and assign admin users on login" ``` diff --git a/docs/superpowers/plans/2026-03-17-rbac-management.md b/docs/superpowers/plans/2026-03-17-rbac-management.md index 96100636..3fadb829 100644 --- a/docs/superpowers/plans/2026-03-17-rbac-management.md +++ b/docs/superpowers/plans/2026-03-17-rbac-management.md @@ -17,51 +17,51 @@ ### Backend — New Files | File | Responsibility | |---|---| -| `cameleer3-server-app/src/main/resources/db/migration/V1__init.sql` | Consolidated schema (replaces V1–V10) | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacService.java` | Inheritance computation interface | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupRepository.java` | Group CRUD interface | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleRepository.java` | Role CRUD interface | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserDetail.java` | Enriched user record | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupDetail.java` | Group detail record | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleDetail.java` | Role detail record | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserSummary.java` | Embedded user ref | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupSummary.java` | Embedded group ref | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleSummary.java` | Embedded role ref | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacStats.java` | Dashboard stats record | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/SystemRole.java` | System role constants + fixed UUIDs | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresGroupRepository.java` | Group repository impl | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresRoleRepository.java` | Role repository impl | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/rbac/RbacServiceImpl.java` | Inheritance computation impl | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/GroupAdminController.java` | Group CRUD endpoints | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RoleAdminController.java` | Role CRUD endpoints | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RbacStatsController.java` | Dashboard stats endpoint | +| `cameleer-server-app/src/main/resources/db/migration/V1__init.sql` | Consolidated schema (replaces V1–V10) | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacService.java` | Inheritance computation interface | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupRepository.java` | Group CRUD interface | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleRepository.java` | Role CRUD interface | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserDetail.java` | Enriched user record | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupDetail.java` | Group detail record | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleDetail.java` | Role detail record | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserSummary.java` | Embedded user ref | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupSummary.java` | Embedded group ref | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleSummary.java` | Embedded role ref | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacStats.java` | Dashboard stats record | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/SystemRole.java` | System role constants + fixed UUIDs | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresGroupRepository.java` | Group repository impl | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresRoleRepository.java` | Role repository impl | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/rbac/RbacServiceImpl.java` | Inheritance computation impl | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/GroupAdminController.java` | Group CRUD endpoints | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RoleAdminController.java` | Role CRUD endpoints | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RbacStatsController.java` | Dashboard stats endpoint | ### Backend — Modified Files | File | Change | |---|---| -| `cameleer3-server-core/.../security/UserInfo.java` | Remove `roles` field | -| `cameleer3-server-core/.../security/UserRepository.java` | Remove `updateRoles`, add `findSystemRoles` | -| `cameleer3-server-core/.../admin/AuditCategory.java` | Add `RBAC` category | -| `cameleer3-server-app/.../storage/PostgresUserRepository.java` | Rewrite for new schema (no roles column, use user_roles join) | -| `cameleer3-server-app/.../controller/UserAdminController.java` | Rewrite: use RbacService, new endpoints | -| `cameleer3-server-app/.../security/UiAuthController.java` | Use user_roles instead of UserInfo.roles | -| `cameleer3-server-app/.../security/OidcAuthController.java` | Use user_roles for role resolution | -| `cameleer3-server-app/.../security/JwtAuthenticationFilter.java` | No change (reads roles from JWT, not DB) | -| `cameleer3-server-app/.../security/AgentRegistrationController.java` | Use user_roles for AGENT role | -| `cameleer3-server-app/src/test/.../TestSecurityHelper.java` | No change (creates JWT directly) | +| `cameleer-server-core/.../security/UserInfo.java` | Remove `roles` field | +| `cameleer-server-core/.../security/UserRepository.java` | Remove `updateRoles`, add `findSystemRoles` | +| `cameleer-server-core/.../admin/AuditCategory.java` | Add `RBAC` category | +| `cameleer-server-app/.../storage/PostgresUserRepository.java` | Rewrite for new schema (no roles column, use user_roles join) | +| `cameleer-server-app/.../controller/UserAdminController.java` | Rewrite: use RbacService, new endpoints | +| `cameleer-server-app/.../security/UiAuthController.java` | Use user_roles instead of UserInfo.roles | +| `cameleer-server-app/.../security/OidcAuthController.java` | Use user_roles for role resolution | +| `cameleer-server-app/.../security/JwtAuthenticationFilter.java` | No change (reads roles from JWT, not DB) | +| `cameleer-server-app/.../security/AgentRegistrationController.java` | Use user_roles for AGENT role | +| `cameleer-server-app/src/test/.../TestSecurityHelper.java` | No change (creates JWT directly) | ### Backend — Deleted Files | File | |---| -| `cameleer3-server-app/src/main/resources/db/migration/V2__executions.sql` | -| `cameleer3-server-app/src/main/resources/db/migration/V3__processor_executions.sql` | -| `cameleer3-server-app/src/main/resources/db/migration/V4__agent_metrics.sql` | -| `cameleer3-server-app/src/main/resources/db/migration/V5__route_diagrams.sql` | -| `cameleer3-server-app/src/main/resources/db/migration/V6__users.sql` | -| `cameleer3-server-app/src/main/resources/db/migration/V7__oidc_config.sql` | -| `cameleer3-server-app/src/main/resources/db/migration/V8__continuous_aggregates.sql` | -| `cameleer3-server-app/src/main/resources/db/migration/V9__admin_thresholds.sql` | -| `cameleer3-server-app/src/main/resources/db/migration/V10__audit_log.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V2__executions.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V3__processor_executions.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V4__agent_metrics.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V5__route_diagrams.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V6__users.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V7__oidc_config.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V8__continuous_aggregates.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V9__admin_thresholds.sql` | +| `cameleer-server-app/src/main/resources/db/migration/V10__audit_log.sql` | ### Frontend — New Files | File | Responsibility | @@ -98,7 +98,7 @@ ### Task 1: Consolidate Flyway Migrations **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V1__init.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V1__init.sql` - Delete: `V1__extensions.sql` through `V10__audit_log.sql` (10 files) - [ ] **Step 1: Create consolidated V1__init.sql** @@ -106,7 +106,7 @@ Combine all existing migration content (V1–V10) into a single file, replacing the `users` table definition to drop `roles TEXT[]`, and adding the new RBAC tables. Order: extensions → users (new) → roles (with seeds) → groups → join tables → executions → processor_executions → agent_metrics → route_diagrams → oidc_config → continuous_aggregates → admin_thresholds → audit_log → indexes. ```sql --- V1__init.sql — Consolidated schema for Cameleer3 +-- V1__init.sql — Consolidated schema for Cameleer -- Extensions CREATE EXTENSION IF NOT EXISTS timescaledb; @@ -400,7 +400,7 @@ CREATE INDEX idx_audit_log_target ON audit_log (target); - [ ] **Step 2: Delete old migration files** ```bash -cd cameleer3-server-app/src/main/resources/db/migration +cd cameleer-server-app/src/main/resources/db/migration rm V2__executions.sql V3__processor_executions.sql V4__agent_metrics.sql V5__route_diagrams.sql V6__users.sql V7__oidc_config.sql V8__continuous_aggregates.sql V9__admin_thresholds.sql V10__audit_log.sql # Keep V1__extensions.sql but it's been replaced by V1__init.sql — rename the old one first mv V1__extensions.sql V1__extensions.sql.bak @@ -417,8 +417,8 @@ rm V1__extensions.sql V2__executions.sql V3__processor_executions.sql V4__agent_ - [ ] **Step 3: Verify the migration compiles** ```bash -cd /c/Users/Hendrik/Documents/projects/cameleer3-server -mvn clean compile -pl cameleer3-server-app +cd /c/Users/Hendrik/Documents/projects/cameleer-server +mvn clean compile -pl cameleer-server-app ``` Expected: BUILD SUCCESS (Flyway doesn't run at compile time, just packaging) @@ -426,7 +426,7 @@ Expected: BUILD SUCCESS (Flyway doesn't run at compile time, just packaging) - [ ] **Step 4: Commit** ```bash -git add -A cameleer3-server-app/src/main/resources/db/migration/ +git add -A cameleer-server-app/src/main/resources/db/migration/ git commit -m "refactor: consolidate V1-V10 Flyway migrations into single V1__init.sql Add RBAC tables (roles, groups, group_roles, user_groups, user_roles) @@ -438,25 +438,25 @@ with system role seeds and join indexes. Drop users.roles TEXT[] column." ### Task 2: RBAC Domain Model (core module) **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/SystemRole.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserDetail.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupDetail.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleDetail.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/UserSummary.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupSummary.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleSummary.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacStats.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/GroupRepository.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RoleRepository.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/rbac/RbacService.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserInfo.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserRepository.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditCategory.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/SystemRole.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserDetail.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupDetail.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleDetail.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/UserSummary.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupSummary.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleSummary.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacStats.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/GroupRepository.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RoleRepository.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/rbac/RbacService.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserInfo.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserRepository.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditCategory.java` - [ ] **Step 1: Create SystemRole constants** ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.Map; import java.util.Set; @@ -489,14 +489,14 @@ public final class SystemRole { `UserSummary.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; public record UserSummary(String userId, String displayName, String provider) {} ``` `GroupSummary.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.UUID; @@ -505,7 +505,7 @@ public record GroupSummary(UUID id, String name) {} `RoleSummary.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.UUID; @@ -514,7 +514,7 @@ public record RoleSummary(UUID id, String name, boolean system, String source) { `RbacStats.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; public record RbacStats(int userCount, int activeUserCount, int groupCount, int maxGroupDepth, int roleCount) {} ``` @@ -523,7 +523,7 @@ public record RbacStats(int userCount, int activeUserCount, int groupCount, int `UserDetail.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.time.Instant; import java.util.List; @@ -543,7 +543,7 @@ public record UserDetail( `GroupDetail.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.time.Instant; import java.util.List; @@ -563,7 +563,7 @@ public record GroupDetail( `RoleDetail.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.time.Instant; import java.util.List; @@ -586,7 +586,7 @@ public record RoleDetail( `GroupRepository.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.List; import java.util.Optional; @@ -607,7 +607,7 @@ public interface GroupRepository { `RoleRepository.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.List; import java.util.Optional; @@ -624,7 +624,7 @@ public interface RoleRepository { `RbacService.java`: ```java -package com.cameleer3.server.core.rbac; +package com.cameleer.server.core.rbac; import java.util.List; import java.util.UUID; @@ -651,10 +651,10 @@ public interface RbacService { - [ ] **Step 5: Update UserInfo — remove roles field** -In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserInfo.java`, change to: +In `cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserInfo.java`, change to: ```java -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; import java.time.Instant; @@ -669,10 +669,10 @@ public record UserInfo( - [ ] **Step 6: Update UserRepository interface** -In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/UserRepository.java`, change to: +In `cameleer-server-core/src/main/java/com/cameleer/server/core/security/UserRepository.java`, change to: ```java -package com.cameleer3.server.core.security; +package com.cameleer.server.core.security; import java.util.List; import java.util.Optional; @@ -689,7 +689,7 @@ Remove `updateRoles` method (role management moves to `RbacService`). - [ ] **Step 7: Add RBAC audit category** -In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/admin/AuditCategory.java`, add `RBAC`: +In `cameleer-server-core/src/main/java/com/cameleer/server/core/admin/AuditCategory.java`, add `RBAC`: ```java public enum AuditCategory { @@ -700,7 +700,7 @@ public enum AuditCategory { - [ ] **Step 8: Verify core module compiles** ```bash -mvn clean compile -pl cameleer3-server-core +mvn clean compile -pl cameleer-server-core ``` Expected: BUILD SUCCESS @@ -712,17 +712,17 @@ Expected: BUILD SUCCESS ### Task 3: PostgresUserRepository — Adapt to New Schema **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresUserRepository.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresUserRepository.java` - [ ] **Step 1: Rewrite PostgresUserRepository** The `upsert` no longer writes roles (no `roles` column). The `mapUser` no longer reads a roles array. Remove `updateRoles` method. ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @@ -793,15 +793,15 @@ public class PostgresUserRepository implements UserRepository { ### Task 4: PostgresGroupRepository and PostgresRoleRepository **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresGroupRepository.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresRoleRepository.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresGroupRepository.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresRoleRepository.java` - [ ] **Step 1: Implement PostgresGroupRepository** ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.rbac.*; +import com.cameleer.server.core.rbac.*; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @@ -920,9 +920,9 @@ public class PostgresGroupRepository implements GroupRepository { - [ ] **Step 2: Implement PostgresRoleRepository** ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.rbac.*; +import com.cameleer.server.core.rbac.*; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; @@ -1010,7 +1010,7 @@ public class PostgresRoleRepository implements RoleRepository { - [ ] **Step 3: Verify compile** ```bash -mvn clean compile -pl cameleer3-server-app +mvn clean compile -pl cameleer-server-app ``` Expected: May still have errors from files referencing `UserInfo.roles()` — those are fixed in Task 6. @@ -1022,18 +1022,18 @@ Expected: May still have errors from files referencing `UserInfo.roles()` — th ### Task 5: RbacServiceImpl — Inheritance Logic **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/rbac/RbacServiceImpl.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/rbac/RbacServiceImpl.java` - [ ] **Step 1: Implement RbacServiceImpl** This is the core service that computes inheritance. It reads from `user_roles`, `user_groups`, `group_roles`, and `groups` tables to compute effective roles/groups. ```java -package com.cameleer3.server.app.rbac; +package com.cameleer.server.app.rbac; -import com.cameleer3.server.core.rbac.*; -import com.cameleer3.server.core.security.UserInfo; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.core.rbac.*; +import com.cameleer.server.core.security.UserInfo; +import com.cameleer.server.core.security.UserRepository; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @@ -1304,9 +1304,9 @@ public class RbacServiceImpl implements RbacService { ### Task 6: Auth Integration — Update Login and OIDC Flows **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/UiAuthController.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/OidcAuthController.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/UiAuthController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/OidcAuthController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java` These controllers currently embed roles in `UserInfo` and pass them to JWT creation. After the change, they must: 1. Create/upsert the `UserInfo` (without roles) @@ -1357,10 +1357,10 @@ Expected: BUILD SUCCESS (all `UserInfo.roles()` references resolved) This is the single commit for the entire backend RBAC model. Tasks 2–6 must all be done before committing since intermediate states don't compile. ```bash -git add cameleer3-server-core/ cameleer3-server-app/src/main/java/ +git add cameleer-server-core/ cameleer-server-app/src/main/java/ git commit -m "feat: replace flat users.roles with relational RBAC model -New package com.cameleer3.server.core.rbac with SystemRole constants, +New package com.cameleer.server.core.rbac with SystemRole constants, detail/summary records, GroupRepository, RoleRepository, RbacService. Remove roles field from UserInfo. Implement PostgresGroupRepository, PostgresRoleRepository, RbacServiceImpl with inheritance computation. @@ -1373,19 +1373,19 @@ to assign roles via user_roles table. JWT populated from effective system roles. ### Task 7: Admin Controllers — Users, Groups, Roles, Stats **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/GroupAdminController.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RoleAdminController.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RbacStatsController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/GroupAdminController.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RoleAdminController.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RbacStatsController.java` - [ ] **Step 1: Rewrite UserAdminController** ```java -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.admin.*; -import com.cameleer3.server.core.rbac.*; -import com.cameleer3.server.core.security.UserRepository; +import com.cameleer.server.core.admin.*; +import com.cameleer.server.core.rbac.*; +import com.cameleer.server.core.security.UserRepository; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; @@ -1485,10 +1485,10 @@ public class UserAdminController { - [ ] **Step 2: Create GroupAdminController** ```java -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.admin.*; -import com.cameleer3.server.core.rbac.*; +import com.cameleer.server.core.admin.*; +import com.cameleer.server.core.rbac.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; @@ -1608,10 +1608,10 @@ public class GroupAdminController { - [ ] **Step 3: Create RoleAdminController** ```java -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.admin.*; -import com.cameleer3.server.core.rbac.*; +import com.cameleer.server.core.admin.*; +import com.cameleer.server.core.rbac.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; @@ -1701,10 +1701,10 @@ public class RoleAdminController { - [ ] **Step 4: Create RbacStatsController** ```java -package com.cameleer3.server.app.controller; +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.rbac.RbacService; -import com.cameleer3.server.core.rbac.RbacStats; +import com.cameleer.server.core.rbac.RbacService; +import com.cameleer.server.core.rbac.RbacStats; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; @@ -1742,7 +1742,7 @@ Expected: BUILD SUCCESS - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ +git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ git commit -m "feat: add Group, Role, and RBAC stats admin controllers GroupAdminController with cycle detection, RoleAdminController @@ -1763,8 +1763,8 @@ Rewrite UserAdminController to use RbacService." Search for references to `UserInfo` constructor with 6 args (now 5) or `.roles()` calls in test files. Update constructor calls, remove roles parameter. ```bash -grep -rn "UserInfo(" cameleer3-server-app/src/test/ -grep -rn "\.roles()" cameleer3-server-app/src/test/ +grep -rn "UserInfo(" cameleer-server-app/src/test/ +grep -rn "\.roles()" cameleer-server-app/src/test/ ``` Fix each reference. `TestSecurityHelper` creates JWT directly with roles — this doesn't change since JWT creation still takes `List roles`. diff --git a/docs/superpowers/plans/2026-03-23-ui-mock-alignment.md b/docs/superpowers/plans/2026-03-23-ui-mock-alignment.md index e1651486..db3224d8 100644 --- a/docs/superpowers/plans/2026-03-23-ui-mock-alignment.md +++ b/docs/superpowers/plans/2026-03-23-ui-mock-alignment.md @@ -2,7 +2,7 @@ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. -**Goal:** Close all visual and functional gaps between the `@cameleer/design-system` v0.0.2 mocks and the cameleer3-server UI. +**Goal:** Close all visual and functional gaps between the `@cameleer/design-system` v0.0.2 mocks and the cameleer-server UI. **Architecture:** Backend-first (new endpoints + migration), then frontend page-by-page alignment. Each task produces one git commit. Backend tasks use Spring Boot controllers querying TimescaleDB continuous aggregates. Frontend tasks modify React pages consuming design system components with TanStack Query hooks. @@ -15,20 +15,20 @@ ## File Structure ### New backend files -- `cameleer3-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql` -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ProcessorMetrics.java` -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentMetricsResponse.java` -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/MetricBucket.java` -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SetPasswordRequest.java` -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java` +- `cameleer-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql` +- `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ProcessorMetrics.java` +- `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentMetricsResponse.java` +- `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/MetricBucket.java` +- `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SetPasswordRequest.java` +- `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java` ### Modified backend files -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentInstanceResponse.java` — add `version`, `capabilities` -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java` — map new fields -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteMetricsController.java` — add processor stats method -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java` — add password reset -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java` — agent metrics rule -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenApiConfig.java` — register new DTOs +- `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentInstanceResponse.java` — add `version`, `capabilities` +- `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java` — map new fields +- `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteMetricsController.java` — add processor stats method +- `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java` — add password reset +- `cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java` — agent metrics rule +- `cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenApiConfig.java` — register new DTOs ### New frontend files - `ui/src/pages/Routes/RouteDetail.tsx` + `RouteDetail.module.css` @@ -58,7 +58,7 @@ ## Task 1: V7 Migration — Processor Stats Continuous Aggregate **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql` - [ ] **Step 1: Create migration file** @@ -88,13 +88,13 @@ SELECT add_continuous_aggregate_policy('stats_1m_processor_detail', - [ ] **Step 2: Verify migration compiles** -Run: `cd cameleer3-server-app && mvn clean compile -q 2>&1 | tail -5` +Run: `cd cameleer-server-app && mvn clean compile -q 2>&1 | tail -5` Expected: BUILD SUCCESS (Flyway picks up migration at runtime) - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql +git add cameleer-server-app/src/main/resources/db/migration/V7__processor_stats_by_id.sql git commit -m "feat: add V7 migration for per-processor-id continuous aggregate" ``` @@ -103,14 +103,14 @@ git commit -m "feat: add V7 migration for per-processor-id continuous aggregate" ## Task 2: Backend — Processor Stats Endpoint **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ProcessorMetrics.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteMetricsController.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenApiConfig.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ProcessorMetrics.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteMetricsController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenApiConfig.java` - [ ] **Step 1: Create ProcessorMetrics DTO** ```java -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import jakarta.validation.constraints.NotNull; @@ -159,9 +159,9 @@ Expected: BUILD SUCCESS - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/ProcessorMetrics.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/RouteMetricsController.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenApiConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/dto/ProcessorMetrics.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/RouteMetricsController.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenApiConfig.java git commit -m "feat: add GET /routes/metrics/processors endpoint" ``` @@ -170,17 +170,17 @@ git commit -m "feat: add GET /routes/metrics/processors endpoint" ## Task 3: Backend — Agent Metrics Query Endpoint **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentMetricsResponse.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/MetricBucket.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenApiConfig.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentMetricsResponse.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/MetricBucket.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenApiConfig.java` - [ ] **Step 1: Create DTOs** `MetricBucket.java`: ```java -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import java.time.Instant; import jakarta.validation.constraints.NotNull; @@ -193,7 +193,7 @@ public record MetricBucket( `AgentMetricsResponse.java`: ```java -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import java.util.List; import java.util.Map; @@ -207,10 +207,10 @@ public record AgentMetricsResponse( - [ ] **Step 2: Create AgentMetricsController** ```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.cameleer.server.app.dto.AgentMetricsResponse; +import com.cameleer.server.app.dto.MetricBucket; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.*; @@ -277,7 +277,7 @@ public class AgentMetricsController { - [ ] **Step 3: Add SecurityConfig rule** -In `SecurityConfig.java` (path: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java`), add a new matcher for the agent metrics path. Find the section with VIEWER role matchers and add: +In `SecurityConfig.java` (path: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java`), add a new matcher for the agent metrics path. Find the section with VIEWER role matchers and add: ```java .requestMatchers(HttpMethod.GET, "/api/v1/agents/*/metrics").hasAnyRole("VIEWER", "OPERATOR", "ADMIN") ``` @@ -295,11 +295,11 @@ Expected: BUILD SUCCESS - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/MetricBucket.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentMetricsResponse.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentMetricsController.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/OpenApiConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/dto/MetricBucket.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentMetricsResponse.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentMetricsController.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/config/OpenApiConfig.java git commit -m "feat: add GET /agents/{id}/metrics endpoint for JVM metrics" ``` @@ -308,10 +308,10 @@ git commit -m "feat: add GET /agents/{id}/metrics endpoint for JVM metrics" ## Task 4: Backend — Enrich AgentInstanceResponse + Password Reset **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentInstanceResponse.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SetPasswordRequest.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentInstanceResponse.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SetPasswordRequest.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java` - [ ] **Step 1: Add fields to AgentInstanceResponse** @@ -347,7 +347,7 @@ public AgentInstanceResponse withMetrics(double tps, double errorRate, int activ - [ ] **Step 2: Create SetPasswordRequest DTO** ```java -package com.cameleer3.server.app.dto; +package com.cameleer.server.app.dto; import jakarta.validation.constraints.NotBlank; @@ -400,10 +400,10 @@ Expected: BUILD SUCCESS - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/AgentInstanceResponse.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentRegistrationController.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/SetPasswordRequest.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/dto/AgentInstanceResponse.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentRegistrationController.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/dto/SetPasswordRequest.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java git commit -m "feat: enrich AgentInstanceResponse with version/capabilities, add password reset endpoint" ``` diff --git a/docs/superpowers/plans/2026-03-26-taps-attributes-replay.md b/docs/superpowers/plans/2026-03-26-taps-attributes-replay.md index b3e4384d..e179b9f5 100644 --- a/docs/superpowers/plans/2026-03-26-taps-attributes-replay.md +++ b/docs/superpowers/plans/2026-03-26-taps-attributes-replay.md @@ -15,26 +15,26 @@ ## File Map ### Backend — New Files -- `cameleer3-server-app/src/main/resources/db/migration/V5__attributes.sql` — Flyway migration adding `attributes JSONB` to executions and processor_executions tables -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionRequest.java` — Request DTO for test-expression endpoint -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionResponse.java` — Response DTO for test-expression endpoint +- `cameleer-server-app/src/main/resources/db/migration/V5__attributes.sql` — Flyway migration adding `attributes JSONB` to executions and processor_executions tables +- `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionRequest.java` — Request DTO for test-expression endpoint +- `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionResponse.java` — Response DTO for test-expression endpoint ### Backend — Modified Files -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandType.java` — add TEST_EXPRESSION -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java` — add attributes to ExecutionRecord and ProcessorRecord -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ExecutionDetail.java` — add attributes field -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java` — add attributes field -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java` — pass attributes through tree reconstruction -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionSummary.java` — add attributes field -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java` — extract attributes from RouteExecution/ProcessorExecution -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionDocument.java` — add attributes to ProcessorDoc -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexer.java` — include attributes in indexing -- `cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java` — add CompletableFuture-based command reply support -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java` — add attributes to INSERT/UPDATE queries -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchIndex.java` — add attributes to toMap() and fromSearchHit() -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ApplicationConfigController.java` — add test-expression endpoint -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java` — add test-expression mapping, complete futures on ACK -- `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandAckRequest.java` — add optional data field +- `cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandType.java` — add TEST_EXPRESSION +- `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java` — add attributes to ExecutionRecord and ProcessorRecord +- `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ExecutionDetail.java` — add attributes field +- `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java` — add attributes field +- `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java` — pass attributes through tree reconstruction +- `cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionSummary.java` — add attributes field +- `cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java` — extract attributes from RouteExecution/ProcessorExecution +- `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionDocument.java` — add attributes to ProcessorDoc +- `cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexer.java` — include attributes in indexing +- `cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java` — add CompletableFuture-based command reply support +- `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java` — add attributes to INSERT/UPDATE queries +- `cameleer-server-app/src/main/java/com/cameleer/server/app/search/OpenSearchIndex.java` — add attributes to toMap() and fromSearchHit() +- `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ApplicationConfigController.java` — add test-expression endpoint +- `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java` — add test-expression mapping, complete futures on ACK +- `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandAckRequest.java` — add optional data field ### Frontend — Modified Files - `ui/src/api/schema.d.ts` — add attributes to ExecutionDetail, ProcessorNode, ExecutionSummary @@ -52,13 +52,13 @@ ## Task 1: Verify Prerequisites and Database Migration **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V5__attributes.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V5__attributes.sql` -- [ ] **Step 1: Verify cameleer3-common has attributes support** +- [ ] **Step 1: Verify cameleer-common has attributes support** -Confirm the `cameleer3-common` SNAPSHOT dependency includes `RouteExecution.getAttributes()` and `ProcessorExecution.getAttributes()`. Run: +Confirm the `cameleer-common` SNAPSHOT dependency includes `RouteExecution.getAttributes()` and `ProcessorExecution.getAttributes()`. Run: ```bash -mvn dependency:sources -pl cameleer3-server-core -q +mvn dependency:sources -pl cameleer-server-core -q ``` Then inspect the source jar for `RouteExecution.java` to confirm the `attributes` field exists. If it does not, the dependency must be updated first. @@ -72,13 +72,13 @@ ALTER TABLE processor_executions ADD COLUMN IF NOT EXISTS attributes JSONB; - [ ] **Step 3: Verify migration compiles** -Run: `cd cameleer3-server-app && mvn compile -pl . -q` +Run: `cd cameleer-server-app && mvn compile -pl . -q` Expected: BUILD SUCCESS - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/resources/db/migration/V5__attributes.sql +git add cameleer-server-app/src/main/resources/db/migration/V5__attributes.sql git commit -m "feat: add attributes JSONB columns to executions and processor_executions" ``` @@ -87,10 +87,10 @@ git commit -m "feat: add attributes JSONB columns to executions and processor_ex ## Task 2: Backend — Add Attributes to Storage Records and Detail Models **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ExecutionDetail.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/search/ExecutionSummary.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ExecutionDetail.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/search/ExecutionSummary.java` - [ ] **Step 1: Add `attributes` field to `ExecutionRecord`** @@ -120,7 +120,7 @@ Expected: Compilation errors in files that construct these records — these wil - [ ] **Step 7: Commit** ```bash -git add cameleer3-server-core/ +git add cameleer-server-core/ git commit -m "feat: add attributes field to ExecutionRecord, ProcessorRecord, ExecutionDetail, ProcessorNode, ExecutionSummary" ``` @@ -129,8 +129,8 @@ git commit -m "feat: add attributes field to ExecutionRecord, ProcessorRecord, E ## Task 3: Backend — Attributes Ingestion Pipeline **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java` - [ ] **Step 1: Extract attributes in `IngestionService.toExecutionRecord()`** @@ -169,8 +169,8 @@ Expected: BUILD SUCCESS (or remaining errors from DetailService/SearchIndexer wh - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java git commit -m "feat: store execution and processor attributes from agent data" ``` @@ -179,10 +179,10 @@ git commit -m "feat: store execution and processor attributes from agent data" ## Task 4: Backend — Attributes in Detail Service and OpenSearch Indexing **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionDocument.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/indexing/SearchIndexer.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchIndex.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionDocument.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/indexing/SearchIndexer.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/search/OpenSearchIndex.java` - [ ] **Step 1: Pass attributes through `DetailService.buildTree()`** @@ -218,7 +218,7 @@ Expected: BUILD SUCCESS - [ ] **Step 8: Commit** ```bash -git add cameleer3-server-core/ cameleer3-server-app/ +git add cameleer-server-core/ cameleer-server-app/ git commit -m "feat: thread attributes through detail service and OpenSearch indexing" ``` @@ -227,13 +227,13 @@ git commit -m "feat: thread attributes through detail service and OpenSearch ind ## Task 5: Backend — TEST_EXPRESSION Command and Request-Reply Infrastructure **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/CommandType.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/agent/AgentRegistryService.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/CommandAckRequest.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AgentCommandController.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionRequest.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/dto/TestExpressionResponse.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ApplicationConfigController.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/agent/CommandType.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/agent/AgentRegistryService.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/CommandAckRequest.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AgentCommandController.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionRequest.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/dto/TestExpressionResponse.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ApplicationConfigController.java` - [ ] **Step 1: Add TEST_EXPRESSION to CommandType enum** @@ -327,7 +327,7 @@ Expected: BUILD SUCCESS - [ ] **Step 9: Commit** ```bash -git add cameleer3-server-core/ cameleer3-server-app/ +git add cameleer-server-core/ cameleer-server-app/ git commit -m "feat: add TEST_EXPRESSION command with request-reply infrastructure" ``` diff --git a/docs/superpowers/plans/2026-03-27-execution-overlay.md b/docs/superpowers/plans/2026-03-27-execution-overlay.md index 357a6b29..f7a0da12 100644 --- a/docs/superpowers/plans/2026-03-27-execution-overlay.md +++ b/docs/superpowers/plans/2026-03-27-execution-overlay.md @@ -18,13 +18,13 @@ | Action | File | Responsibility | |--------|------|---------------| -| Create | `cameleer3-server-app/src/main/resources/db/migration/V8__processor_iteration_fields.sql` | Add iteration columns to processor_executions | -| Modify | `cameleer3-server-core/.../storage/ExecutionStore.java` | Extend ProcessorRecord with iteration fields | -| Modify | `cameleer3-server-app/.../storage/PostgresExecutionStore.java` | Update SQL queries for new columns | -| Modify | `cameleer3-server-core/.../ingestion/IngestionService.java` | Store iteration fields during ingestion | -| Modify | `cameleer3-server-core/.../detail/ProcessorNode.java` | Add iteration fields to detail model | -| Modify | `cameleer3-server-core/.../detail/DetailService.java` | Pass iteration fields through tree builder | -| Modify | `cameleer3-server-app/.../controller/DetailController.java` | Add snapshot-by-processorId endpoint | +| Create | `cameleer-server-app/src/main/resources/db/migration/V8__processor_iteration_fields.sql` | Add iteration columns to processor_executions | +| Modify | `cameleer-server-core/.../storage/ExecutionStore.java` | Extend ProcessorRecord with iteration fields | +| Modify | `cameleer-server-app/.../storage/PostgresExecutionStore.java` | Update SQL queries for new columns | +| Modify | `cameleer-server-core/.../ingestion/IngestionService.java` | Store iteration fields during ingestion | +| Modify | `cameleer-server-core/.../detail/ProcessorNode.java` | Add iteration fields to detail model | +| Modify | `cameleer-server-core/.../detail/DetailService.java` | Pass iteration fields through tree builder | +| Modify | `cameleer-server-app/.../controller/DetailController.java` | Add snapshot-by-processorId endpoint | ### Frontend Changes @@ -59,7 +59,7 @@ ## Prerequisites -Before starting, verify that the `cameleer3-common` dependency (in the agent repo) exposes iteration getters on `ProcessorExecution`: `getLoopIndex()`, `getLoopSize()`, `getSplitIndex()`, `getSplitSize()`, `getMulticastIndex()`. If these methods do not exist in the current published version, they must be added to `cameleer3-common` and a new SNAPSHOT or release published before Task 1 Step 4 can work. Check `cameleer3/cameleer3-common/src/main/java/com/cameleer3/common/model/ProcessorExecution.java`. +Before starting, verify that the `cameleer-common` dependency (in the agent repo) exposes iteration getters on `ProcessorExecution`: `getLoopIndex()`, `getLoopSize()`, `getSplitIndex()`, `getSplitSize()`, `getMulticastIndex()`. If these methods do not exist in the current published version, they must be added to `cameleer-common` and a new SNAPSHOT or release published before Task 1 Step 4 can work. Check `cameleer/cameleer-common/src/main/java/com/cameleer/common/model/ProcessorExecution.java`. Note on migration versioning: The next migration is V8. If other work merges before this plan executes, bump the version number accordingly. @@ -72,12 +72,12 @@ Note on migration versioning: The next migration is V8. If other work merges bef Add `loop_index`, `loop_size`, `split_index`, `split_size`, `multicast_index` columns to the database and thread them through the storage → ingestion → detail pipeline. **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V8__processor_iteration_fields.sql` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java` +- Create: `cameleer-server-app/src/main/resources/db/migration/V8__processor_iteration_fields.sql` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java` - [ ] **Step 1: Create Flyway migration V8** @@ -176,12 +176,12 @@ Expected: BUILD SUCCESS - [ ] **Step 8: Commit** ```bash -git add cameleer3-server-app/src/main/resources/db/migration/V8__processor_iteration_fields.sql \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/IngestionService.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/ProcessorNode.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java +git add cameleer-server-app/src/main/resources/db/migration/V8__processor_iteration_fields.sql \ + cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/IngestionService.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/detail/ProcessorNode.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java git commit -m "feat: add iteration fields to processor storage and detail model" ``` @@ -192,10 +192,10 @@ git commit -m "feat: add iteration fields to processor storage and detail model" Add a REST endpoint that fetches processor snapshot data by processorId instead of positional index. **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java` - [ ] **Step 1: Add findProcessorById to ExecutionStore interface** @@ -251,10 +251,10 @@ Expected: BUILD SUCCESS - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/ExecutionStore.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresExecutionStore.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/detail/DetailService.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DetailController.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/storage/ExecutionStore.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresExecutionStore.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/detail/DetailService.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DetailController.java git commit -m "feat: add snapshot-by-processorId endpoint" ``` @@ -274,7 +274,7 @@ Run the server locally, then fetch the OpenAPI spec: ```bash # Build and run -cd cameleer3-server-app && mvn spring-boot:run -DskipTests & +cd cameleer-server-app && mvn spring-boot:run -DskipTests & # Wait for startup, then fetch curl -s http://localhost:8080/v3/api-docs | python3 -m json.tool > ui/src/api/openapi.json ``` diff --git a/docs/superpowers/plans/2026-03-31-clickhouse-phase1-foundation.md b/docs/superpowers/plans/2026-03-31-clickhouse-phase1-foundation.md index 6e84d575..7019d9f9 100644 --- a/docs/superpowers/plans/2026-03-31-clickhouse-phase1-foundation.md +++ b/docs/superpowers/plans/2026-03-31-clickhouse-phase1-foundation.md @@ -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 @@ -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` 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 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` diff --git a/docs/superpowers/plans/2026-03-31-clickhouse-phase2-executions-search.md b/docs/superpowers/plans/2026-03-31-clickhouse-phase2-executions-search.md index 904b8d10..5f65d992 100644 --- a/docs/superpowers/plans/2026-03-31-clickhouse-phase2-executions-search.md +++ b/docs/superpowers/plans/2026-03-31-clickhouse-phase2-executions-search.md @@ -10,7 +10,7 @@ **Design Spec:** `docs/superpowers/specs/2026-03-31-clickhouse-migration-design.md` -**Note on cameleer3-common:** The agent team is refactoring `cameleer3-common` to add `ExecutionChunk` and `FlatProcessorRecord`. Until that library is published, this plan defines server-side DTOs in `cameleer3-server-core` that mirror the common models. When the common lib is ready, swap the server DTOs for the shared classes (import change only). +**Note on cameleer-common:** The agent team is refactoring `cameleer-common` to add `ExecutionChunk` and `FlatProcessorRecord`. Until that library is published, this plan defines server-side DTOs in `cameleer-server-core` that mirror the common models. When the common lib is ready, swap the server DTOs for the shared classes (import change only). --- @@ -18,38 +18,38 @@ | File | Responsibility | |------|----------------| -| `cameleer3-server-app/.../resources/clickhouse/V2__executions.sql` | DDL for `executions` table (ReplacingMergeTree) | -| `cameleer3-server-app/.../resources/clickhouse/V3__processor_executions.sql` | DDL for `processor_executions` table (MergeTree) — uses seq/parentSeq/iteration | -| `cameleer3-server-core/.../model/ExecutionChunk.java` | Server-side DTO mirroring agent's ExecutionChunk (temporary until common lib ready) | -| `cameleer3-server-core/.../model/FlatProcessorRecord.java` | Server-side DTO mirroring agent's FlatProcessorRecord (temporary until common lib ready) | -| `cameleer3-server-core/.../ingestion/ChunkAccumulator.java` | Accumulates exchange envelope across chunks, pushes processor records + final execution row to WriteBuffers | -| `cameleer3-server-core/.../ingestion/MergedExecution.java` | Record holding merged execution envelope + version + tenant | -| `cameleer3-server-app/.../storage/ClickHouseExecutionStore.java` | Batch INSERT for executions + processor_executions to ClickHouse | -| `cameleer3-server-app/.../search/ClickHouseSearchIndex.java` | SearchIndex impl using SQL with ngram indexes | -| `cameleer3-server-app/.../ingestion/ExecutionFlushScheduler.java` | Drains execution + processor WriteBuffers → ClickHouseExecutionStore | -| `cameleer3-server-app/.../controller/ChunkIngestionController.java` | REST endpoint `POST /api/v1/data/chunks` accepting ExecutionChunk | -| `cameleer3-server-app/.../config/StorageBeanConfig.java` | Modified: add chunk accumulator + CH search beans | -| `cameleer3-server-app/.../config/IngestionBeanConfig.java` | Modified: add execution + processor WriteBuffer beans | -| `cameleer3-server-app/.../resources/application.yml` | Modified: add `cameleer.storage.search` flag | -| `cameleer3-server-app/...test.../storage/ClickHouseExecutionStoreIT.java` | Integration test for CH execution writes | -| `cameleer3-server-app/...test.../search/ClickHouseSearchIndexIT.java` | Integration test for CH search | -| `cameleer3-server-core/...test.../ingestion/ChunkAccumulatorTest.java` | Unit test for accumulator logic | +| `cameleer-server-app/.../resources/clickhouse/V2__executions.sql` | DDL for `executions` table (ReplacingMergeTree) | +| `cameleer-server-app/.../resources/clickhouse/V3__processor_executions.sql` | DDL for `processor_executions` table (MergeTree) — uses seq/parentSeq/iteration | +| `cameleer-server-core/.../model/ExecutionChunk.java` | Server-side DTO mirroring agent's ExecutionChunk (temporary until common lib ready) | +| `cameleer-server-core/.../model/FlatProcessorRecord.java` | Server-side DTO mirroring agent's FlatProcessorRecord (temporary until common lib ready) | +| `cameleer-server-core/.../ingestion/ChunkAccumulator.java` | Accumulates exchange envelope across chunks, pushes processor records + final execution row to WriteBuffers | +| `cameleer-server-core/.../ingestion/MergedExecution.java` | Record holding merged execution envelope + version + tenant | +| `cameleer-server-app/.../storage/ClickHouseExecutionStore.java` | Batch INSERT for executions + processor_executions to ClickHouse | +| `cameleer-server-app/.../search/ClickHouseSearchIndex.java` | SearchIndex impl using SQL with ngram indexes | +| `cameleer-server-app/.../ingestion/ExecutionFlushScheduler.java` | Drains execution + processor WriteBuffers → ClickHouseExecutionStore | +| `cameleer-server-app/.../controller/ChunkIngestionController.java` | REST endpoint `POST /api/v1/data/chunks` accepting ExecutionChunk | +| `cameleer-server-app/.../config/StorageBeanConfig.java` | Modified: add chunk accumulator + CH search beans | +| `cameleer-server-app/.../config/IngestionBeanConfig.java` | Modified: add execution + processor WriteBuffer beans | +| `cameleer-server-app/.../resources/application.yml` | Modified: add `cameleer.storage.search` flag | +| `cameleer-server-app/...test.../storage/ClickHouseExecutionStoreIT.java` | Integration test for CH execution writes | +| `cameleer-server-app/...test.../search/ClickHouseSearchIndexIT.java` | Integration test for CH search | +| `cameleer-server-core/...test.../ingestion/ChunkAccumulatorTest.java` | Unit test for accumulator logic | --- ### Task 1: Server-Side DTOs (ExecutionChunk + FlatProcessorRecord) **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/FlatProcessorRecord.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionChunk.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/FlatProcessorRecord.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionChunk.java` -These mirror the agent's models exactly. When `cameleer3-common` is published with these classes, delete these files and update imports. +These mirror the agent's models exactly. When `cameleer-common` is published with these classes, delete these files and update imports. - [ ] **Step 1: Create FlatProcessorRecord** ```java -// cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/FlatProcessorRecord.java -package com.cameleer3.server.core.storage.model; +// cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/FlatProcessorRecord.java +package com.cameleer.server.core.storage.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -59,7 +59,7 @@ import java.util.Map; /** * Flat processor execution record with seq/parentSeq for tree reconstruction. - * Mirrors cameleer3-common FlatProcessorRecord — replace with common lib import when available. + * Mirrors cameleer-common FlatProcessorRecord — replace with common lib import when available. */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) @@ -96,8 +96,8 @@ public record FlatProcessorRecord( - [ ] **Step 2: Create ExecutionChunk** ```java -// cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionChunk.java -package com.cameleer3.server.core.storage.model; +// cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionChunk.java +package com.cameleer.server.core.storage.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -109,7 +109,7 @@ import java.util.Map; /** * Chunk document: exchange envelope + list of FlatProcessorRecords. - * Mirrors cameleer3-common ExecutionChunk — replace with common lib import when available. + * Mirrors cameleer-common ExecutionChunk — replace with common lib import when available. */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) @@ -144,8 +144,8 @@ public record ExecutionChunk( - [ ] **Step 3: Write deserialization test** ```java -// cameleer3-server-core/src/test/java/com/cameleer3/server/core/storage/model/ExecutionChunkDeserializationTest.java -package com.cameleer3.server.core.storage.model; +// cameleer-server-core/src/test/java/com/cameleer/server/core/storage/model/ExecutionChunkDeserializationTest.java +package com.cameleer.server.core.storage.model; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; @@ -259,7 +259,7 @@ class ExecutionChunkDeserializationTest { - [ ] **Step 4: Run tests** ```bash -mvn test -pl cameleer3-server-core -Dtest=ExecutionChunkDeserializationTest +mvn test -pl cameleer-server-core -Dtest=ExecutionChunkDeserializationTest ``` Expected: PASS (3 tests). @@ -267,9 +267,9 @@ Expected: PASS (3 tests). - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/FlatProcessorRecord.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/storage/model/ExecutionChunk.java \ - cameleer3-server-core/src/test/java/com/cameleer3/server/core/storage/model/ExecutionChunkDeserializationTest.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/FlatProcessorRecord.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/storage/model/ExecutionChunk.java \ + cameleer-server-core/src/test/java/com/cameleer/server/core/storage/model/ExecutionChunkDeserializationTest.java git commit -m "feat: add server-side ExecutionChunk and FlatProcessorRecord DTOs" ``` @@ -278,8 +278,8 @@ git commit -m "feat: add server-side ExecutionChunk and FlatProcessorRecord DTOs ### Task 2: DDL Scripts for executions and processor_executions **Files:** -- Create: `cameleer3-server-app/src/main/resources/clickhouse/V2__executions.sql` -- Create: `cameleer3-server-app/src/main/resources/clickhouse/V3__processor_executions.sql` +- Create: `cameleer-server-app/src/main/resources/clickhouse/V2__executions.sql` +- Create: `cameleer-server-app/src/main/resources/clickhouse/V3__processor_executions.sql` - [ ] **Step 1: Create executions DDL** @@ -395,7 +395,7 @@ SETTINGS index_granularity = 8192; - [ ] **Step 3: Verify DDL loads** ```bash -mvn clean compile -pl cameleer3-server-app +mvn clean compile -pl cameleer-server-app ``` `ClickHouseSchemaInitializer` scans `classpath:clickhouse/*.sql` automatically. @@ -403,8 +403,8 @@ mvn clean compile -pl cameleer3-server-app - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/resources/clickhouse/V2__executions.sql \ - cameleer3-server-app/src/main/resources/clickhouse/V3__processor_executions.sql +git add cameleer-server-app/src/main/resources/clickhouse/V2__executions.sql \ + cameleer-server-app/src/main/resources/clickhouse/V3__processor_executions.sql git commit -m "feat(clickhouse): add executions and processor_executions DDL for chunked transport" ``` @@ -413,17 +413,17 @@ git commit -m "feat(clickhouse): add executions and processor_executions DDL for ### Task 3: MergedExecution + ClickHouseExecutionStore **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/MergedExecution.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionStore.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionStoreIT.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/MergedExecution.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionStore.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionStoreIT.java` The store handles batch INSERT for both `executions` (from MergedExecution) and `processor_executions` (from FlatProcessorRecord). It does NOT implement the `ExecutionStore` interface — it has its own batch API consumed by the flush scheduler. - [ ] **Step 1: Create MergedExecution record** ```java -// cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/MergedExecution.java -package com.cameleer3.server.core.ingestion; +// cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/MergedExecution.java +package com.cameleer.server.core.ingestion; import java.time.Instant; import java.util.Map; @@ -468,11 +468,11 @@ public record MergedExecution( - [ ] **Step 2: Write the failing integration test** ```java -// cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionStoreIT.java -package com.cameleer3.server.app.storage; +// cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionStoreIT.java +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.storage.model.FlatProcessorRecord; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.storage.model.FlatProcessorRecord; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -654,7 +654,7 @@ class ClickHouseExecutionStoreIT { - [ ] **Step 3: Run test to verify it fails** ```bash -mvn test -pl cameleer3-server-app -Dtest=ClickHouseExecutionStoreIT -Dfailsafe.provider=surefire -DfailIfNoTests=false +mvn test -pl cameleer-server-app -Dtest=ClickHouseExecutionStoreIT -Dfailsafe.provider=surefire -DfailIfNoTests=false ``` Expected: compilation error — `ClickHouseExecutionStore` does not exist. @@ -662,11 +662,11 @@ Expected: compilation error — `ClickHouseExecutionStore` does not exist. - [ ] **Step 4: Implement ClickHouseExecutionStore** ```java -// cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionStore.java -package com.cameleer3.server.app.storage; +// cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionStore.java +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.storage.model.FlatProcessorRecord; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.storage.model.FlatProcessorRecord; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; @@ -840,7 +840,7 @@ public class ClickHouseExecutionStore { - [ ] **Step 5: Run test to verify it passes** ```bash -mvn test -pl cameleer3-server-app -Dtest=ClickHouseExecutionStoreIT -Dfailsafe.provider=surefire +mvn test -pl cameleer-server-app -Dtest=ClickHouseExecutionStoreIT -Dfailsafe.provider=surefire ``` Expected: all 5 tests PASS. @@ -848,9 +848,9 @@ Expected: all 5 tests PASS. - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/MergedExecution.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseExecutionStore.java \ - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseExecutionStoreIT.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/MergedExecution.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseExecutionStore.java \ + cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseExecutionStoreIT.java git commit -m "feat(clickhouse): add ClickHouseExecutionStore with batch insert for chunked format" ``` @@ -859,8 +859,8 @@ git commit -m "feat(clickhouse): add ClickHouseExecutionStore with batch insert ### Task 4: ChunkAccumulator **Files:** -- Create: `cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/ChunkAccumulatorTest.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/ChunkAccumulator.java` +- Create: `cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/ChunkAccumulatorTest.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/ChunkAccumulator.java` The ChunkAccumulator receives `ExecutionChunk` documents. For each chunk: - Processor records are pushed to a sink immediately (they're append-only) @@ -872,11 +872,11 @@ A scheduled sweep flushes stale exchanges (no final chunk received within 5 minu - [ ] **Step 1: Write the failing unit test** ```java -// cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/ChunkAccumulatorTest.java -package com.cameleer3.server.core.ingestion; +// cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/ChunkAccumulatorTest.java +package com.cameleer.server.core.ingestion; -import com.cameleer3.server.core.storage.model.ExecutionChunk; -import com.cameleer3.server.core.storage.model.FlatProcessorRecord; +import com.cameleer.server.core.storage.model.ExecutionChunk; +import com.cameleer.server.core.storage.model.FlatProcessorRecord; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -1060,7 +1060,7 @@ class ChunkAccumulatorTest { - [ ] **Step 2: Run test to verify it fails** ```bash -mvn test -pl cameleer3-server-core -Dtest=ChunkAccumulatorTest -DfailIfNoTests=false +mvn test -pl cameleer-server-core -Dtest=ChunkAccumulatorTest -DfailIfNoTests=false ``` Expected: compilation error — `ChunkAccumulator` does not exist. @@ -1068,11 +1068,11 @@ Expected: compilation error — `ChunkAccumulator` does not exist. - [ ] **Step 3: Implement ChunkAccumulator** ```java -// cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/ChunkAccumulator.java -package com.cameleer3.server.core.ingestion; +// cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/ChunkAccumulator.java +package com.cameleer.server.core.ingestion; -import com.cameleer3.server.core.storage.model.ExecutionChunk; -import com.cameleer3.server.core.storage.model.FlatProcessorRecord; +import com.cameleer.server.core.storage.model.ExecutionChunk; +import com.cameleer.server.core.storage.model.FlatProcessorRecord; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; @@ -1267,7 +1267,7 @@ public class ChunkAccumulator { - [ ] **Step 4: Run test to verify it passes** ```bash -mvn test -pl cameleer3-server-core -Dtest=ChunkAccumulatorTest +mvn test -pl cameleer-server-core -Dtest=ChunkAccumulatorTest ``` Expected: all 5 tests PASS. @@ -1275,8 +1275,8 @@ Expected: all 5 tests PASS. - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/ingestion/ChunkAccumulator.java \ - cameleer3-server-core/src/test/java/com/cameleer3/server/core/ingestion/ChunkAccumulatorTest.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/ingestion/ChunkAccumulator.java \ + cameleer-server-core/src/test/java/com/cameleer/server/core/ingestion/ChunkAccumulatorTest.java git commit -m "feat(clickhouse): add ChunkAccumulator for chunked execution ingestion" ``` @@ -1285,22 +1285,22 @@ git commit -m "feat(clickhouse): add ChunkAccumulator for chunked execution inge ### Task 5: ExecutionFlushScheduler + ChunkIngestionController **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ExecutionFlushScheduler.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ChunkIngestionController.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ExecutionFlushScheduler.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ChunkIngestionController.java` - [ ] **Step 1: Implement ExecutionFlushScheduler** Follows `MetricsFlushScheduler` pattern. Drains two WriteBuffers (executions + processor batches) and calls ClickHouseExecutionStore. Also runs the stale sweep. ```java -// cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ExecutionFlushScheduler.java -package com.cameleer3.server.app.ingestion; +// cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ExecutionFlushScheduler.java +package com.cameleer.server.app.ingestion; -import com.cameleer3.server.app.config.IngestionConfig; -import com.cameleer3.server.app.storage.ClickHouseExecutionStore; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.ingestion.WriteBuffer; +import com.cameleer.server.app.config.IngestionConfig; +import com.cameleer.server.app.storage.ClickHouseExecutionStore; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.ingestion.WriteBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.SmartLifecycle; @@ -1395,11 +1395,11 @@ public class ExecutionFlushScheduler implements SmartLifecycle { - [ ] **Step 2: Implement ChunkIngestionController** ```java -// cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ChunkIngestionController.java -package com.cameleer3.server.app.controller; +// cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ChunkIngestionController.java +package com.cameleer.server.app.controller; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.storage.model.ExecutionChunk; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.storage.model.ExecutionChunk; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.http.ResponseEntity; @@ -1450,14 +1450,14 @@ public class ChunkIngestionController { - [ ] **Step 3: Compile** ```bash -mvn clean compile -pl cameleer3-server-app +mvn clean compile -pl cameleer-server-app ``` - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/ingestion/ExecutionFlushScheduler.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ChunkIngestionController.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/ingestion/ExecutionFlushScheduler.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ChunkIngestionController.java git commit -m "feat(clickhouse): add ExecutionFlushScheduler and ChunkIngestionController" ``` @@ -1466,8 +1466,8 @@ git commit -m "feat(clickhouse): add ExecutionFlushScheduler and ChunkIngestionC ### Task 6: ClickHouseSearchIndex **Files:** -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseSearchIndexIT.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseSearchIndexIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchIndex.java` Same as the original plan — implements `SearchIndex` using SQL against ClickHouse. The search query patterns are unchanged: `_search_text LIKE '%term%'` on executions, subquery join on processor_executions for body/header/error scoped searches. @@ -1480,7 +1480,7 @@ Use the same test class from the original plan's Task 5, Step 1. The test seeds - [ ] **Step 2: Run test to verify it fails** ```bash -mvn test -pl cameleer3-server-app -Dtest=ClickHouseSearchIndexIT -Dfailsafe.provider=surefire -DfailIfNoTests=false +mvn test -pl cameleer-server-app -Dtest=ClickHouseSearchIndexIT -Dfailsafe.provider=surefire -DfailIfNoTests=false ``` - [ ] **Step 3: Implement ClickHouseSearchIndex** @@ -1490,14 +1490,14 @@ Use the same implementation from the original plan's Task 5, Step 3. The SQL que - [ ] **Step 4: Run test to verify it passes** ```bash -mvn test -pl cameleer3-server-app -Dtest=ClickHouseSearchIndexIT -Dfailsafe.provider=surefire +mvn test -pl cameleer-server-app -Dtest=ClickHouseSearchIndexIT -Dfailsafe.provider=surefire ``` - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java \ - cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseSearchIndexIT.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseSearchIndex.java \ + cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseSearchIndexIT.java git commit -m "feat(clickhouse): add ClickHouseSearchIndex with ngram-accelerated SQL search" ``` @@ -1506,10 +1506,10 @@ git commit -m "feat(clickhouse): add ClickHouseSearchIndex with ngram-accelerate ### Task 7: Feature Flag Wiring **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchIndex.java` -- Modify: `cameleer3-server-app/src/main/resources/application.yml` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/search/OpenSearchIndex.java` +- Modify: `cameleer-server-app/src/main/resources/application.yml` - Modify: `deploy/base/server.yaml` Wire up the ChunkAccumulator, WriteBuffers, flush scheduler, and search switching. @@ -1608,10 +1608,10 @@ mvn clean verify -DskipITs - [ ] **Step 7: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/IngestionBeanConfig.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchIndex.java \ - cameleer3-server-app/src/main/resources/application.yml \ +git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/config/IngestionBeanConfig.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/search/OpenSearchIndex.java \ + cameleer-server-app/src/main/resources/application.yml \ deploy/base/server.yaml git commit -m "feat(clickhouse): wire ChunkAccumulator, flush scheduler, and search feature flag" ``` @@ -1621,24 +1621,24 @@ git commit -m "feat(clickhouse): wire ChunkAccumulator, flush scheduler, and sea ### Task 8: End-to-End Integration Test **Files:** -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseChunkPipelineIT.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseChunkPipelineIT.java` Validates the full pipeline: ChunkAccumulator → WriteBuffers → ClickHouseExecutionStore → ClickHouseSearchIndex. - [ ] **Step 1: Write the integration test** ```java -// cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseChunkPipelineIT.java -package com.cameleer3.server.app.storage; +// cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseChunkPipelineIT.java +package com.cameleer.server.app.storage; -import com.cameleer3.server.app.search.ClickHouseSearchIndex; -import com.cameleer3.server.core.ingestion.ChunkAccumulator; -import com.cameleer3.server.core.ingestion.MergedExecution; -import com.cameleer3.server.core.search.ExecutionSummary; -import com.cameleer3.server.core.search.SearchRequest; -import com.cameleer3.server.core.search.SearchResult; -import com.cameleer3.server.core.storage.model.ExecutionChunk; -import com.cameleer3.server.core.storage.model.FlatProcessorRecord; +import com.cameleer.server.app.search.ClickHouseSearchIndex; +import com.cameleer.server.core.ingestion.ChunkAccumulator; +import com.cameleer.server.core.ingestion.MergedExecution; +import com.cameleer.server.core.search.ExecutionSummary; +import com.cameleer.server.core.search.SearchRequest; +import com.cameleer.server.core.search.SearchResult; +import com.cameleer.server.core.storage.model.ExecutionChunk; +import com.cameleer.server.core.storage.model.FlatProcessorRecord; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -1797,7 +1797,7 @@ class ClickHouseChunkPipelineIT { - [ ] **Step 2: Run the integration test** ```bash -mvn test -pl cameleer3-server-app -Dtest=ClickHouseChunkPipelineIT -Dfailsafe.provider=surefire +mvn test -pl cameleer-server-app -Dtest=ClickHouseChunkPipelineIT -Dfailsafe.provider=surefire ``` Expected: PASS. @@ -1805,7 +1805,7 @@ Expected: PASS. - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseChunkPipelineIT.java +git add cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseChunkPipelineIT.java git commit -m "test(clickhouse): add end-to-end chunk pipeline integration test" ``` diff --git a/docs/superpowers/plans/2026-03-31-clickhouse-phase3-stats-analytics.md b/docs/superpowers/plans/2026-03-31-clickhouse-phase3-stats-analytics.md index e256924d..2077f3e2 100644 --- a/docs/superpowers/plans/2026-03-31-clickhouse-phase3-stats-analytics.md +++ b/docs/superpowers/plans/2026-03-31-clickhouse-phase3-stats-analytics.md @@ -16,13 +16,13 @@ | File | Responsibility | |------|----------------| -| `cameleer3-server-app/.../resources/clickhouse/V4__stats_tables_and_mvs.sql` | DDL for all 5 stats tables + 5 materialized views | -| `cameleer3-server-app/.../storage/ClickHouseStatsStore.java` | StatsStore impl using -Merge functions on AggregatingMergeTree tables | -| `cameleer3-server-app/.../config/StorageBeanConfig.java` | Modified: add CH stats store bean with feature flag | -| `cameleer3-server-app/.../storage/PostgresStatsStore.java` | Modified: add ConditionalOnProperty | -| `cameleer3-server-app/.../resources/application.yml` | Modified: add `cameleer.storage.stats` flag | +| `cameleer-server-app/.../resources/clickhouse/V4__stats_tables_and_mvs.sql` | DDL for all 5 stats tables + 5 materialized views | +| `cameleer-server-app/.../storage/ClickHouseStatsStore.java` | StatsStore impl using -Merge functions on AggregatingMergeTree tables | +| `cameleer-server-app/.../config/StorageBeanConfig.java` | Modified: add CH stats store bean with feature flag | +| `cameleer-server-app/.../storage/PostgresStatsStore.java` | Modified: add ConditionalOnProperty | +| `cameleer-server-app/.../resources/application.yml` | Modified: add `cameleer.storage.stats` flag | | `deploy/base/server.yaml` | Modified: add `CAMELEER_STORAGE_STATS` env var | -| `cameleer3-server-app/...test.../storage/ClickHouseStatsStoreIT.java` | Integration test for CH stats queries | +| `cameleer-server-app/...test.../storage/ClickHouseStatsStoreIT.java` | Integration test for CH stats queries | --- @@ -49,7 +49,7 @@ ### Task 1: DDL for Stats Tables and Materialized Views **Files:** -- Create: `cameleer3-server-app/src/main/resources/clickhouse/V4__stats_tables_and_mvs.sql` +- Create: `cameleer-server-app/src/main/resources/clickhouse/V4__stats_tables_and_mvs.sql` All 5 table+MV pairs in a single DDL file. Tables use `AggregatingMergeTree()`. MVs use `-State` combinators and trigger on INSERT to `executions` or `processor_executions`. @@ -229,20 +229,20 @@ Note: The `ClickHouseSchemaInitializer` runs each `.sql` file as a single statem - [ ] **Step 2: Check ClickHouseSchemaInitializer handles multi-statement** -Read `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ClickHouseSchemaInitializer.java`. If it runs each file as a single `jdbc.execute()`, modify it to split on `;` and run each statement separately. If it already handles this, proceed. +Read `cameleer-server-app/src/main/java/com/cameleer/server/app/config/ClickHouseSchemaInitializer.java`. If it runs each file as a single `jdbc.execute()`, modify it to split on `;` and run each statement separately. If it already handles this, proceed. - [ ] **Step 3: Verify DDL loads in Testcontainers** Write a quick smoke test or manually verify that all 10 objects (5 tables + 5 MVs) are created: ```bash -mvn clean compile -pl cameleer3-server-app -f pom.xml +mvn clean compile -pl cameleer-server-app -f pom.xml ``` - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/resources/clickhouse/V4__stats_tables_and_mvs.sql +git add cameleer-server-app/src/main/resources/clickhouse/V4__stats_tables_and_mvs.sql # also add ClickHouseSchemaInitializer if modified git commit -m "feat(clickhouse): add stats materialized views DDL (5 tables + 5 MVs)" ``` @@ -252,8 +252,8 @@ git commit -m "feat(clickhouse): add stats materialized views DDL (5 tables + 5 ### Task 2: ClickHouseStatsStore — Aggregate Queries **Files:** -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseStatsStoreIT.java` -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseStatsStore.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseStatsStoreIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseStatsStore.java` The store implements `StatsStore` using ClickHouse `-Merge` functions. It follows the same pattern as `PostgresStatsStore` but with ClickHouse SQL syntax. @@ -333,7 +333,7 @@ Create `ClickHouseStatsStoreIT.java` with: - [ ] **Step 2: Run test to verify it fails** ```bash -mvn test -pl cameleer3-server-app -Dtest=ClickHouseStatsStoreIT -Dfailsafe.provider=surefire -DfailIfNoTests=false -f pom.xml +mvn test -pl cameleer-server-app -Dtest=ClickHouseStatsStoreIT -Dfailsafe.provider=surefire -DfailIfNoTests=false -f pom.xml ``` - [ ] **Step 3: Implement ClickHouseStatsStore** @@ -343,14 +343,14 @@ Follow the `PostgresStatsStore` structure closely. Same private `Filter` record, - [ ] **Step 4: Run test to verify it passes** ```bash -mvn test -pl cameleer3-server-app -Dtest=ClickHouseStatsStoreIT -Dfailsafe.provider=surefire -f pom.xml +mvn test -pl cameleer-server-app -Dtest=ClickHouseStatsStoreIT -Dfailsafe.provider=surefire -f pom.xml ``` - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseStatsStore.java \ - cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseStatsStoreIT.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseStatsStore.java \ + cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseStatsStoreIT.java git commit -m "feat(clickhouse): add ClickHouseStatsStore with -Merge aggregate queries" ``` @@ -359,9 +359,9 @@ git commit -m "feat(clickhouse): add ClickHouseStatsStore with -Merge aggregate ### Task 3: Feature Flag Wiring **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresStatsStore.java` -- Modify: `cameleer3-server-app/src/main/resources/application.yml` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresStatsStore.java` +- Modify: `cameleer-server-app/src/main/resources/application.yml` - Modify: `deploy/base/server.yaml` - [ ] **Step 1: Add ConditionalOnProperty to PostgresStatsStore** @@ -407,9 +407,9 @@ mvn clean verify -DskipITs -f pom.xml - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/StorageBeanConfig.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresStatsStore.java \ - cameleer3-server-app/src/main/resources/application.yml \ +git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/StorageBeanConfig.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresStatsStore.java \ + cameleer-server-app/src/main/resources/application.yml \ deploy/base/server.yaml git commit -m "feat(clickhouse): wire ClickHouseStatsStore with cameleer.storage.stats feature flag" ``` diff --git a/docs/superpowers/plans/2026-03-31-clickhouse-phase4-remaining-tables.md b/docs/superpowers/plans/2026-03-31-clickhouse-phase4-remaining-tables.md index 5c55fdf9..b87f84b4 100644 --- a/docs/superpowers/plans/2026-03-31-clickhouse-phase4-remaining-tables.md +++ b/docs/superpowers/plans/2026-03-31-clickhouse-phase4-remaining-tables.md @@ -16,17 +16,17 @@ | File | Responsibility | |------|----------------| -| `cameleer3-server-app/.../resources/clickhouse/V5__route_diagrams.sql` | DDL for `route_diagrams` (ReplacingMergeTree) | -| `cameleer3-server-app/.../resources/clickhouse/V6__agent_events.sql` | DDL for `agent_events` (MergeTree) | -| `cameleer3-server-app/.../resources/clickhouse/V7__logs.sql` | DDL for `logs` (MergeTree with ngram indexes) | -| `cameleer3-server-app/.../storage/ClickHouseDiagramStore.java` | DiagramStore impl for ClickHouse | -| `cameleer3-server-app/.../storage/ClickHouseAgentEventRepository.java` | AgentEventRepository impl for ClickHouse | -| `cameleer3-server-app/.../search/ClickHouseLogStore.java` | Replaces OpenSearchLogIndex | -| `cameleer3-server-app/.../config/StorageBeanConfig.java` | Modified: add CH beans with feature flags | -| `cameleer3-server-app/.../storage/PostgresDiagramStore.java` | Modified: add ConditionalOnProperty | -| `cameleer3-server-app/.../storage/PostgresAgentEventRepository.java` | Modified: add ConditionalOnProperty | -| `cameleer3-server-app/.../search/OpenSearchLogIndex.java` | Modified: add ConditionalOnProperty | -| `cameleer3-server-app/.../resources/application.yml` | Modified: add feature flags | +| `cameleer-server-app/.../resources/clickhouse/V5__route_diagrams.sql` | DDL for `route_diagrams` (ReplacingMergeTree) | +| `cameleer-server-app/.../resources/clickhouse/V6__agent_events.sql` | DDL for `agent_events` (MergeTree) | +| `cameleer-server-app/.../resources/clickhouse/V7__logs.sql` | DDL for `logs` (MergeTree with ngram indexes) | +| `cameleer-server-app/.../storage/ClickHouseDiagramStore.java` | DiagramStore impl for ClickHouse | +| `cameleer-server-app/.../storage/ClickHouseAgentEventRepository.java` | AgentEventRepository impl for ClickHouse | +| `cameleer-server-app/.../search/ClickHouseLogStore.java` | Replaces OpenSearchLogIndex | +| `cameleer-server-app/.../config/StorageBeanConfig.java` | Modified: add CH beans with feature flags | +| `cameleer-server-app/.../storage/PostgresDiagramStore.java` | Modified: add ConditionalOnProperty | +| `cameleer-server-app/.../storage/PostgresAgentEventRepository.java` | Modified: add ConditionalOnProperty | +| `cameleer-server-app/.../search/OpenSearchLogIndex.java` | Modified: add ConditionalOnProperty | +| `cameleer-server-app/.../resources/application.yml` | Modified: add feature flags | | `deploy/base/server.yaml` | Modified: add env vars | --- @@ -34,9 +34,9 @@ ### Task 1: DDL Scripts **Files:** -- Create: `cameleer3-server-app/src/main/resources/clickhouse/V5__route_diagrams.sql` -- Create: `cameleer3-server-app/src/main/resources/clickhouse/V6__agent_events.sql` -- Create: `cameleer3-server-app/src/main/resources/clickhouse/V7__logs.sql` +- Create: `cameleer-server-app/src/main/resources/clickhouse/V5__route_diagrams.sql` +- Create: `cameleer-server-app/src/main/resources/clickhouse/V6__agent_events.sql` +- Create: `cameleer-server-app/src/main/resources/clickhouse/V7__logs.sql` - [ ] **Step 1: Create route_diagrams DDL** @@ -102,7 +102,7 @@ SETTINGS index_granularity = 8192 - [ ] **Step 4: Compile and commit** ```bash -mvn clean compile -pl cameleer3-server-app -f pom.xml +mvn clean compile -pl cameleer-server-app -f pom.xml git commit -m "feat(clickhouse): add DDL for route_diagrams, agent_events, and logs tables" ``` @@ -111,8 +111,8 @@ git commit -m "feat(clickhouse): add DDL for route_diagrams, agent_events, and l ### Task 2: ClickHouseDiagramStore **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseDiagramStore.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseDiagramStoreIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseDiagramStore.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseDiagramStoreIT.java` Implements `DiagramStore` interface (5 methods). Read `PostgresDiagramStore.java` first and translate. @@ -136,8 +136,8 @@ Implements `DiagramStore` interface (5 methods). Read `PostgresDiagramStore.java ### Task 3: ClickHouseAgentEventRepository **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseAgentEventRepository.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/storage/ClickHouseAgentEventRepositoryIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/ClickHouseAgentEventRepository.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/storage/ClickHouseAgentEventRepositoryIT.java` Implements `AgentEventRepository` interface (2 methods: `insert` + `query`). @@ -158,8 +158,8 @@ Implements `AgentEventRepository` interface (2 methods: `insert` + `query`). ### Task 4: ClickHouseLogStore **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseLogStore.java` -- Create: `cameleer3-server-app/src/test/java/com/cameleer3/server/app/search/ClickHouseLogStoreIT.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/search/ClickHouseLogStore.java` +- Create: `cameleer-server-app/src/test/java/com/cameleer/server/app/search/ClickHouseLogStoreIT.java` Replaces `OpenSearchLogIndex`. Must have the same public API: - `search(application, agentId, level, query, exchangeId, from, to, limit)` → returns `List` diff --git a/docs/superpowers/plans/2026-04-02-composable-sidebar-migration.md b/docs/superpowers/plans/2026-04-02-composable-sidebar-migration.md index 0cc9f1ec..a0f5f3f4 100644 --- a/docs/superpowers/plans/2026-04-02-composable-sidebar-migration.md +++ b/docs/superpowers/plans/2026-04-02-composable-sidebar-migration.md @@ -171,7 +171,7 @@ export function writeCollapsed(key: string, value: boolean): void { - [ ] **Step 2: Verify it compiles** -Run: `cd C:/Users/Hendrik/Documents/projects/cameleer3-server/ui && npx tsc --project tsconfig.app.json --noEmit` +Run: `cd C:/Users/Hendrik/Documents/projects/cameleer-server/ui && npx tsc --project tsconfig.app.json --noEmit` Expected: No errors. - [ ] **Step 3: Commit** @@ -479,7 +479,7 @@ Note: The Admin section renders in two positions — at the top when `isAdminPag - [ ] **Step 5: Verify it compiles** -Run: `cd C:/Users/Hendrik/Documents/projects/cameleer3-server/ui && npx tsc --project tsconfig.app.json --noEmit` +Run: `cd C:/Users/Hendrik/Documents/projects/cameleer-server/ui && npx tsc --project tsconfig.app.json --noEmit` Expected: No errors. If `StatusDot` is not exported from the DS, check the exact export name with `grep -r "StatusDot" ui/node_modules/@cameleer/design-system/dist/index.es.d.ts`. - [ ] **Step 6: Commit** @@ -516,7 +516,7 @@ export default function AdminLayout() { - [ ] **Step 2: Verify it compiles** -Run: `cd C:/Users/Hendrik/Documents/projects/cameleer3-server/ui && npx tsc --project tsconfig.app.json --noEmit` +Run: `cd C:/Users/Hendrik/Documents/projects/cameleer-server/ui && npx tsc --project tsconfig.app.json --noEmit` Expected: No errors. - [ ] **Step 3: Commit** diff --git a/docs/superpowers/plans/2026-04-05-logto-oidc-resource-server.md b/docs/superpowers/plans/2026-04-05-logto-oidc-resource-server.md index dd6916d3..79b34430 100644 --- a/docs/superpowers/plans/2026-04-05-logto-oidc-resource-server.md +++ b/docs/superpowers/plans/2026-04-05-logto-oidc-resource-server.md @@ -14,13 +14,13 @@ | File | Action | Responsibility | |------|--------|---------------| -| `cameleer3-server-app/pom.xml` | Modify | Add oauth2-resource-server dependency | -| `cameleer3-server-app/src/main/resources/application.yml` | Modify | Add OIDC issuer/audience properties | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java` | Modify | Add oidcIssuerUri, oidcAudience fields | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java` | Modify | Build OIDC decoder, pass to filter | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java` | Modify | Add OIDC fallback path | -| `cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfig.java` | Modify | Update default rolesClaim | -| `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/OidcConfigAdminController.java` | Modify | Update default rolesClaim | +| `cameleer-server-app/pom.xml` | Modify | Add oauth2-resource-server dependency | +| `cameleer-server-app/src/main/resources/application.yml` | Modify | Add OIDC issuer/audience properties | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java` | Modify | Add oidcIssuerUri, oidcAudience fields | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java` | Modify | Build OIDC decoder, pass to filter | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java` | Modify | Add OIDC fallback path | +| `cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfig.java` | Modify | Update default rolesClaim | +| `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/OidcConfigAdminController.java` | Modify | Update default rolesClaim | | `deploy/authentik.yaml` | Delete | Remove Authentik deployment | | `deploy/logto.yaml` | Create | Logto server + dedicated PostgreSQL | | `.gitea/workflows/ci.yml` | Modify | Replace Authentik with Logto in CI | @@ -33,11 +33,11 @@ ### Task 1: Add OAuth2 Resource Server Dependency **Files:** -- Modify: `cameleer3-server-app/pom.xml:87-97` +- Modify: `cameleer-server-app/pom.xml:87-97` - [ ] **Step 1: Add the spring-boot-starter-oauth2-resource-server dependency** -In `cameleer3-server-app/pom.xml`, add after the existing `spring-boot-starter-security` dependency (line 87) and before the `nimbus-jose-jwt` dependency (line 88): +In `cameleer-server-app/pom.xml`, add after the existing `spring-boot-starter-security` dependency (line 87) and before the `nimbus-jose-jwt` dependency (line 88): ```xml @@ -66,13 +66,13 @@ The full dependencies section around that area should read: - [ ] **Step 2: Verify compilation** -Run: `mvn clean compile -pl cameleer3-server-app -am -B` +Run: `mvn clean compile -pl cameleer-server-app -am -B` Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/pom.xml +git add cameleer-server-app/pom.xml git commit -m "feat: add spring-boot-starter-oauth2-resource-server dependency" ``` @@ -81,8 +81,8 @@ git commit -m "feat: add spring-boot-starter-oauth2-resource-server dependency" ### Task 2: Add OIDC Properties **Files:** -- Modify: `cameleer3-server-app/src/main/resources/application.yml:42-48` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java` +- Modify: `cameleer-server-app/src/main/resources/application.yml:42-48` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java` - [ ] **Step 1: Add OIDC properties to application.yml** @@ -107,7 +107,7 @@ security: Add `oidcIssuerUri` and `oidcAudience` fields with getters/setters. The complete file should be: ```java -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -154,14 +154,14 @@ public class SecurityProperties { - [ ] **Step 3: Verify compilation** -Run: `mvn clean compile -pl cameleer3-server-app -am -B` +Run: `mvn clean compile -pl cameleer-server-app -am -B` Expected: BUILD SUCCESS - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/resources/application.yml -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityProperties.java +git add cameleer-server-app/src/main/resources/application.yml +git add cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityProperties.java git commit -m "feat: add OIDC issuer URI and audience security properties" ``` @@ -170,18 +170,18 @@ git commit -m "feat: add OIDC issuer URI and audience security properties" ### Task 3: Add OIDC Fallback to JwtAuthenticationFilter **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java` - [ ] **Step 1: Update JwtAuthenticationFilter with OIDC fallback** The filter needs a new nullable `oidcDecoder` parameter, a `tryInternalToken` method (wrapping existing logic), a `tryOidcToken` fallback, and scope-based role extraction. The complete updated file: ```java -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.security.JwtService; -import com.cameleer3.server.core.security.JwtService.JwtValidationResult; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.security.JwtService; +import com.cameleer.server.core.security.JwtService.JwtValidationResult; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -323,17 +323,17 @@ This change removes the 2-arg constructor, so `SecurityConfig.java` won't compil ### Task 4: Build OIDC Decoder in SecurityConfig **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java` - [ ] **Step 1: Update SecurityConfig to build OIDC decoder and pass to filter** The `filterChain` method needs an additional `SecurityProperties` parameter, an inline OIDC decoder builder, and must pass the decoder to the `JwtAuthenticationFilter` constructor. The complete updated file: ```java -package com.cameleer3.server.app.security; +package com.cameleer.server.app.security; -import com.cameleer3.server.core.agent.AgentRegistryService; -import com.cameleer3.server.core.security.JwtService; +import com.cameleer.server.core.agent.AgentRegistryService; +import com.cameleer.server.core.security.JwtService; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.jwk.source.JWKSourceBuilder; import com.nimbusds.jose.proc.JWSVerificationKeySelector; @@ -550,19 +550,19 @@ public class SecurityConfig { - [ ] **Step 2: Verify compilation** -Run: `mvn clean compile -pl cameleer3-server-app -am -B` +Run: `mvn clean compile -pl cameleer-server-app -am -B` Expected: BUILD SUCCESS - [ ] **Step 3: Run tests** -Run: `mvn test -pl cameleer3-server-app -am -B` +Run: `mvn test -pl cameleer-server-app -am -B` Expected: Tests pass (OIDC decoder won't be built since `CAMELEER_OIDC_ISSUER_URI` is empty in test config) - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/JwtAuthenticationFilter.java -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/security/SecurityConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/security/JwtAuthenticationFilter.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/security/SecurityConfig.java git commit -m "feat: add OIDC resource server support with JWKS discovery and scope-based roles" ``` @@ -571,8 +571,8 @@ git commit -m "feat: add OIDC resource server support with JWKS discovery and sc ### Task 5: Update OidcConfig Default RolesClaim **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfig.java:28` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/OidcConfigAdminController.java:101` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfig.java:28` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/OidcConfigAdminController.java:101` - [ ] **Step 1: Update OidcConfig.disabled() default** @@ -600,8 +600,8 @@ Expected: BUILD SUCCESS - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/security/OidcConfig.java -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/OidcConfigAdminController.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/security/OidcConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/OidcConfigAdminController.java git commit -m "feat: update default rolesClaim to 'roles' for Logto compatibility" ``` diff --git a/docs/superpowers/plans/2026-04-08-docker-orchestration.md b/docs/superpowers/plans/2026-04-08-docker-orchestration.md index f06edad0..4720d60d 100644 --- a/docs/superpowers/plans/2026-04-08-docker-orchestration.md +++ b/docs/superpowers/plans/2026-04-08-docker-orchestration.md @@ -12,12 +12,12 @@ ## File Structure -### New files (core module — `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/`) +### New files (core module — `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/`) - `ResolvedContainerConfig.java` — typed record with all resolved config fields - `ConfigMerger.java` — pure function, three-layer merge logic - `DeployStage.java` — enum for deployment progress stages -### New files (app module — `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/`) +### New files (app module — `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/`) - `TraefikLabelBuilder.java` — generates Traefik Docker labels - `DockerNetworkManager.java` — lazy network creation + container attachment - `DockerEventMonitor.java` — persistent Docker event stream listener @@ -51,7 +51,7 @@ ### Task 1: Database Migration **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V7__deployment_orchestration.sql` +- Create: `cameleer-server-app/src/main/resources/db/migration/V7__deployment_orchestration.sql` - [ ] **Step 1: Create the migration file** @@ -79,7 +79,7 @@ Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/resources/db/migration/V7__deployment_orchestration.sql +git add cameleer-server-app/src/main/resources/db/migration/V7__deployment_orchestration.sql git commit -m "feat: V7 migration — deployment orchestration columns" ``` @@ -88,15 +88,15 @@ git commit -m "feat: V7 migration — deployment orchestration columns" ### Task 2: DeploymentStatus Enum + DeployStage Enum **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentStatus.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeployStage.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentStatus.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeployStage.java` - [ ] **Step 1: Update DeploymentStatus enum** Replace the content of `DeploymentStatus.java`: ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; public enum DeploymentStatus { STOPPED, STARTING, RUNNING, DEGRADED, STOPPING, FAILED @@ -106,7 +106,7 @@ public enum DeploymentStatus { - [ ] **Step 2: Create DeployStage enum** ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; public enum DeployStage { PRE_FLIGHT, PULL_IMAGE, CREATE_NETWORK, START_REPLICAS, HEALTH_CHECK, SWAP_TRAFFIC, COMPLETE @@ -121,8 +121,8 @@ Expected: BUILD SUCCESS - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeploymentStatus.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/DeployStage.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeploymentStatus.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/DeployStage.java git commit -m "feat: add DEGRADED, STOPPING statuses and DeployStage enum" ``` @@ -131,14 +131,14 @@ git commit -m "feat: add DEGRADED, STOPPING statuses and DeployStage enum" ### Task 3: Update Deployment Record **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/Deployment.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/Deployment.java` - [ ] **Step 1: Update the Deployment record** Replace the content of `Deployment.java`: ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.time.Instant; import java.util.List; @@ -178,7 +178,7 @@ Expected: Compilation errors in `PostgresDeploymentRepository.java` (wrong const - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/Deployment.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/Deployment.java git commit -m "feat: add targetState, deploymentStrategy, replicaStates, deployStage to Deployment" ``` @@ -187,18 +187,18 @@ git commit -m "feat: add targetState, deploymentStrategy, replicaStates, deployS ### Task 4: Update PostgresDeploymentRepository **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresDeploymentRepository.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresDeploymentRepository.java` - [ ] **Step 1: Update the repository to handle new columns** Replace the full content of `PostgresDeploymentRepository.java`: ```java -package com.cameleer3.server.app.storage; +package com.cameleer.server.app.storage; -import com.cameleer3.server.core.runtime.Deployment; -import com.cameleer3.server.core.runtime.DeploymentRepository; -import com.cameleer3.server.core.runtime.DeploymentStatus; +import com.cameleer.server.core.runtime.Deployment; +import com.cameleer.server.core.runtime.DeploymentRepository; +import com.cameleer.server.core.runtime.DeploymentStatus; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.JdbcTemplate; @@ -340,7 +340,7 @@ public class PostgresDeploymentRepository implements DeploymentRepository { - [ ] **Step 2: Update RuntimeBeanConfig to pass ObjectMapper to the repository** -In `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/RuntimeBeanConfig.java`, change the `deploymentRepository()` bean: +In `cameleer-server-app/src/main/java/com/cameleer/server/app/config/RuntimeBeanConfig.java`, change the `deploymentRepository()` bean: ```java @Bean @@ -357,8 +357,8 @@ Expected: BUILD SUCCESS - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresDeploymentRepository.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/RuntimeBeanConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresDeploymentRepository.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/config/RuntimeBeanConfig.java git commit -m "feat: update PostgresDeploymentRepository for orchestration columns" ``` @@ -367,13 +367,13 @@ git commit -m "feat: update PostgresDeploymentRepository for orchestration colum ### Task 5: ResolvedContainerConfig + ConfigMerger **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java` - [ ] **Step 1: Create ResolvedContainerConfig record** ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Map; @@ -407,7 +407,7 @@ public record ResolvedContainerConfig( - [ ] **Step 2: Create ConfigMerger** ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.Collections; import java.util.HashMap; @@ -517,8 +517,8 @@ Expected: BUILD SUCCESS - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java git commit -m "feat: ResolvedContainerConfig record and three-layer ConfigMerger" ``` @@ -527,14 +527,14 @@ git commit -m "feat: ResolvedContainerConfig record and three-layer ConfigMerger ### Task 6: Update ContainerRequest **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java` - [ ] **Step 1: Expand ContainerRequest with new fields** Replace `ContainerRequest.java`: ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Map; @@ -682,9 +682,9 @@ Expected: BUILD SUCCESS - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java git commit -m "feat: expand ContainerRequest with cpuLimit, ports, restart policy, additional networks" ``` @@ -693,14 +693,14 @@ git commit -m "feat: expand ContainerRequest with cpuLimit, ports, restart polic ### Task 7: TraefikLabelBuilder **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/TraefikLabelBuilder.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/TraefikLabelBuilder.java` - [ ] **Step 1: Create TraefikLabelBuilder** ```java -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.core.runtime.ResolvedContainerConfig; +import com.cameleer.server.core.runtime.ResolvedContainerConfig; import java.util.LinkedHashMap; import java.util.Map; @@ -719,7 +719,7 @@ public final class TraefikLabelBuilder { // Core labels labels.put("traefik.enable", "true"); - labels.put("managed-by", "cameleer3-server"); + labels.put("managed-by", "cameleer-server"); labels.put("cameleer.app", appSlug); labels.put("cameleer.environment", envSlug); @@ -767,7 +767,7 @@ Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/TraefikLabelBuilder.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/TraefikLabelBuilder.java git commit -m "feat: TraefikLabelBuilder with path-based and subdomain routing" ``` @@ -776,12 +776,12 @@ git commit -m "feat: TraefikLabelBuilder with path-based and subdomain routing" ### Task 8: DockerNetworkManager **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerNetworkManager.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerNetworkManager.java` - [ ] **Step 1: Create DockerNetworkManager** ```java -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.model.Network; @@ -912,9 +912,9 @@ Expected: BUILD SUCCESS - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerNetworkManager.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/RuntimeOrchestratorAutoConfig.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerNetworkManager.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/RuntimeOrchestratorAutoConfig.java git commit -m "feat: DockerNetworkManager with lazy network creation and container attachment" ``` @@ -923,15 +923,15 @@ git commit -m "feat: DockerNetworkManager with lazy network creation and contain ### Task 9: DockerEventMonitor **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerEventMonitor.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerEventMonitor.java` - [ ] **Step 1: Create DockerEventMonitor** ```java -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.core.runtime.Deployment; -import com.cameleer3.server.core.runtime.DeploymentStatus; +import com.cameleer.server.core.runtime.Deployment; +import com.cameleer.server.core.runtime.DeploymentStatus; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.async.ResultCallback; import com.github.dockerjava.api.model.Event; @@ -1003,7 +1003,7 @@ public class DockerEventMonitor { // Only process containers managed by us Map labels = event.getActor() != null ? event.getActor().getAttributes() : null; - if (labels == null || !"cameleer3-server".equals(labels.get("managed-by"))) return; + if (labels == null || !"cameleer-server".equals(labels.get("managed-by"))) return; String action = event.getAction(); log.debug("Docker event: {} for container {} ({})", action, containerId.substring(0, 12), @@ -1079,7 +1079,7 @@ Expected: BUILD SUCCESS (may need `PostgresDeploymentRepository` to be injected - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerEventMonitor.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerEventMonitor.java git commit -m "feat: DockerEventMonitor — persistent event stream for container lifecycle" ``` @@ -1088,7 +1088,7 @@ git commit -m "feat: DockerEventMonitor — persistent event stream for containe ### Task 10: Rewrite DeploymentExecutor **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java` This is the largest task — the orchestration hub that ties everything together. @@ -1097,10 +1097,10 @@ This is the largest task — the orchestration hub that ties everything together Replace the full content of `DeploymentExecutor.java`: ```java -package com.cameleer3.server.app.runtime; +package com.cameleer.server.app.runtime; -import com.cameleer3.server.app.storage.PostgresDeploymentRepository; -import com.cameleer3.server.core.runtime.*; +import com.cameleer.server.app.storage.PostgresDeploymentRepository; +import com.cameleer.server.core.runtime.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -1183,7 +1183,7 @@ public class DeploymentExecutor { globalCpuShares, globalRoutingMode, globalRoutingDomain, - globalServerUrl.isBlank() ? "http://cameleer3-server:8081" : globalServerUrl + globalServerUrl.isBlank() ? "http://cameleer-server:8081" : globalServerUrl ); ResolvedContainerConfig config = ConfigMerger.resolve( globalDefaults, env.defaultContainerConfig(), app.containerConfig()); @@ -1421,7 +1421,7 @@ Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java git commit -m "feat: rewrite DeploymentExecutor with staged deploy, config merge, replicas" ``` @@ -1430,7 +1430,7 @@ git commit -m "feat: rewrite DeploymentExecutor with staged deploy, config merge ### Task 11: Update DeploymentController **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DeploymentController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DeploymentController.java` - [ ] **Step 1: Update the stop endpoint to use stopDeployment** @@ -1460,7 +1460,7 @@ Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DeploymentController.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DeploymentController.java git commit -m "feat: update stop endpoint to use DeploymentExecutor for replica cleanup" ``` @@ -1469,7 +1469,7 @@ git commit -m "feat: update stop endpoint to use DeploymentExecutor for replica ### Task 12: Update application.yml **Files:** -- Modify: `cameleer3-server-app/src/main/resources/application.yml` +- Modify: `cameleer-server-app/src/main/resources/application.yml` - [ ] **Step 1: Add the server-url property** @@ -1489,7 +1489,7 @@ Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/resources/application.yml +git add cameleer-server-app/src/main/resources/application.yml git commit -m "feat: add CAMELEER_SERVER_URL config property" ``` diff --git a/docs/superpowers/plans/2026-04-09-ux-polish-plan.md b/docs/superpowers/plans/2026-04-09-ux-polish-plan.md index 8dbefa39..0278de43 100644 --- a/docs/superpowers/plans/2026-04-09-ux-polish-plan.md +++ b/docs/superpowers/plans/2026-04-09-ux-polish-plan.md @@ -70,7 +70,7 @@ git commit -m "fix: add /deployments redirect and fix GC Pauses chart X-axis" **Spec items:** 1.2 **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java` - Modify: `ui/src/pages/Admin/UsersTab.tsx` - [ ] **Step 1: Run impact analysis on UserAdminController.createUser** @@ -138,7 +138,7 @@ onError: (err: any) => { - [ ] **Step 5: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/UserAdminController.java ui/src/pages/Admin/UsersTab.tsx +git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/UserAdminController.java ui/src/pages/Admin/UsersTab.tsx git commit -m "fix: show descriptive error when creating local user with OIDC enabled" ``` @@ -1052,7 +1052,7 @@ function shortAgentName(name: string): string { // If name contains multiple dashes (K8s pod name pattern), take the last segment const parts = name.split('-'); if (parts.length >= 3) { - // Show last 2 segments: "8c0affadb860-1" from "cameleer3-sample-8c0affadb860-1" + // Show last 2 segments: "8c0affadb860-1" from "cameleer-sample-8c0affadb860-1" return parts.slice(-2).join('-'); } return name; @@ -1458,7 +1458,7 @@ git commit -m "fix: standardize number formatting with consistent unit spacing a **Spec items:** 6.4, 6.5 -**Note:** These items are in the `cameleer-saas` repository, not `cameleer3-server`. If the SaaS platform UI code is in a separate repo, this task needs to be executed there. If it's co-located, proceed with these files. +**Note:** These items are in the `cameleer-saas` repository, not `cameleer-server`. If the SaaS platform UI code is in a separate repo, this task needs to be executed there. If it's co-located, proceed with these files. - [ ] **Step 1: Identify platform component files** @@ -1520,7 +1520,7 @@ git commit -m "fix: platform label/value spacing and neutral license badge color **Files:** - Modify: `ui/src/pages/Admin/AuditLogPage.tsx` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AuditLogController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AuditLogController.java` - [ ] **Step 1: Add client-side CSV export for current page** diff --git a/docs/superpowers/plans/2026-04-11-infrastructure-endpoint-visibility.md b/docs/superpowers/plans/2026-04-11-infrastructure-endpoint-visibility.md index 75901197..83d5162a 100644 --- a/docs/superpowers/plans/2026-04-11-infrastructure-endpoint-visibility.md +++ b/docs/superpowers/plans/2026-04-11-infrastructure-endpoint-visibility.md @@ -10,7 +10,7 @@ **Spec:** `docs/superpowers/specs/2026-04-11-infrastructure-endpoint-visibility-design.md` -**Cross-repo:** Tasks 1-6 in `cameleer3-server`, Tasks 7-13 in `cameleer-saas`. +**Cross-repo:** Tasks 1-6 in `cameleer-server`, Tasks 7-13 in `cameleer-saas`. --- @@ -19,8 +19,8 @@ ### Task 1: Add property to application.yml **Files:** -- Modify: `cameleer3-server-app/src/main/resources/application.yml` -- Modify: `cameleer3-server-app/src/test/resources/application-test.yml` +- Modify: `cameleer-server-app/src/main/resources/application.yml` +- Modify: `cameleer-server-app/src/test/resources/application-test.yml` - [ ] **Step 1: Add the property to application.yml** @@ -41,7 +41,7 @@ In `application-test.yml`, add under `cameleer.server.security` (after `bootstra - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/resources/application.yml cameleer3-server-app/src/test/resources/application-test.yml +git add cameleer-server-app/src/main/resources/application.yml cameleer-server-app/src/test/resources/application-test.yml git commit -m "feat: add infrastructureendpoints property (default true)" ``` @@ -50,7 +50,7 @@ git commit -m "feat: add infrastructureendpoints property (default true)" ### Task 2: Add @ConditionalOnProperty to DatabaseAdminController **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DatabaseAdminController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DatabaseAdminController.java` - [ ] **Step 1: Add the annotation** @@ -73,7 +73,7 @@ Add before `@RestController`: - [ ] **Step 2: Verify compile** ```bash -mvn compile -pl cameleer3-server-app -q +mvn compile -pl cameleer-server-app -q ``` Expected: BUILD SUCCESS @@ -81,7 +81,7 @@ Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/DatabaseAdminController.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/DatabaseAdminController.java git commit -m "feat: make DatabaseAdminController conditional on infrastructureendpoints" ``` @@ -90,7 +90,7 @@ git commit -m "feat: make DatabaseAdminController conditional on infrastructuree ### Task 3: Add @ConditionalOnProperty to ClickHouseAdminController **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ClickHouseAdminController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClickHouseAdminController.java` - [ ] **Step 1: Add the annotation** @@ -113,7 +113,7 @@ Add before `@RestController`: - [ ] **Step 2: Verify compile** ```bash -mvn compile -pl cameleer3-server-app -q +mvn compile -pl cameleer-server-app -q ``` Expected: BUILD SUCCESS @@ -121,7 +121,7 @@ Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/ClickHouseAdminController.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClickHouseAdminController.java git commit -m "feat: make ClickHouseAdminController conditional on infrastructureendpoints" ``` @@ -132,12 +132,12 @@ git commit -m "feat: make ClickHouseAdminController conditional on infrastructur The server uses Spring Boot Actuator for `/api/v1/health`. Add a custom `HealthIndicator` that contributes the `infrastructureEndpoints` flag to the health response details. **Files:** -- Create: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ServerCapabilitiesHealthIndicator.java` +- Create: `cameleer-server-app/src/main/java/com/cameleer/server/app/config/ServerCapabilitiesHealthIndicator.java` - [ ] **Step 1: Create the health indicator** ```java -package com.cameleer3.server.app.config; +package com.cameleer.server.app.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.actuate.health.Health; @@ -162,7 +162,7 @@ public class ServerCapabilitiesHealthIndicator implements HealthIndicator { - [ ] **Step 2: Verify compile** ```bash -mvn compile -pl cameleer3-server-app -q +mvn compile -pl cameleer-server-app -q ``` Expected: BUILD SUCCESS @@ -180,7 +180,7 @@ Expected: `true` - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/config/ServerCapabilitiesHealthIndicator.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/config/ServerCapabilitiesHealthIndicator.java git commit -m "feat: expose infrastructureEndpoints flag in health endpoint" ``` @@ -1117,8 +1117,8 @@ git commit -m "feat: add Infrastructure to vendor sidebar and router" ### Task 14: Update documentation **Files:** -- Modify: `cameleer3-server/CLAUDE.md` — mention `CAMELEER_SERVER_SECURITY_INFRASTRUCTUREENDPOINTS` in the Security section and Docker Orchestration section -- Modify: `cameleer3-server/HOWTO.md` — add to Configuration table under Security +- Modify: `cameleer-server/CLAUDE.md` — mention `CAMELEER_SERVER_SECURITY_INFRASTRUCTUREENDPOINTS` in the Security section and Docker Orchestration section +- Modify: `cameleer-server/HOWTO.md` — add to Configuration table under Security - Modify: `cameleer-saas/CLAUDE.md` — mention Infrastructure page in vendor section, add to "Per-tenant server env vars" table - [ ] **Step 1: Update server CLAUDE.md** @@ -1152,7 +1152,7 @@ In the Layout.tsx description, add "Infrastructure" to the vendor sidebar list. ```bash # Server -cd cameleer3-server +cd cameleer-server git add CLAUDE.md HOWTO.md git commit -m "docs: document infrastructureendpoints flag" diff --git a/docs/superpowers/plans/2026-04-12-runtime-type-detection.md b/docs/superpowers/plans/2026-04-12-runtime-type-detection.md index 28d66924..d6b7b09a 100644 --- a/docs/superpowers/plans/2026-04-12-runtime-type-detection.md +++ b/docs/superpowers/plans/2026-04-12-runtime-type-detection.md @@ -14,21 +14,21 @@ | Action | File | Responsibility | |--------|------|----------------| -| Create | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeType.java` | Enum: AUTO, SPRING_BOOT, QUARKUS, PLAIN_JAVA, NATIVE | -| Create | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeDetector.java` | Probes JAR files and returns detected RuntimeType + mainClass | -| Create | `cameleer3-server-core/src/test/java/com/cameleer3/server/core/runtime/RuntimeDetectorTest.java` | Unit tests for detection logic | -| Create | `cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql` | Adds detected_runtime_type and detected_main_class to app_versions | -| Modify | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java` | Add detectedRuntimeType, detectedMainClass fields | -| Modify | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java` | Add updateDetectedRuntime method | -| Modify | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java` | Persist and read new columns | -| Modify | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java` | Run detection after upload | -| Modify | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java` | Add runtimeType, customArgs fields | -| Modify | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java` | Resolve runtimeType, customArgs | -| Modify | `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java` | Add runtimeType, customArgs, mainClass fields | -| Modify | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java` | Build entrypoint per runtime type | -| Modify | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java` | Resolve AUTO, pass runtime fields to ContainerRequest | -| Modify | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppController.java` | Validate customArgs on config save | -| Modify | `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EnvironmentAdminController.java` | Validate customArgs on config save | +| Create | `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeType.java` | Enum: AUTO, SPRING_BOOT, QUARKUS, PLAIN_JAVA, NATIVE | +| Create | `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeDetector.java` | Probes JAR files and returns detected RuntimeType + mainClass | +| Create | `cameleer-server-core/src/test/java/com/cameleer/server/core/runtime/RuntimeDetectorTest.java` | Unit tests for detection logic | +| Create | `cameleer-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql` | Adds detected_runtime_type and detected_main_class to app_versions | +| Modify | `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersion.java` | Add detectedRuntimeType, detectedMainClass fields | +| Modify | `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersionRepository.java` | Add updateDetectedRuntime method | +| Modify | `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppVersionRepository.java` | Persist and read new columns | +| Modify | `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java` | Run detection after upload | +| Modify | `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java` | Add runtimeType, customArgs fields | +| Modify | `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java` | Resolve runtimeType, customArgs | +| Modify | `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java` | Add runtimeType, customArgs, mainClass fields | +| Modify | `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java` | Build entrypoint per runtime type | +| Modify | `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java` | Resolve AUTO, pass runtime fields to ContainerRequest | +| Modify | `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppController.java` | Validate customArgs on config save | +| Modify | `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EnvironmentAdminController.java` | Validate customArgs on config save | | Modify | `ui/src/api/queries/admin/apps.ts` | Add new fields to AppVersion type | | Modify | `ui/src/pages/AppsTab/AppsTab.tsx` | Runtime Type select, Custom Arguments input, detection hint | @@ -37,15 +37,15 @@ ### Task 1: RuntimeType Enum and RuntimeDetector **Files:** -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeType.java` -- Create: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeDetector.java` -- Create: `cameleer3-server-core/src/test/java/com/cameleer3/server/core/runtime/RuntimeDetectorTest.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeType.java` +- Create: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeDetector.java` +- Create: `cameleer-server-core/src/test/java/com/cameleer/server/core/runtime/RuntimeDetectorTest.java` - [ ] **Step 1: Create the RuntimeType enum** ```java -// cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeType.java -package com.cameleer3.server.core.runtime; +// cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeType.java +package com.cameleer.server.core.runtime; public enum RuntimeType { AUTO, @@ -77,8 +77,8 @@ public enum RuntimeType { - [ ] **Step 2: Write RuntimeDetector tests** ```java -// cameleer3-server-core/src/test/java/com/cameleer3/server/core/runtime/RuntimeDetectorTest.java -package com.cameleer3.server.core.runtime; +// cameleer-server-core/src/test/java/com/cameleer/server/core/runtime/RuntimeDetectorTest.java +package com.cameleer.server.core.runtime; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -190,14 +190,14 @@ class RuntimeDetectorTest { - [ ] **Step 3: Run tests to verify they fail** -Run: `mvn test -pl cameleer3-server-core -Dtest=RuntimeDetectorTest -Dsurefire.failIfNoSpecifiedTests=false` +Run: `mvn test -pl cameleer-server-core -Dtest=RuntimeDetectorTest -Dsurefire.failIfNoSpecifiedTests=false` Expected: FAIL — `RuntimeDetector` class not found - [ ] **Step 4: Implement RuntimeDetector** ```java -// cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeDetector.java -package com.cameleer3.server.core.runtime; +// cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeDetector.java +package com.cameleer.server.core.runtime; import java.io.IOException; import java.io.InputStream; @@ -278,15 +278,15 @@ public final class RuntimeDetector { - [ ] **Step 5: Run tests to verify they pass** -Run: `mvn test -pl cameleer3-server-core -Dtest=RuntimeDetectorTest` +Run: `mvn test -pl cameleer-server-core -Dtest=RuntimeDetectorTest` Expected: All 8 tests PASS - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeType.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/RuntimeDetector.java \ - cameleer3-server-core/src/test/java/com/cameleer3/server/core/runtime/RuntimeDetectorTest.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeType.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/RuntimeDetector.java \ + cameleer-server-core/src/test/java/com/cameleer/server/core/runtime/RuntimeDetectorTest.java git commit -m "feat: add RuntimeType enum and RuntimeDetector for JAR probing" ``` @@ -295,25 +295,25 @@ git commit -m "feat: add RuntimeType enum and RuntimeDetector for JAR probing" ### Task 2: AppVersion + Migration + Repository **Files:** -- Create: `cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java` +- Create: `cameleer-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersion.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersionRepository.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppVersionRepository.java` - [ ] **Step 1: Create Flyway migration** ```sql --- cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql +-- cameleer-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql ALTER TABLE app_versions ADD COLUMN detected_runtime_type VARCHAR; ALTER TABLE app_versions ADD COLUMN detected_main_class VARCHAR; ``` - [ ] **Step 2: Update AppVersion record** -Replace the entire content of `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java`: +Replace the entire content of `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersion.java`: ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.time.Instant; import java.util.UUID; @@ -325,7 +325,7 @@ public record AppVersion(UUID id, UUID appId, int version, String jarPath, Strin - [ ] **Step 3: Add updateDetectedRuntime to AppVersionRepository** -In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java`, add after the `delete` method (line 12): +In `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersionRepository.java`, add after the `delete` method (line 12): ```java void updateDetectedRuntime(UUID id, String detectedRuntimeType, String detectedMainClass); @@ -334,7 +334,7 @@ In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVer Full file becomes: ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Optional; @@ -352,7 +352,7 @@ public interface AppVersionRepository { - [ ] **Step 4: Update PostgresAppVersionRepository** -In `cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java`: +In `cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppVersionRepository.java`: Update the SQL SELECT queries in `findByAppId` (line 24) and `findById` (line 31) to include the new columns: @@ -404,10 +404,10 @@ Expected: BUILD SUCCESS - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersion.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppVersionRepository.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/PostgresAppVersionRepository.java +git add cameleer-server-app/src/main/resources/db/migration/V10__app_version_runtime_detection.sql \ + cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersion.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppVersionRepository.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/storage/PostgresAppVersionRepository.java git commit -m "feat: add detected_runtime_type and detected_main_class to app_versions" ``` @@ -416,11 +416,11 @@ git commit -m "feat: add detected_runtime_type and detected_main_class to app_ve ### Task 3: Run Detection on Upload **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java` - [ ] **Step 1: Update AppService.uploadJar to run detection after saving** -In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java`, add an import at the top: +In `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java`, add an import at the top: ```java import java.nio.file.Path; @@ -481,7 +481,7 @@ Expected: BUILD SUCCESS - [ ] **Step 3: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java git commit -m "feat: run runtime detection on JAR upload" ``` @@ -490,12 +490,12 @@ git commit -m "feat: run runtime detection on JAR upload" ### Task 4: ConfigMerger + ResolvedContainerConfig **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java` -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java` - [ ] **Step 1: Add runtimeType and customArgs to ResolvedContainerConfig** -In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java`, add two new fields after `replayEnabled` (line 22): +In `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java`, add two new fields after `replayEnabled` (line 22): ```java boolean replayEnabled, @@ -532,7 +532,7 @@ The existing helper methods (`memoryLimitBytes`, `memoryReserveBytes`, `dockerCp - [ ] **Step 2: Update ConfigMerger.resolve() to include new fields** -In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java`, add two new lines at the end of the `resolve()` return statement (after line 33, the `replayEnabled` line): +In `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java`, add two new lines at the end of the `resolve()` return statement (after line 33, the `replayEnabled` line): ```java boolVal(appConfig, envConfig, "routeControlEnabled", true), @@ -550,8 +550,8 @@ Expected: FAIL — `DeploymentExecutor.resolvedConfigToMap()` creates `ResolvedC - [ ] **Step 4: Commit (with compile fix deferred to Task 5)** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ResolvedContainerConfig.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ConfigMerger.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ResolvedContainerConfig.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ConfigMerger.java git commit -m "feat: add runtimeType and customArgs to ResolvedContainerConfig and ConfigMerger" ``` @@ -560,16 +560,16 @@ git commit -m "feat: add runtimeType and customArgs to ResolvedContainerConfig a ### Task 5: ContainerRequest + DeploymentExecutor + Entrypoint **Files:** -- Modify: `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java` +- Modify: `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java` - [ ] **Step 1: Add runtimeType, customArgs, mainClass to ContainerRequest** -Replace the full content of `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java`: +Replace the full content of `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java`: ```java -package com.cameleer3.server.core.runtime; +package com.cameleer.server.core.runtime; import java.util.List; import java.util.Map; @@ -600,12 +600,12 @@ public record ContainerRequest( - [ ] **Step 2: Update DeploymentExecutor — resolve AUTO, pass runtime fields, update resolvedConfigToMap** -In `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java`: +In `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java`: Add import at top: ```java -import com.cameleer3.server.core.runtime.RuntimeType; +import com.cameleer.server.core.runtime.RuntimeType; ``` In `executeAsync()`, after `preFlightChecks(jarPath, config);` (after the PRE_FLIGHT stage comment block), add runtime type resolution: @@ -666,7 +666,7 @@ Update `resolvedConfigToMap()` to include new fields — add at the end before t - [ ] **Step 3: Add getVersion method to AppService** -In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java`, add after `listVersions` (line 33): +In `cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java`, add after `listVersions` (line 33): ```java public AppVersion getVersion(UUID versionId) { @@ -677,7 +677,7 @@ In `cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppSer - [ ] **Step 4: Update DockerRuntimeOrchestrator entrypoint construction** -In `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java`, replace the entrypoint block (the section starting with `// Resolve the JAR path for the entrypoint` through the `createCmd.withEntrypoint` call) with: +In `cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java`, replace the entrypoint block (the section starting with `// Resolve the JAR path for the entrypoint` through the `createCmd.withEntrypoint` call) with: ```java // Resolve the JAR path for the entrypoint @@ -707,10 +707,10 @@ In `cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRu String entrypoint = switch (request.runtimeType()) { case "quarkus" -> "exec java -javaagent:/app/agent.jar" + customArgs + " -jar " + appJarPath; case "plain-java" -> "exec java -javaagent:/app/agent.jar -cp " + appJarPath + - ":/app/cameleer3-log-appender.jar" + customArgs + " " + request.mainClass(); + ":/app/cameleer-log-appender.jar" + customArgs + " " + request.mainClass(); case "native" -> "exec " + appJarPath + customArgs; default -> // spring-boot (default) - "exec java -javaagent:/app/agent.jar -Dloader.path=/app/cameleer3-log-appender.jar" + + "exec java -javaagent:/app/agent.jar -Dloader.path=/app/cameleer-log-appender.jar" + customArgs + " -cp " + appJarPath + " org.springframework.boot.loader.launch.PropertiesLauncher"; }; createCmd.withEntrypoint("sh", "-c", entrypoint); @@ -724,10 +724,10 @@ Expected: BUILD SUCCESS - [ ] **Step 6: Commit** ```bash -git add cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/ContainerRequest.java \ - cameleer3-server-core/src/main/java/com/cameleer3/server/core/runtime/AppService.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DeploymentExecutor.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/runtime/DockerRuntimeOrchestrator.java +git add cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/ContainerRequest.java \ + cameleer-server-core/src/main/java/com/cameleer/server/core/runtime/AppService.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DeploymentExecutor.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/runtime/DockerRuntimeOrchestrator.java git commit -m "feat: build Docker entrypoint per runtime type with custom args support" ``` @@ -736,12 +736,12 @@ git commit -m "feat: build Docker entrypoint per runtime type with custom args s ### Task 6: Input Validation **Files:** -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppController.java` -- Modify: `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EnvironmentAdminController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppController.java` +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EnvironmentAdminController.java` - [ ] **Step 1: Add validation to AppController.updateContainerConfig** -In `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppController.java`, add a validation constant and helper method at the bottom of the class, before the `CreateAppRequest` record: +In `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppController.java`, add a validation constant and helper method at the bottom of the class, before the `CreateAppRequest` record: ```java private static final java.util.regex.Pattern CUSTOM_ARGS_PATTERN = @@ -763,7 +763,7 @@ In `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppCo Add import at top: ```java -import com.cameleer3.server.core.runtime.RuntimeType; +import com.cameleer.server.core.runtime.RuntimeType; ``` Update the `updateContainerConfig` method to call validation: @@ -792,7 +792,7 @@ Update the `updateContainerConfig` method to call validation: - [ ] **Step 2: Add same validation to EnvironmentAdminController.updateDefaultContainerConfig** -In `cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EnvironmentAdminController.java`, add the same constant, helper, and import. Then call `validateContainerConfig(defaultContainerConfig)` as the first line in the try block of `updateDefaultContainerConfig`. +In `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EnvironmentAdminController.java`, add the same constant, helper, and import. Then call `validateContainerConfig(defaultContainerConfig)` as the first line in the try block of `updateDefaultContainerConfig`. - [ ] **Step 3: Verify compilation** @@ -802,8 +802,8 @@ Expected: BUILD SUCCESS - [ ] **Step 4: Commit** ```bash -git add cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/AppController.java \ - cameleer3-server-app/src/main/java/com/cameleer3/server/app/controller/EnvironmentAdminController.java +git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/AppController.java \ + cameleer-server-app/src/main/java/com/cameleer/server/app/controller/EnvironmentAdminController.java git commit -m "feat: validate runtimeType and customArgs on container config save" ``` @@ -962,7 +962,7 @@ The `AppVersion` record gained 2 new fields and `ResolvedContainerConfig` gained Search for these with: ```bash -grep -rn "new AppVersion\|new ResolvedContainerConfig\|new ContainerRequest" --include="*.java" cameleer3-server-*/src/test/ +grep -rn "new AppVersion\|new ResolvedContainerConfig\|new ContainerRequest" --include="*.java" cameleer-server-*/src/test/ ``` - [ ] **Step 4: Commit fixes if any** diff --git a/docs/superpowers/plans/2026-04-14-claim-mapping-rules-editor.md b/docs/superpowers/plans/2026-04-14-claim-mapping-rules-editor.md new file mode 100644 index 00000000..b502909d --- /dev/null +++ b/docs/superpowers/plans/2026-04-14-claim-mapping-rules-editor.md @@ -0,0 +1,1007 @@ +# Claim Mapping Rules Editor Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Add a UI for managing OIDC claim mapping rules — a modal editor triggered from the OIDC config page with inline CRUD, reordering, and a server-side test panel. + +**Architecture:** One new backend endpoint (`POST /test`) added to the existing `ClaimMappingAdminController`. On the frontend, a new React Query hooks file for the claim mapping API, a new modal component with table + test panel, and a small modification to `OidcConfigPage` to add the trigger button. All CRUD operations use the existing `/api/v1/admin/claim-mappings` REST API. + +**Tech Stack:** Spring Boot (backend endpoint), React + TypeScript + React Query (frontend), `@cameleer/design-system` components, CSS modules. + +--- + +### Task 1: Backend — Add test endpoint + +**Files:** +- Modify: `cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClaimMappingAdminController.java` + +- [ ] **Step 1: Write the test endpoint** + +Add the `POST /test` endpoint and response DTO to `ClaimMappingAdminController.java`. Add these inside the class, after the existing `delete` method (line 76): + +```java +record MatchedRuleResponse(UUID ruleId, int priority, String claim, String matchType, + String matchValue, String action, String target) {} + +record TestResponse(List matchedRules, List effectiveRoles, + List effectiveGroups, boolean fallback) {} + +@PostMapping("/test") +@Operation(summary = "Test claim mapping rules against a set of claims") +public TestResponse test(@RequestBody Map claims) { + List rules = repository.findAll(); + List results = claimMappingService.evaluate(rules, claims); + + List matched = results.stream() + .map(r -> new MatchedRuleResponse( + r.rule().id(), r.rule().priority(), r.rule().claim(), + r.rule().matchType(), r.rule().matchValue(), + r.rule().action(), r.rule().target())) + .toList(); + + List effectiveRoles = results.stream() + .filter(r -> "assignRole".equals(r.rule().action())) + .map(r -> r.rule().target()) + .distinct() + .toList(); + + List effectiveGroups = results.stream() + .filter(r -> "addToGroup".equals(r.rule().action())) + .map(r -> r.rule().target()) + .distinct() + .toList(); + + return new TestResponse(matched, effectiveRoles, effectiveGroups, results.isEmpty()); +} +``` + +- [ ] **Step 2: Add ClaimMappingService dependency to the controller** + +The controller currently only injects `ClaimMappingRepository`. Add `ClaimMappingService` as a constructor parameter. Update the constructor: + +```java +private final ClaimMappingRepository repository; +private final ClaimMappingService claimMappingService; + +public ClaimMappingAdminController(ClaimMappingRepository repository, + ClaimMappingService claimMappingService) { + this.repository = repository; + this.claimMappingService = claimMappingService; +} +``` + +- [ ] **Step 3: Verify compilation** + +Run: `mvn clean compile -pl cameleer-server-app -am` +Expected: BUILD SUCCESS + +- [ ] **Step 4: Commit** + +```bash +git add cameleer-server-app/src/main/java/com/cameleer/server/app/controller/ClaimMappingAdminController.java +git commit -m "feat: add POST /test endpoint for claim mapping rule evaluation" +``` + +--- + +### Task 2: Frontend — API hooks for claim mapping rules + +**Files:** +- Create: `ui/src/api/queries/admin/claim-mappings.ts` + +- [ ] **Step 1: Create the types and hooks file** + +Create `ui/src/api/queries/admin/claim-mappings.ts` following the exact pattern from `rbac.ts` — React Query hooks using `adminFetch`: + +```typescript +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; +import { adminFetch } from './admin-api'; + +// ── Types ────────────────────────────────────────────────────────────── + +export interface ClaimMappingRule { + id: string; + claim: string; + matchType: 'equals' | 'contains' | 'regex'; + matchValue: string; + action: 'assignRole' | 'addToGroup'; + target: string; + priority: number; + createdAt: string; +} + +export interface CreateRuleRequest { + claim: string; + matchType: string; + matchValue: string; + action: string; + target: string; + priority: number; +} + +export interface MatchedRuleResponse { + ruleId: string; + priority: number; + claim: string; + matchType: string; + matchValue: string; + action: string; + target: string; +} + +export interface TestResponse { + matchedRules: MatchedRuleResponse[]; + effectiveRoles: string[]; + effectiveGroups: string[]; + fallback: boolean; +} + +// ── Query Hooks ──────────────────────────────────────────────────────── + +export function useClaimMappingRules() { + return useQuery({ + queryKey: ['admin', 'claim-mappings'], + queryFn: () => adminFetch('/claim-mappings'), + }); +} + +// ── Mutation Hooks ───────────────────────────────────────────────────── + +export function useCreateClaimMappingRule() { + const qc = useQueryClient(); + return useMutation({ + mutationFn: (req: CreateRuleRequest) => + adminFetch('/claim-mappings', { + method: 'POST', + body: JSON.stringify(req), + }), + onSuccess: () => { + qc.invalidateQueries({ queryKey: ['admin', 'claim-mappings'] }); + }, + }); +} + +export function useUpdateClaimMappingRule() { + const qc = useQueryClient(); + return useMutation({ + mutationFn: ({ id, ...req }: CreateRuleRequest & { id: string }) => + adminFetch(`/claim-mappings/${id}`, { + method: 'PUT', + body: JSON.stringify(req), + }), + onSuccess: () => { + qc.invalidateQueries({ queryKey: ['admin', 'claim-mappings'] }); + }, + }); +} + +export function useDeleteClaimMappingRule() { + const qc = useQueryClient(); + return useMutation({ + mutationFn: (id: string) => + adminFetch(`/claim-mappings/${id}`, { method: 'DELETE' }), + onSuccess: () => { + qc.invalidateQueries({ queryKey: ['admin', 'claim-mappings'] }); + }, + }); +} + +export function useTestClaimMappingRules() { + return useMutation({ + mutationFn: (claims: Record) => + adminFetch('/claim-mappings/test', { + method: 'POST', + body: JSON.stringify(claims), + }), + }); +} +``` + +- [ ] **Step 2: Verify TypeScript compiles** + +Run: `cd ui && npx tsc --noEmit` +Expected: no errors + +- [ ] **Step 3: Commit** + +```bash +git add ui/src/api/queries/admin/claim-mappings.ts +git commit -m "feat: add React Query hooks for claim mapping rules API" +``` + +--- + +### Task 3: Frontend — Rules table modal component + +**Files:** +- Create: `ui/src/pages/Admin/ClaimMappingRulesModal.tsx` +- Create: `ui/src/pages/Admin/ClaimMappingRulesModal.module.css` + +- [ ] **Step 1: Create the CSS module** + +Create `ui/src/pages/Admin/ClaimMappingRulesModal.module.css`: + +```css +.overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.6); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; +} + +.modal { + background: var(--surface-1); + border: 1px solid var(--border); + border-radius: 12px; + width: min(800px, 90vw); + max-height: 85vh; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.header { + display: flex; + justify-content: space-between; + align-items: flex-start; + padding: 16px 20px; + border-bottom: 1px solid var(--border); +} + +.headerInfo { + display: flex; + flex-direction: column; + gap: 2px; +} + +.title { + font-size: 15px; + font-weight: 600; + color: var(--text); +} + +.subtitle { + font-size: 11px; + color: var(--text-muted); +} + +.body { + overflow-y: auto; + flex: 1; +} + +.table { + width: 100%; + border-collapse: collapse; +} + +.table th { + text-align: left; + padding: 6px 8px; + font-size: 11px; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + border-bottom: 1px solid var(--border); +} + +.table td { + padding: 8px; + border-bottom: 1px solid var(--border-subtle, var(--border)); + font-size: 13px; + vertical-align: middle; +} + +.table th:last-child, +.table td:last-child { + text-align: right; +} + +.matchedRow { + background: rgba(var(--success-rgb, 68, 170, 136), 0.06); +} + +.priorityCell { + color: var(--text-muted); + font-size: 11px; + width: 30px; +} + +.claimCode { + background: var(--surface-2, var(--surface-1)); + padding: 2px 6px; + border-radius: 4px; + font-family: var(--font-mono); + font-size: 12px; +} + +.pill { + display: inline-block; + padding: 2px 8px; + border-radius: 10px; + font-size: 11px; + white-space: nowrap; +} + +.pillMatch { + background: var(--surface-2, var(--surface-1)); + color: var(--text-secondary, var(--text-muted)); +} + +.pillAssignRole { + background: color-mix(in srgb, var(--success) 15%, transparent); + color: var(--success); +} + +.pillAddToGroup { + background: color-mix(in srgb, var(--info, var(--primary)) 15%, transparent); + color: var(--info, var(--primary)); +} + +.matchValue { + font-family: var(--font-mono); + font-size: 12px; +} + +.targetCell { + font-weight: 500; +} + +.actions { + display: flex; + gap: 4px; + justify-content: flex-end; + align-items: center; +} + +.iconBtn { + background: none; + border: none; + color: var(--text-muted); + cursor: pointer; + padding: 4px; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; +} + +.iconBtn:hover { + color: var(--text); + background: var(--surface-2, var(--surface-1)); +} + +.iconBtn:disabled { + opacity: 0.3; + cursor: default; +} + +.addRow { + display: flex; + gap: 8px; + align-items: center; + padding: 12px 20px; + border-top: 1px solid var(--border); +} + +.addRow input, +.addRow select { + font-size: 12px; +} + +.claimInput { + width: 100px; +} + +.matchSelect { + width: 90px; +} + +.valueInput { + flex: 1; +} + +.actionSelect { + width: 120px; +} + +.targetInput { + width: 120px; +} + +.editRow input, +.editRow select { + font-size: 12px; +} + +.emptyState { + padding: 32px 20px; + text-align: center; + color: var(--text-muted); + font-size: 13px; +} + +.footer { + padding: 12px 20px; + font-size: 11px; + color: var(--text-muted); + border-top: 1px solid var(--border); +} + +/* ── Test Panel ─────────────────────────────────────────────────── */ + +.testToggle { + display: flex; + align-items: center; + gap: 8px; + padding: 12px 20px; + cursor: pointer; + border-top: 2px solid var(--border); + user-select: none; +} + +.testToggle:hover { + background: var(--surface-2, var(--surface-1)); +} + +.testToggleLabel { + font-size: 13px; + font-weight: 500; + color: var(--text-secondary, var(--text-muted)); +} + +.testToggleHint { + font-size: 11px; + color: var(--text-muted); +} + +.testPanel { + display: flex; + gap: 12px; + padding: 0 20px 16px; +} + +.testTextarea { + flex: 1; + display: flex; + flex-direction: column; + gap: 8px; +} + +.testTextarea textarea { + width: 100%; + box-sizing: border-box; + height: 140px; + background: var(--surface-2, var(--surface-1)); + border: 1px solid var(--border); + border-radius: 6px; + padding: 10px; + color: var(--text); + font-family: var(--font-mono); + font-size: 11px; + resize: vertical; +} + +.testResults { + flex: 1; + background: var(--surface-2, var(--surface-1)); + border: 1px solid var(--border); + border-radius: 6px; + padding: 12px; + min-height: 140px; + box-sizing: border-box; + overflow-y: auto; +} + +.testResultsTitle { + font-size: 11px; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: 10px; +} + +.testMatch { + margin-bottom: 10px; +} + +.testMatchLabel { + font-size: 11px; + color: var(--success); + margin-bottom: 4px; +} + +.testMatchDetail { + font-size: 12px; + padding-left: 16px; +} + +.testEffective { + border-top: 1px solid var(--border); + padding-top: 8px; + margin-top: 4px; + font-size: 11px; + color: var(--text-muted); +} + +.testEffectiveValues { + color: var(--success); + font-weight: 500; +} + +.testFallback { + font-size: 12px; + color: var(--warning); + font-style: italic; +} + +.testError { + font-size: 12px; + color: var(--error); +} + +.testEmpty { + font-size: 12px; + color: var(--text-muted); + font-style: italic; +} + +.matchCheck { + color: var(--success); +} +``` + +- [ ] **Step 2: Create the modal component** + +Create `ui/src/pages/Admin/ClaimMappingRulesModal.tsx`: + +```tsx +import { useState } from 'react'; +import { ChevronUp, ChevronDown, Pencil, X, Check } from 'lucide-react'; +import { Button, Input, Select, ConfirmDialog, useToast } from '@cameleer/design-system'; +import { + useClaimMappingRules, + useCreateClaimMappingRule, + useUpdateClaimMappingRule, + useDeleteClaimMappingRule, + useTestClaimMappingRules, +} from '../../api/queries/admin/claim-mappings'; +import type { ClaimMappingRule, TestResponse } from '../../api/queries/admin/claim-mappings'; +import styles from './ClaimMappingRulesModal.module.css'; + +const MATCH_OPTIONS = [ + { value: 'equals', label: 'equals' }, + { value: 'contains', label: 'contains' }, + { value: 'regex', label: 'regex' }, +]; + +const ACTION_OPTIONS = [ + { value: 'assignRole', label: 'assign role' }, + { value: 'addToGroup', label: 'add to group' }, +]; + +const EMPTY_FORM = { claim: '', matchType: 'equals', matchValue: '', action: 'assignRole', target: '' }; + +const TEST_PLACEHOLDER = `{ + "sub": "user-42", + "email": "jane@acme.com", + "department": "engineering", + "groups": ["frontend", "design"] +}`; + +interface Props { + open: boolean; + onClose: () => void; +} + +export default function ClaimMappingRulesModal({ open, onClose }: Props) { + const { toast } = useToast(); + const { data: rules = [], isLoading } = useClaimMappingRules(); + const createRule = useCreateClaimMappingRule(); + const updateRule = useUpdateClaimMappingRule(); + const deleteRule = useDeleteClaimMappingRule(); + const testRules = useTestClaimMappingRules(); + + // Add form + const [addForm, setAddForm] = useState({ ...EMPTY_FORM }); + + // Edit state + const [editingId, setEditingId] = useState(null); + const [editForm, setEditForm] = useState({ ...EMPTY_FORM }); + + // Delete confirm + const [deleteTarget, setDeleteTarget] = useState(null); + + // Test panel + const [testOpen, setTestOpen] = useState(false); + const [testInput, setTestInput] = useState(''); + const [testResult, setTestResult] = useState(null); + const [testError, setTestError] = useState(''); + + if (!open) return null; + + const sorted = [...rules].sort((a, b) => a.priority - b.priority); + const matchedRuleIds = new Set((testResult?.matchedRules ?? []).map((r) => r.ruleId)); + + // ── Handlers ────────────────────────────────────────────────────── + + function handleAdd() { + const maxPriority = sorted.length > 0 ? Math.max(...sorted.map((r) => r.priority)) : -1; + createRule.mutate( + { + claim: addForm.claim.trim(), + matchType: addForm.matchType, + matchValue: addForm.matchValue.trim(), + action: addForm.action, + target: addForm.target.trim(), + priority: maxPriority + 1, + }, + { + onSuccess: () => { + setAddForm({ ...EMPTY_FORM }); + toast({ title: 'Rule created', variant: 'success' }); + }, + onError: (e) => toast({ title: 'Failed to create rule', description: e.message, variant: 'error', duration: 86_400_000 }), + }, + ); + } + + function startEdit(rule: ClaimMappingRule) { + setEditingId(rule.id); + setEditForm({ + claim: rule.claim, + matchType: rule.matchType, + matchValue: rule.matchValue, + action: rule.action, + target: rule.target, + }); + } + + function saveEdit(rule: ClaimMappingRule) { + updateRule.mutate( + { + id: rule.id, + claim: editForm.claim.trim(), + matchType: editForm.matchType, + matchValue: editForm.matchValue.trim(), + action: editForm.action, + target: editForm.target.trim(), + priority: rule.priority, + }, + { + onSuccess: () => { + setEditingId(null); + toast({ title: 'Rule updated', variant: 'success' }); + }, + onError: (e) => toast({ title: 'Failed to update rule', description: e.message, variant: 'error', duration: 86_400_000 }), + }, + ); + } + + function confirmDelete() { + if (!deleteTarget) return; + deleteRule.mutate(deleteTarget.id, { + onSuccess: () => { + setDeleteTarget(null); + toast({ title: 'Rule deleted', variant: 'warning' }); + }, + onError: (e) => { + setDeleteTarget(null); + toast({ title: 'Failed to delete rule', description: e.message, variant: 'error', duration: 86_400_000 }); + }, + }); + } + + function handleMove(rule: ClaimMappingRule, direction: 'up' | 'down') { + const idx = sorted.findIndex((r) => r.id === rule.id); + const swapIdx = direction === 'up' ? idx - 1 : idx + 1; + if (swapIdx < 0 || swapIdx >= sorted.length) return; + + const other = sorted[swapIdx]; + // Swap priorities + updateRule.mutate( + { id: rule.id, claim: rule.claim, matchType: rule.matchType, matchValue: rule.matchValue, action: rule.action, target: rule.target, priority: other.priority }, + { + onSuccess: () => { + updateRule.mutate( + { id: other.id, claim: other.claim, matchType: other.matchType, matchValue: other.matchValue, action: other.action, target: other.target, priority: rule.priority }, + ); + }, + }, + ); + } + + function handleTest() { + setTestError(''); + setTestResult(null); + let claims: Record; + try { + claims = JSON.parse(testInput); + } catch { + setTestError('Invalid JSON — paste a decoded JWT claims object'); + return; + } + testRules.mutate(claims, { + onSuccess: (result) => setTestResult(result), + onError: (e) => setTestError(e.message), + }); + } + + // ── Render helpers ──────────────────────────────────────────────── + + function actionPillClass(action: string) { + return action === 'assignRole' ? styles.pillAssignRole : styles.pillAddToGroup; + } + + function actionLabel(action: string) { + return action === 'assignRole' ? 'assign role' : 'add to group'; + } + + const addDisabled = !addForm.claim.trim() || !addForm.matchValue.trim() || !addForm.target.trim(); + + // ── JSX ─────────────────────────────────────────────────────────── + + return ( +

+
e.stopPropagation()}> + {/* Header */} +
+
+
Claim Mapping Rules
+
Map JWT claims to Cameleer roles and groups. Evaluated on every OIDC login.
+
+ +
+ + {/* Body */} +
+ {isLoading ? ( +
Loading...
+ ) : sorted.length === 0 ? ( +
+ No claim mapping rules configured.
+ Rules let you assign roles and groups based on JWT claims. +
+ ) : ( + + + + + + + + + + + + + + {sorted.map((rule, idx) => { + const isEditing = editingId === rule.id; + const isMatched = matchedRuleIds.has(rule.id); + return ( + + + {isEditing ? ( + <> + + + + + + + + ) : ( + <> + + + + + + + + )} + + ); + })} + +
#ClaimMatchValueActionTarget
{idx + 1} setEditForm({ ...editForm, claim: e.target.value })} className={styles.claimInput} /> setEditForm({ ...editForm, matchValue: e.target.value })} /> setEditForm({ ...editForm, target: e.target.value })} /> +
+ + +
+
{rule.claim}{rule.matchType}{rule.matchValue}{actionLabel(rule.action)}{rule.target} + {isMatched ? ( + + ) : ( +
+ + + + +
+ )} +
+ )} + + {/* Add row */} +
+ setAddForm({ ...addForm, claim: e.target.value })} className={styles.claimInput} /> + setAddForm({ ...addForm, matchValue: e.target.value })} className={styles.valueInput} /> + setAddForm({ ...addForm, target: e.target.value })} + className={styles.targetInput} + /> + +
+ + {/* Test panel */} +
setTestOpen(!testOpen)}> + {testOpen ? '\u25B2' : '\u25BC'} + Test Rules + Paste a decoded JWT to preview which rules would fire +
+ + {testOpen && ( +
+
+