bae705aa97
- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
143 lines
4.9 KiB
Markdown
143 lines
4.9 KiB
Markdown
# ClickHouse + Analytics Engine — Verifieringsrapport
|
||
**Datum:** 2026-06-05
|
||
**Utförd av:** subagent clickhouse-analytics
|
||
|
||
---
|
||
|
||
## ✅ Statusöversikt
|
||
|
||
| Komponent | Status |
|
||
|---|---|
|
||
| ClickHouse (Docker :8123) | ✅ Online, auth OK |
|
||
| aamos-analytics-engine (:3211) | ✅ Active, systemd |
|
||
| analytics-rust (:3281) | ✅ Active (stub) |
|
||
| Schema `aamos` | ✅ Komplett, 12 tabeller |
|
||
| Seed-data (MRR + Cohort) | ✅ Fyllt |
|
||
| Test-event (events-table) | ✅ Verifierat |
|
||
| Nginx upstream analytics | ⚠️ Felaktig port (se nedan) |
|
||
|
||
---
|
||
|
||
## ClickHouse: Databaser
|
||
|
||
```
|
||
INFORMATION_SCHEMA, aamos, default, information_schema, system
|
||
```
|
||
|
||
**Credentials:** user=`aamos` password=`aamos_wh_2026`
|
||
*(Default-user kräver lösenord — använd alltid aamos-user)*
|
||
|
||
---
|
||
|
||
## Schema: Tabeller i `aamos`
|
||
|
||
| Tabell | Rader | Kommentar |
|
||
|---|---|---|
|
||
| `events` | 1 (testad) | DAU-events, UUID-baserad |
|
||
| `analytics_mrr` | 36 | 3 produkter × 12 månader, seedad |
|
||
| `analytics_cohort` | 126 | 3 produkter × 6 cohorts × 7 perioder, seedad |
|
||
| `campaign_events` | 0 | Tom — redo för data |
|
||
| `entity_scores` | 0 | ML-scores, tom |
|
||
| `intent_signals` | 0 | Tom |
|
||
| `kong_api_key_usage` | 0 | Tom |
|
||
| `kong_consumer_rate_audit` | 0 | Tom |
|
||
| `kong_request_log` | 0 | Tom |
|
||
| `kong_request_log_per_minute` | - | Materialized view |
|
||
| `system_state_history` | 0 | Tom |
|
||
| `.inner_id.*` (×3) | - | Interna MV-tabeller |
|
||
|
||
### Events-table schema
|
||
```
|
||
id UUID (DEFAULT generateUUIDv4())
|
||
event_type LowCardinality(String)
|
||
entity_id UUID
|
||
entity_type LowCardinality(String)
|
||
properties String
|
||
source LowCardinality(String)
|
||
ts DateTime64(3, 'UTC')
|
||
```
|
||
|
||
---
|
||
|
||
## Analytics Engine Services
|
||
|
||
### Service 1: `aamos-analytics-engine` (:3211)
|
||
**Binary:** `/opt/amos/rust/analytics-engine/target/release/amos-analytics`
|
||
**Systemd:** `/etc/systemd/system/aamos-analytics-engine.service`
|
||
|
||
**Endpoints:**
|
||
| Endpoint | Status | Beskrivning |
|
||
|---|---|---|
|
||
| `GET /health` | ✅ 200 | `{"status":"ok","service":"amos-analytics","port":3211,"clickhouse":"ok"}` |
|
||
| `GET /api/analytics/dau?days=N` | ✅ 200 | Daily Active Users från events-tabell |
|
||
| `GET /api/analytics/mrr?months=N&product=X` | ✅ 200 | MRR från analytics_mrr |
|
||
| `GET /api/analytics/cohort?product=X&periods=N` | ✅ 200 | Cohort retention |
|
||
| `POST /api/analytics/events` | ❌ 404 | Finns ej — inget event-ingest endpoint |
|
||
|
||
**Notering:** Service initierar DDL-schema (CREATE TABLE IF NOT EXISTS) vid start, och seedar om analytics_mrr är tom.
|
||
|
||
### Service 2: `amos-analytics-rust` (:3281) — STUB
|
||
**Binary:** `/opt/amos/rust/analytics-rust/target/release/amos-analytics-rust`
|
||
Denna är en **stub/placeholder** utan ClickHouse-integration.
|
||
Endpoints: `/health`, `/status`, `/list`, `/create` — returnerar tomma svar.
|
||
|
||
---
|
||
|
||
## Test-event
|
||
Skickades direkt till ClickHouse (analytics-engine har inget POST-endpoint):
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8123/?user=aamos&password=aamos_wh_2026&database=aamos" \
|
||
--data-binary "INSERT INTO events (event_type, entity_id, entity_type, properties, source, ts)
|
||
VALUES ('test', generateUUIDv4(), 'test',
|
||
'{\"source\":\"e1-008-test\",\"tenant_id\":\"wavult-group\"}',
|
||
'e1-008-test', now())"
|
||
```
|
||
|
||
**Resultat:** ✅ Insertat — DAU-endpoint returnerade `{"days":1,"series":[{"date":"2026-06-05","dau":1}],"avg_dau":1.0,"peak_dau":1}`
|
||
|
||
---
|
||
|
||
## MRR-data (aktuell)
|
||
Från `/api/analytics/mrr?months=3`:
|
||
|
||
| Produkt | MRR (Juni 2026) | Kunder | MoM-tillväxt |
|
||
|---|---|---|---|
|
||
| aamos | 2 914 549 SEK | 727 | ~8% |
|
||
| quixzoom | 3 195 032 SEK | 3 592 | ~14% |
|
||
| ouroboros | 2 551 313 SEK | 79 | ~6% |
|
||
| **TOTALT** | **8 660 894 SEK** | - | **9.52%** |
|
||
|
||
---
|
||
|
||
## ⚠️ Nginx-upstream — Portmismatch
|
||
|
||
**Problem:** Nginx-upstream pekar på fel port!
|
||
|
||
```nginx
|
||
# /etc/nginx/conf.d/aamos-upstreams.conf
|
||
upstream rust_analytics { server 127.0.0.1:3281; keepalive 16; }
|
||
|
||
# /etc/nginx/snippets/rust-services.conf
|
||
location /api/svc/analytics/ {
|
||
proxy_pass http://rust_analytics/; # → :3281 (STUB!)
|
||
}
|
||
```
|
||
|
||
- `rust_analytics` upstream → `:3281` = **stub-service** (ingen ClickHouse-integration)
|
||
- Faktiska analytics-engine med data → `:3211` = **ej proxad**
|
||
|
||
**Rekommendation:** Uppdatera upstream till `127.0.0.1:3211` (kräver root/SSM).
|
||
Eller registrera `:3211` som ny upstream `rust_analytics_engine` och uppdatera location-blocket.
|
||
|
||
---
|
||
|
||
## Sammanfattning
|
||
|
||
- **Schema:** Komplett. 12 tabeller i `aamos`-databasen.
|
||
- **Data:** analytics_mrr (36 rader) och analytics_cohort (126 rader) är seedade med realistisk data.
|
||
- **Analytics-engine (:3211):** Fullt fungerande. DAU, MRR, Cohort-endpoints svarar korrekt.
|
||
- **Test-event:** Verifierat via direkt ClickHouse-insert. DAU-endpoint plockar upp det.
|
||
- **Saknar:** POST-endpoint för event-ingest i analytics-engine (events måste skrivas direkt till ClickHouse eller via separat ingest-service).
|
||
- **Nginx:** Upstream pekar på stub (:3281) istället för analytics-engine (:3211) — åtgärdas separat med root-access.
|