{
  "annotations": {
    "list": []
  },
  "editable": true,
  "fiscalYearStartMonth": 0,
  "graphTooltip": 1,
  "id": null,
  "links": [
    {
      "title": "Incident Runbooks",
      "type": "link",
      "url": "docs/runbooks"
    }
  ],
  "panels": [
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "reqps" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 0, "y": 0 },
      "id": 1,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "sum by (route, status) (rate(banking_http_requests_total[5m]))", "legendFormat": "{{route}} {{status}}", "refId": "A" }
      ],
      "title": "API Health - Request Rate",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "percentunit" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 8, "y": 0 },
      "id": 2,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "sum(rate(banking_http_requests_total{status=~\"5..\"}[5m])) / clamp_min(sum(rate(banking_http_requests_total[5m])), 1)", "legendFormat": "5xx ratio", "refId": "A" }
      ],
      "title": "API Health - Error Ratio",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "s" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 16, "y": 0 },
      "id": 3,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "histogram_quantile(0.95, sum(rate(banking_http_request_duration_seconds_bucket[5m])) by (le, route))", "legendFormat": "{{route}} p95", "refId": "A" }
      ],
      "title": "API Health - p95 Latency",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "short" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 0, "y": 7 },
      "id": 4,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "pg_up", "legendFormat": "PostgreSQL up", "refId": "A" },
        { "expr": "max(pg_stat_database_numbackends)", "legendFormat": "DB connections", "refId": "B" }
      ],
      "title": "DB Health",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "short" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 8, "y": 7 },
      "id": 5,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "banking_ledger_postings_total", "legendFormat": "postings {{currency}}", "refId": "A" },
        { "expr": "banking_ledger_imbalanced_currencies", "legendFormat": "imbalanced currencies", "refId": "B" }
      ],
      "title": "Ledger Postings And Balance Integrity",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "s" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 16, "y": 7 },
      "id": 6,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "banking_transfers_pending_oldest_age_seconds", "legendFormat": "oldest pending transfer", "refId": "A" },
        { "expr": "sum by (status) (banking_transfers_total)", "legendFormat": "transfers {{status}}", "refId": "B" }
      ],
      "title": "Transfers",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "short" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 0, "y": 14 },
      "id": 7,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "sum by (event_type) (increase(banking_settlement_events_total[15m]))", "legendFormat": "settlement {{event_type}}", "refId": "A" }
      ],
      "title": "Settlements",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "short" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 8, "y": 14 },
      "id": 8,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "sum by (status) (banking_cards_total)", "legendFormat": "cards {{status}}", "refId": "A" },
        { "expr": "sum(rate(banking_http_requests_total{route=\"/v1/card-issuer/webhooks\"}[5m]))", "legendFormat": "issuer webhook rate", "refId": "B" }
      ],
      "title": "Cards",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "short" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 16, "y": 14 },
      "id": 9,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "sum by (provider_type, status) (rate(banking_provider_calls_total{provider_type=~\"kyc|aml|sanctions\"}[10m]))", "legendFormat": "{{provider_type}} {{status}}", "refId": "A" }
      ],
      "title": "KYC And AML",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "short" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 0, "y": 21 },
      "id": 10,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "banking_fx_stale_rates", "legendFormat": "stale rates", "refId": "A" },
        { "expr": "sum by (currency_pair) (banking_fx_quotes_total)", "legendFormat": "quotes {{currency_pair}}", "refId": "B" }
      ],
      "title": "FX",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "short" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 8, "y": 21 },
      "id": 11,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "increase(banking_auth_suspicious_logins_total[10m])", "legendFormat": "suspicious logins", "refId": "A" },
        { "expr": "sum by (status) (rate(banking_http_requests_total{route=~\"/v1/auth/.*\"}[5m]))", "legendFormat": "auth {{status}}", "refId": "B" }
      ],
      "title": "Auth",
      "type": "timeseries"
    },
    {
      "datasource": { "type": "prometheus", "uid": "${DS_PROMETHEUS}" },
      "fieldConfig": { "defaults": { "unit": "short" }, "overrides": [] },
      "gridPos": { "h": 7, "w": 8, "x": 16, "y": 21 },
      "id": 12,
      "options": { "legend": { "displayMode": "list", "placement": "bottom" }, "tooltip": { "mode": "single" } },
      "targets": [
        { "expr": "sum by (provider, status) (rate(banking_provider_calls_total[10m]))", "legendFormat": "{{provider}} {{status}}", "refId": "A" },
        { "expr": "banking_provider_availability", "legendFormat": "{{provider}} available", "refId": "B" }
      ],
      "title": "Provider Calls",
      "type": "timeseries"
    }
  ],
  "refresh": "30s",
  "schemaVersion": 39,
  "tags": [
    "banking",
    "production-readiness",
    "dora"
  ],
  "templating": {
    "list": [
      {
        "current": { "selected": false, "text": "Prometheus", "value": "Prometheus" },
        "hide": 0,
        "includeAll": false,
        "label": "Prometheus",
        "name": "DS_PROMETHEUS",
        "options": [],
        "query": "prometheus",
        "refresh": 1,
        "regex": "",
        "type": "datasource"
      }
    ]
  },
  "time": {
    "from": "now-6h",
    "to": "now"
  },
  "timezone": "browser",
  "title": "Banking Production Observability",
  "uid": "banking-production-observability",
  "version": 1,
  "weekStart": ""
}
