---
tags:
  - service
  - josiedot
  - irc-now
domain: stats.irc.now
status: active
stack:
  - Grafana
  - Prometheus
  - Keycloak OIDC
auth: Keycloak
---
# irc.now Stats (stats.irc.now)

Grafana dashboards for platform metrics. Prometheus scrapes all Axum services via ServiceMonitors.

## URLs
- https://stats.irc.now

## Stack
- Grafana 12.x via grafana-operator (grafana.integreatly.org CRDs)
- Prometheus (OCP user workload monitoring, Thanos Querier)
- Keycloak OIDC SSO via `stats` client

## Auth
Keycloak SSO with group-based role mapping:
- `stats-admin` group -> Grafana Admin (full access)
- all other users -> Grafana Viewer (public dashboard only)
- Login form disabled, auto-login via OIDC
- Button text: "log in with irc.now"

## Dashboards

### irc.now (public)
Visible to all authenticated users.
- User count, DAU, pastes, images (stat panels)
- Users and content over time (timeseries)

### irc.now Overview (Admin folder)
Visible only to stats-admin group members.
- All public panels plus:
- Logins (24h), users by plan (pie chart), bots running (gauge)
- Storage bytes (pastes + images), IRC bouncer stats
- HTTP request rate and p95 latency per service
- MRR, subscriptions, signups (7d), conversion rate, churn rate, revenue over time
- HTTP errors (4xx vs 5xx by service)
- Pastes/images storage prediction (30d linear extrapolation)
- Onboarding funnel (signups -> bouncer created -> returned, 30d)
- Time to first bouncer, connected users (5m window)
- Deliveries by network, feature adoption (permanent content, bouncer users, network users)
- Bot script runs and p95 latency per handler

## Prometheus
- User workload monitoring enabled via `cluster-monitoring-config` ConfigMap
- ServiceMonitors: web-api, txt, pics, bot (30s scrape interval, port `http`, path `/metrics`)
- Datasource: Thanos Querier via SA token auth (`grafana-sa` with `cluster-monitoring-view`)

## Deployment
- OCP namespace: irc-josie-cloud
- Grafana CR: `irc-now` (operator-managed)
- TLS: cert-manager Certificate `stats-irc-now-tls`, ClusterIssuer `letsencrypt-prod`
- Route: `stats.irc.now` with externalCertificate
- Manifests: `deploy/monitoring/`

## Secrets
- `oidc-stats` -- Keycloak client credentials
- `grafana-sa-token` -- SA token for Prometheus access
- `irc-now-admin-credentials` -- Grafana admin password (operator-managed)

## Source
- Manifests: ~/development/irc-now/deploy/monitoring/

## Related
- [[irc-now-portal]]
- [[irc-now-keycloak]]
- [[irc-now-txt]]
- [[irc-now-pics]]
- [[irc-now-bot]]
