== containers ==
openpanel-op-proxy-1	caddy:2-alpine	Up 18 minutes
openpanel-op-worker-1	lindesvard/openpanel-worker:2	Up 8 minutes (healthy)
openpanel-op-dashboard-1	lindesvard/openpanel-dashboard:2	Up 18 minutes (healthy)
openpanel-op-api-1	lindesvard/openpanel-api:2	Up 13 minutes (healthy)
openpanel-op-db-1	postgres:14-alpine	Up 19 minutes (healthy)
openpanel-op-kv-1	redis:7.2.5-alpine	Up 19 minutes (healthy)
openpanel-op-ch-1	clickhouse/clickhouse-server:25.10.2.65	Up 19 minutes (healthy)
== restart policies (HostConfig.RestartPolicy.Name) ==
openpanel-op-proxy-1 always
openpanel-op-api-1 always
openpanel-op-worker-1 always
openpanel-op-dashboard-1 always
openpanel-op-db-1 always
openpanel-op-kv-1 always
openpanel-op-ch-1 always
== redis persistence (vendor command: redis-server --maxmemory-policy noeviction) ==
save
3600 1 300 100 60 10000
appendonly
no
maxmemory-policy
noeviction
maxmemory
0
rdb_changes_since_last_save:3364
rdb_last_save_time:1789391574
aof_enabled:0
== worker env (buffer/queue knobs; unset == code defaults) ==
BATCH_INTERVAL=10000
BATCH_SIZE=5000
NODE_ENV=production
== api env ==
BATCH_SIZE=5000
API_URL=http://localhost/api
BATCH_INTERVAL=10000
SELF_HOSTED=true
NODE_ENV=production
== clickhouse ==
INFORMATION_SCHEMA
default
information_schema
openpanel
system
.inner_id.1d3e6b7c-7cb8-4cd8-baae-af2ffa9d4bb0
.inner_id.79121a93-f094-4929-b2d4-9116a3966e2f
.inner_id.8a33455c-a771-4352-bf3e-9c06ac4686e8
.inner_id.b58e1b95-d45d-4f04-b206-ad9e4dd9277d
.inner_id.cef1662f-7195-4230-8cc7-c4a18aa295e3
.inner_id.de61594c-a2ee-4409-90c1-8ddfb91bbb96
cohort_events_mv
cohort_members
cohort_metadata
dau_mv
distinct_event_names_mv
event_property_values_mv
events
events_20251123
events_bots
events_imports
groups
gsc_daily
gsc_pages_daily
gsc_queries_daily
profile_aliases
profile_event_property_summary_mv
profile_event_summary_mv
profiles
profiles_20260504
self_hosting
session_replay_chunks
sessions
sessions_20251123
== openpanel.events schema ==
id	UUID	DEFAULT	generateUUIDv4()			
name	LowCardinality(String)					
sdk_name	LowCardinality(String)					
sdk_version	LowCardinality(String)					
device_id	String				ZSTD(3)	
profile_id	String				ZSTD(3)	
project_id	String				ZSTD(3)	
session_id	String				LZ4	
groups	Array(String)	DEFAULT	[]		ZSTD(3)	
path	String				ZSTD(3)	
origin	String				ZSTD(3)	
referrer	String				ZSTD(3)	
referrer_name	String				ZSTD(3)	
referrer_type	LowCardinality(String)					
revenue	UInt64					
duration	UInt64				Delta(4), LZ4	
properties	Map(String, String)				ZSTD(3)	
created_at	DateTime64(3)				DoubleDelta, ZSTD(3)	
country	LowCardinality(FixedString(2))					
city	String					
region	LowCardinality(String)					
longitude	Nullable(Float32)				Gorilla(4), LZ4	
latitude	Nullable(Float32)				Gorilla(4), LZ4	
os	LowCardinality(String)					
os_version	LowCardinality(String)					
browser	LowCardinality(String)					
browser_version	LowCardinality(String)					
device	LowCardinality(String)					
brand	LowCardinality(String)					
model	LowCardinality(String)					
imported_at	Nullable(DateTime)				Delta(4), LZ4	
== events engine ==
events	MergeTree	project_id, toDate(created_at), created_at, name
events_bots	MergeTree	project_id, created_at
sessions	VersionedCollapsingMergeTree	project_id, toDate(created_at), created_at, version
== redis keys (sample) ==
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:402f8b9e7863fb0bfb67c2ccdb2f4636
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:c2e0528b478036e031857f200ffebd2b
session:c5578a81-a414-48b0-9b98-62292cc6b342:9b48868ebdb06ef0200e7707254a32ce
session:c5578a81-a414-48b0-9b98-62292cc6b342:ea8effff6a7f8f61df23d4990856d919
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:2e5ae8b34f513783a88a68894d7ebc7f
session:c5578a81-a414-48b0-9b98-62292cc6b342:e5af79ce6a39e81f4aaa23e9fe4cf99b
session:c5578a81-a414-48b0-9b98-62292cc6b342:74521ef4cb80522087376742d0a1f945
session:c5578a81-a414-48b0-9b98-62292cc6b342:24e6f85c7778ff1da4ad04b52d4aa743
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:6cebf34190bfabd601e4e168556a4d3e
session:c5578a81-a414-48b0-9b98-62292cc6b342:296b611ddfa962f8d4dfc2a947c5c1da
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:940ee8fe63b7e755b7b2efe4635277b9
bull:cron:repeat:flushProfiles
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:f4411c8ee06e4dbd6351f3513cc0fd09
session:c5578a81-a414-48b0-9b98-62292cc6b342:75e1d5eea871ff56ff317d5bfe1b39e2
cachable:getProjectById:[c5578a81-a414-48b0-9b98-62292cc6b342]
session:c5578a81-a414-48b0-9b98-62292cc6b342:c21a85b97301ce20e503f276c6967f14
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:ee95d86a7a848cb91ae4e4e30fa74ef0
session:c5578a81-a414-48b0-9b98-62292cc6b342:624126206958155692facf14634a2342
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:72285e065f71ea2c310a28097bd6078f
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:5c1fc5b4a5b89efec5be944d2e9a27ef
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:ea416851b7eab120c638a27d5e8ad23c
bull:cron:repeat:gscSync
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:fae8322330bbfc9df972ad3dcee29553
session:c5578a81-a414-48b0-9b98-62292cc6b342:0c00cd20511defcae20aa0947c49b4ea
session:c5578a81-a414-48b0-9b98-62292cc6b342:09aa8e6aaa3b3fff137b166afd221c85
session:c5578a81-a414-48b0-9b98-62292cc6b342:bcf273d4822536cf15308e004d743061
session:c5578a81-a414-48b0-9b98-62292cc6b342:cfd1dc57b5f8a06c7e486bde0db36791
bull:cron:repeat:flushProfiles:1789391739723
session:c5578a81-a414-48b0-9b98-62292cc6b342:3c9d7145faee8bc2af2f37d9b24f8bd8
session:c5578a81-a414-48b0-9b98-62292cc6b342:653c91f1811b6a47b47bc35cd5a78ec0
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:2861093ca2cb0b8435bd47dee8d17657
session:c5578a81-a414-48b0-9b98-62292cc6b342:b081c249439d3f6226e8ba7f34c555d0
session:c5578a81-a414-48b0-9b98-62292cc6b342:1fefef4159c4f2a11a6c21c94f023a45
session:c5578a81-a414-48b0-9b98-62292cc6b342:be495090c2efbdd1a8533f56a93cc865
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:6cf9a3a3747ddb4b67dad17812c09e34
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:b162649e746a9c3aae7c635bff0040ee
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:7afb0d39dda464d8f5453d28410d38a7
session:c5578a81-a414-48b0-9b98-62292cc6b342:545bd778a21a6c944e5473649e50a9fb
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:083b9a3efbdbfb3ab2e3fd6111866fe1
bull:cron:repeat:cohortRefresh
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:70b7d6498b5701c729657a8b0851cbab
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:f29cdedb45682be2338c3fb53d586904
session:c5578a81-a414-48b0-9b98-62292cc6b342:661724250696cf4d43b6e74e1787675c
session:c5578a81-a414-48b0-9b98-62292cc6b342:6380b1a7cd95d31414d8bf0a97e04c86
session:wallclock:c5578a81-a414-48b0-9b98-62292cc6b342
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:7d955c957de8d87bc9205322ca8fed8e
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:bbeb6ad9f50c33fdfc3d57cb29ab52a2
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:8ff6e7efe4710c712e81797cec489d14
session:c5578a81-a414-48b0-9b98-62292cc6b342:4484addb8111d2729b1bbafe2d9241c7
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:8dd7261837836052a8b43352273ca9fb
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:a285d7531ebccf785f4c0f39cc8e15c1
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:bc8a7c7836ebb092c9b48a6893c4de0a
session:c5578a81-a414-48b0-9b98-62292cc6b342:2b51d078c7c6068975c688e7c6765743
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:39827b66de84badc49781e05c3e6b56e
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:3a974d539ef5a05f40a4b745df64ca32
session:c5578a81-a414-48b0-9b98-62292cc6b342:3136187be4fab49a3d1a35dadeb581ab
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:aabbaf0004e2e81c48410c11cba6fc16
profile-cache:c5578a81-a414-48b0-9b98-62292cc6b342:f7d4d5d2086aaa045b1ddeb92674eaef
session:c5578a81-a414-48b0-9b98-62292cc6b342:d268e2b96428eea45d801d369a651839
session:c5578a81-a414-48b0-9b98-62292cc6b342:b162649e746a9c3aae7c635bff0040ee
== redis event_buffer:queue llen ==
0
== caddyfile ==
localhost {
    encode gzip
    
    handle_path /api* {
        reverse_proxy op-api:3000
    }

    reverse_proxy /* op-dashboard:3000
}

worker.localhost {
    encode gzip

    basic_auth {
        admin $2a$14$.hkMCyjL14c2.Jr0UjH9CeYpK6EaBSLv17IezxB1xkJhVxq0TxcHm
    }

    reverse_proxy op-worker:3000
}== http vs https through caddy ==
http://localhost/api/healthcheck -> 308 redirect=https://localhost/api/healthcheck
https://localhost/api/healthcheck -> {"ready":true,"redis":true,"db":true,"ch":true,"failedDependencies":[],"workingDependencies":["redis","db","ch"]} 200
== postgres tables of interest ==
                                            Table "public.organizations"
                 Column                  |              Type              | Collation | Nullable |      Default      
-----------------------------------------+--------------------------------+-----------+----------+-------------------
 id                                      | text                           |           | not null | gen_random_uuid()
 name                                    | text                           |           | not null | 
 createdByUserId                         | text                           |           |          | 
 createdAt                               | timestamp(3) without time zone |           | not null | CURRENT_TIMESTAMP
 updatedAt                               | timestamp(3) without time zone |           | not null | CURRENT_TIMESTAMP
 subscriptionCreatedByUserId             | text                           |           |          | 
 subscriptionCustomerId                  | text                           |           |          | 
 subscriptionEndsAt                      | timestamp(3) without time zone |           |          | 
 subscriptionId                          | text                           |           |          | 
 subscriptionPriceId                     | text                           |           |          | 
 subscriptionProductId                   | text                           |           |          | 
 subscriptionStatus                      | text                           |           |          | 
 subscriptionPeriodEventsCount           | integer                        |           | not null | 0
 subscriptionStartsAt                    | timestamp(3) without time zone |           |          | 
 subscriptionInterval                    | text                           |           |          | 
 subscriptionPeriodEventsLimit           | integer                        |           | not null | 0
 subscriptionPeriodEventsCountExceededAt | timestamp(3) without time zone |           |          | 
 subscriptionCanceledAt                  | timestamp(3) without time zone |           |          | 
 deleteAt                                | timestamp(3) without time zone |           |          | 
 timezone                                | text                           |           |          | 
 onboarding                              | text                           |           |          | 'completed'::text
Indexes:
    "organizations_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "organizations_createdByUserId_fkey" FOREIGN KEY ("createdByUserId") REFERENCES users(id) ON UPDATE CASCADE ON DELETE SET NULL
    "organizations_subscriptionCreatedByUserId_fkey" FOREIGN KEY ("subscriptionCreatedByUserId") REFERENCES users(id) ON UPDATE CASCADE ON DELETE SET NULL
Referenced by:
    TABLE "clients" CONSTRAINT "clients_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "conversations" CONSTRAINT "conversations_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "dashboards" CONSTRAINT "dashboards_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "integrations" CONSTRAINT "integrations_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "invites" CONSTRAINT "invites_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "members" CONSTRAINT "members_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "project_access" CONSTRAINT "project_access_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "projects" CONSTRAINT "projects_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "share_dashboards" CONSTRAINT "share_dashboards_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "share_reports" CONSTRAINT "share_reports_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "share_widgets" CONSTRAINT "share_widgets_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "shares" CONSTRAINT "shares_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE

                                            Table "public.projects"
           Column           |              Type              | Collation | Nullable |         Default          
----------------------------+--------------------------------+-----------+----------+--------------------------
 id                         | text                           |           | not null | gen_random_uuid()
 name                       | text                           |           | not null | 
 createdAt                  | timestamp(3) without time zone |           | not null | CURRENT_TIMESTAMP
 updatedAt                  | timestamp(3) without time zone |           | not null | CURRENT_TIMESTAMP
 eventsCount                | integer                        |           | not null | 0
 types                      | "ProjectType"[]                |           |          | ARRAY[]::"ProjectType"[]
 organizationId             | text                           |           | not null | 
 crossDomain                | boolean                        |           | not null | false
 domain                     | text                           |           |          | 
 filters                    | jsonb                          |           | not null | '[]'::jsonb
 cors                       | text[]                         |           |          | ARRAY[]::text[]
 deleteAt                   | timestamp(3) without time zone |           |          | 
 allowUnsafeRevenueTracking | boolean                        |           | not null | false
Indexes:
    "projects_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "projects_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
Referenced by:
    TABLE "clients" CONSTRAINT "clients_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "cohorts" CONSTRAINT "cohorts_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "conversations" CONSTRAINT "conversations_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "dashboards" CONSTRAINT "dashboards_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "event_meta" CONSTRAINT "event_meta_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "gsc_connections" CONSTRAINT "gsc_connections_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "imports" CONSTRAINT "imports_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "notification_rules" CONSTRAINT "notification_rules_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "notifications" CONSTRAINT "notifications_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "project_access" CONSTRAINT "project_access_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE ""references"" CONSTRAINT "references_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "reports" CONSTRAINT "reports_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "share_dashboards" CONSTRAINT "share_dashboards_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "share_reports" CONSTRAINT "share_reports_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "share_widgets" CONSTRAINT "share_widgets_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE
    TABLE "shares" CONSTRAINT "shares_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE

                                       Table "public.clients"
       Column        |              Type              | Collation | Nullable |        Default        
---------------------+--------------------------------+-----------+----------+-----------------------
 id                  | uuid                           |           | not null | gen_random_uuid()
 name                | text                           |           | not null | 
 secret              | text                           |           |          | 
 projectId           | text                           |           |          | 
 createdAt           | timestamp(3) without time zone |           | not null | CURRENT_TIMESTAMP
 updatedAt           | timestamp(3) without time zone |           | not null | CURRENT_TIMESTAMP
 type                | "ClientType"                   |           | not null | 'write'::"ClientType"
 organizationId      | text                           |           | not null | 
 ignoreCorsAndSecret | boolean                        |           | not null | false
Indexes:
    "clients_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "clients_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES organizations(id) ON UPDATE CASCADE ON DELETE CASCADE
    "clients_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES projects(id) ON UPDATE CASCADE ON DELETE CASCADE

                                 Table "public.salts"
  Column   |              Type              | Collation | Nullable |      Default      
-----------+--------------------------------+-----------+----------+-------------------
 salt      | text                           |           | not null | 
 createdAt | timestamp(3) without time zone |           | not null | CURRENT_TIMESTAMP
 updatedAt | timestamp(3) without time zone |           | not null | CURRENT_TIMESTAMP
Indexes:
    "salts_pkey" PRIMARY KEY, btree (salt)

75387288-86ca-4d4f-a60e-e075aa6cc5f1|bench|{http://bench.example}|{website}
be119046-0ee7-44ea-93ae-a7065d483226|bench web|write|75387288-86ca-4d4f-a60e-e075aa6cc5f1|f
org:admin|bench-3f36489a-7393-45af-93d2-3b7099a798cf@bench.example|76e5e1cf-b41b-42ca-9820-1c29af61f89c
2
