{
  "license": "CC BY 4.0",
  "licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
  "recipe": {
    "slug": "webhook-end-to-end-completion",
    "title": "Measure Webhook End-to-End Completion",
    "testedWith": "Apache DataFusion 45.2.0",
    "lastReviewed": "2026-07-28"
  },
  "contract": {
    "tableName": "webhook_lifecycle_events",
    "schema": [
      {
        "name": "timestamp_utc",
        "type": "Timestamp",
        "description": "Webhook lifecycle event time."
      },
      {
        "name": "delivery_id",
        "type": "Utf8",
        "description": "Stable provider delivery identifier."
      },
      {
        "name": "provider",
        "type": "Utf8",
        "description": "Webhook provider."
      },
      {
        "name": "event_type",
        "type": "Utf8",
        "description": "Provider event type."
      },
      {
        "name": "event_name",
        "type": "Utf8",
        "description": "webhook_received or downstream_completed."
      },
      {
        "name": "status",
        "type": "Utf8",
        "description": "success or failed for terminal outcomes."
      }
    ]
  },
  "query": "WITH deliveries AS (\n  SELECT\n    delivery_id,\n    provider,\n    event_type,\n    MIN(CASE\n      WHEN event_name = 'webhook_received' THEN timestamp_utc\n      ELSE NULL\n    END) AS received_at,\n    MIN(CASE\n      WHEN event_name = 'downstream_completed' AND status = 'success'\n      THEN timestamp_utc ELSE NULL\n    END) AS completed_at\n  FROM webhook_lifecycle_events\n  WHERE timestamp_utc >= now() - INTERVAL '7 days'\n  GROUP BY delivery_id, provider, event_type\n),\ndelivery_outcomes AS (\n  SELECT\n    delivery_id,\n    provider,\n    event_type,\n    received_at,\n    completed_at,\n    date_part('second', completed_at - received_at) AS completion_seconds\n  FROM deliveries\n  WHERE received_at IS NOT NULL\n)\nSELECT\n  provider,\n  event_type,\n  COUNT(*) AS received_deliveries,\n  SUM(CASE WHEN completed_at IS NOT NULL THEN 1 ELSE 0 END)\n    AS completed_deliveries,\n  100.0 * SUM(CASE\n    WHEN completion_seconds <= 300.0 THEN 1 ELSE 0\n  END) / NULLIF(COUNT(*), 0) AS completed_within_target_pct,\n  approx_percentile_cont(completion_seconds, 0.95) AS p95_completion_seconds\nFROM delivery_outcomes\nGROUP BY provider, event_type\nHAVING COUNT(*) >= 20\nORDER BY completed_within_target_pct, received_deliveries DESC;",
  "fixtureKind": "schema-example",
  "inputRows": [
    {
      "timestamp_utc": "2026-07-28T10:00:00Z",
      "delivery_id": "delivery_id_example_1",
      "provider": "provider_example_1",
      "event_type": "event_type_example_1",
      "event_name": "workflow_completed",
      "status": "success"
    },
    {
      "timestamp_utc": "2026-07-28T11:00:00Z",
      "delivery_id": "delivery_id_example_2",
      "provider": "provider_example_2",
      "event_type": "event_type_example_2",
      "event_name": "workflow_completed",
      "status": "failed"
    },
    {
      "timestamp_utc": "2026-07-28T12:00:00Z",
      "delivery_id": "delivery_id_example_3",
      "provider": "provider_example_3",
      "event_type": "event_type_example_3",
      "event_name": "workflow_completed",
      "status": "success"
    }
  ],
  "illustrativeInputRows": [
    {
      "timestamp_utc": "2026-07-28T10:00:00Z",
      "delivery_id": "delivery_id_example_1",
      "provider": "provider_example_1",
      "event_type": "event_type_example_1",
      "event_name": "workflow_completed",
      "status": "success"
    },
    {
      "timestamp_utc": "2026-07-28T11:00:00Z",
      "delivery_id": "delivery_id_example_2",
      "provider": "provider_example_2",
      "event_type": "event_type_example_2",
      "event_name": "workflow_completed",
      "status": "failed"
    },
    {
      "timestamp_utc": "2026-07-28T12:00:00Z",
      "delivery_id": "delivery_id_example_3",
      "provider": "provider_example_3",
      "event_type": "event_type_example_3",
      "event_name": "workflow_completed",
      "status": "success"
    }
  ],
  "expectedOutput": {
    "columns": [
      "provider",
      "event_type",
      "received_deliveries",
      "completed_deliveries",
      "completed_within_target_pct",
      "p95_completion_seconds"
    ],
    "rows": [
      {
        "provider": "stripe",
        "event_type": "invoice.payment_succeeded",
        "received_deliveries": 8420,
        "completed_deliveries": 8346,
        "completed_within_target_pct": 96.21,
        "p95_completion_seconds": 242
      },
      {
        "provider": "github",
        "event_type": "push",
        "received_deliveries": 3180,
        "completed_deliveries": 2890,
        "completed_within_target_pct": 83.55,
        "p95_completion_seconds": 811
      }
    ]
  },
  "notes": [
    "The compact input rows demonstrate field names and JSON types; they are not claimed to generate the displayed aggregate by themselves.",
    "The expected output is deterministic synthetic review data for the documented output shape.",
    "Adapt time windows, thresholds, identities, and business definitions before operational use."
  ]
}