mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-08 03:00:28 -04:00
### Changes 🏗️ Adds `autogpt_platform/analytics/` — 14 SQL view definitions that expose production data safely through a locked-down `analytics` schema. **Security model:** - Views use `security_invoker = false` (PostgreSQL 15+), so they execute as their owner (`postgres`), not the caller - `analytics_readonly` role only has access to `analytics.*` — cannot touch `platform` or `auth` tables directly **Files:** - `backend/generate_views.py` — does everything; auto-reads credentials from `backend/.env` - `analytics/queries/*.sql` — 14 documented view definitions (auth, user activity, executions, onboarding funnel, cohort retention) --- ### Running locally (dev) ```bash cd autogpt_platform/backend # First time only — creates analytics schema, role, grants poetry run analytics-setup # Create / refresh views (auto-reads backend/.env) poetry run analytics-views ``` ### Running in production (Supabase) ```bash cd autogpt_platform/backend # Step 1 — first time only (run in Supabase SQL Editor as postgres superuser) poetry run analytics-setup --dry-run # Paste the output into Supabase SQL Editor and run # Step 2 — apply views (use direct connection host, not pooler) poetry run analytics-views --db-url "postgresql://postgres:PASSWORD@db.<ref>.supabase.co:5432/postgres" # Step 3 — set password for analytics_readonly so external tools can connect # Run in Supabase SQL Editor: # ALTER ROLE analytics_readonly WITH PASSWORD 'your-password'; ``` --- ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Setup + views applied cleanly on local Postgres 15 - [x] `analytics_readonly` can `SELECT` from all 14 `analytics.*` views - [x] `analytics_readonly` gets `permission denied` on `platform.*` and `auth.*` directly --------- Co-authored-by: Otto (AGPT) <otto@agpt.co>
42 lines
1.4 KiB
SQL
42 lines
1.4 KiB
SQL
-- =============================================================
|
|
-- View: analytics.user_onboarding_integration
|
|
-- Looker source alias: ds75 | Charts: 1
|
|
-- =============================================================
|
|
-- DESCRIPTION
|
|
-- Pre-aggregated count of users who selected each integration
|
|
-- during onboarding. One row per integration type, sorted
|
|
-- by popularity.
|
|
--
|
|
-- SOURCE TABLES
|
|
-- platform.UserOnboarding — integrations array column
|
|
--
|
|
-- OUTPUT COLUMNS
|
|
-- integration TEXT Integration name (e.g. 'github', 'slack', 'notion')
|
|
-- users_with_integration BIGINT Distinct users who selected this integration
|
|
--
|
|
-- WINDOW
|
|
-- Users who started onboarding in the last 90 days
|
|
--
|
|
-- EXAMPLE QUERIES
|
|
-- -- Full integration popularity ranking
|
|
-- SELECT * FROM analytics.user_onboarding_integration;
|
|
--
|
|
-- -- Top 5 integrations
|
|
-- SELECT * FROM analytics.user_onboarding_integration LIMIT 5;
|
|
-- =============================================================
|
|
|
|
WITH exploded AS (
|
|
SELECT
|
|
u."userId" AS user_id,
|
|
UNNEST(u."integrations") AS integration
|
|
FROM platform."UserOnboarding" u
|
|
WHERE u."createdAt" >= CURRENT_DATE - INTERVAL '90 days'
|
|
)
|
|
SELECT
|
|
integration,
|
|
COUNT(DISTINCT user_id) AS users_with_integration
|
|
FROM exploded
|
|
WHERE integration IS NOT NULL AND integration <> ''
|
|
GROUP BY integration
|
|
ORDER BY users_with_integration DESC
|