Times every matched Phoenix route, kind: "controller". Call once at startup, e.g.
application.ex's own start/2, before the rest of the supervision tree starts:
ForgeOpsTracker.Integrations.Phoenix.attach()Attaches to [:phoenix, :router_dispatch, :stop] (confirmed directly against the installed
phoenix source, not assumed from docs: Phoenix.Router.__call__/5 emits this around every
matched route's own plug pipeline, controller action included), a global event name, not
per-endpoint-namespaced, so this one call covers every Phoenix endpoint in the host app. An
unmatched route (a 404) never fires this event at all, the same "only a real match gets timed"
behavior every other language's own controller/action instrumentation in this repo already has.
transaction_name is "<HTTP method> <route pattern>" (e.g. "GET /users/:id"), not the
literal path: metadata.route is Phoenix's own matched route pattern, which keeps a distinct
user id from exploding into its own separate transaction the way the literal path would.