Skip to content

apollosolutions/reporting-inspector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Reporting Inspector

An HTTP request logger with built-in protobuf decoding and a real-time web UI. Accepts any HTTP method on any endpoint and logs the full request details — headers, body, query parameters, and more — to both the console and a file.

Built for inspecting Apollo Router usage reporting payloads (/reporting-ingress) and GraphOS trace export payloads (/otlp-reporting-ingress), but works as a general-purpose request logger for any API.

Screenshots

Request list — all captured requests with color-coded method badges and timestamps

Request List

Request detail — full headers, body, and metadata for a POST request

Request Detail

Query parameters — parsed query params and authorization headers on a GET request

Query Parameters

URL filtering — filter the request list by endpoint path

URL Filter

Features

  • Catch-all logging — every HTTP method, every path, fully logged
  • Protobuf decoding — schema-based decoding for Apollo Report and OpenTelemetry ExportTraceServiceRequest messages, with schema-less fallback for unknown types
  • Gzip/deflate support — automatically decompresses request bodies
  • Web UI — real-time dashboard at /ui with URL filtering, color-coded method badges, and a detail panel showing headers, query params, and decoded bodies
  • Dual body view — protobuf requests show both a decoded JSON view and the raw hex
  • File logging — all requests appended to requests.log

Quick Start

npm install
npm start

The server starts on http://localhost:3000 (override with PORT env var).

Open http://localhost:3000/ui to view the dashboard.

Usage

General request logging

Send any request to any path:

curl http://localhost:3000/any/path?foo=bar
curl -X POST http://localhost:3000/api/test -H "Content-Type: application/json" -d '{"hello":"world"}'

Every request is logged with timestamp, method, URL, headers, and body.

Apollo Router configuration

Add the following to your router.yaml to send both usage reporting and OTLP trace payloads to the logger:

# router.yaml
telemetry:
  apollo:
    # Apollo usage-reporting payloads (Report protobuf)
    endpoint: http://localhost:3000/reporting-ingress
    # Apollo OTLP traces/metrics
    experimental_otlp_endpoint: http://localhost:3000/otlp-reporting-ingress
    experimental_otlp_tracing_protocol: http
    otlp_tracing_sampler: always_on
    # These are enabled for verification purposes
    send_headers: all
    send_variable_values: all
Setting Purpose
endpoint Redirects Apollo usage reporting (Report protobuf) to the logger
experimental_otlp_endpoint Redirects OTLP trace export (ExportTraceServiceRequest) to the logger
experimental_otlp_tracing_protocol: http Required — tells the router to use HTTP instead of gRPC for OTLP export
otlp_tracing_sampler: always_on Sends all traces (not just sampled ones) for full visibility
send_headers: all Includes request/response headers in the trace payload (docs)
send_variable_values: all Includes GraphQL variable values in the trace payload (docs)

The logger decodes both payload types with full field names:

  • /reporting-ingressReport messages (header, traces_per_query, operation_count, etc.)
  • /otlp-reporting-ingressExportTraceServiceRequest messages (resourceSpans, scopeSpans, spans, attributes, etc.)

API

Endpoint Description
GET /ui Web dashboard
GET /__api/requests?url=<filter> JSON array of logged requests, with optional URL substring filter
* (everything else) Caught and logged, returns 200 with { status: "logged" }

Proto Schemas

The proto/ directory contains the protobuf definitions used for decoding:

  • report.proto — Apollo Router usage reporting (Report, ReportHeader, Trace, TracesAndStats, etc.)
  • opentelemetry/proto/collector/trace/v1/trace_service.proto — OTLP trace export (ExportTraceServiceRequest)
  • opentelemetry/proto/trace/v1/trace.proto — OTLP span definitions (Span, SpanEvent, SpanLink, SpanStatus)
  • opentelemetry/proto/common/v1/common.proto — OTLP common types (KeyValue, AnyValue, InstrumentationScope)
  • opentelemetry/proto/resource/v1/resource.proto — OTLP resource definition

Requests to endpoints not mapped to a schema fall back to schema-less decoding (field numbers instead of names).

Configuration

Env var Default Description
PORT 3000 Server port

Logs are written to requests.log in the project root.

About

An API logger for verifying payloads sent to GraphOS

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors