3 Commits

Author SHA1 Message Date
Rene Fichtmueller
3515244d27 feat: PDF export for ASN reports and head-to-head comparisons
- GET /api/export/pdf?asn=X&format=report|executive|technical
  → Generates multi-page PDF with cover, score ring, health checks, RPKI,
    BGP topology, recommendations — MAGATAMA CI styling (indigo #6366f1)
- GET /api/export/pdf/compare?asn1=X&asn2=Y
  → Side-by-side comparison PDF with score rings, metrics table, head-to-head
    health check grid
- 5-minute in-memory cache (X-Cache: HIT on second request)
- Lazy puppeteer browser pool (launched on first request, reused)
- Graceful fallback: returns 503 JSON if puppeteer unavailable
- ~300KB PDF, 4 pages, ~12s first render / 8ms cached
2026-04-29 23:03:28 +02:00
Rene Fichtmueller
344ee15338 feat(bio-rd): add local RIB integration via bio-rd gRPC client
Adds real-time local BGP RIB data as a complement to external APIs
(RIPE Stat, bgproutes.io) which have rate limits and 15min+ delays.

- bio-rd-client.js: gRPC client for bio-routing/bio-rd RIS service
  - LPM, Get, GetLonger, GetRouters, DumpRIB, ObserveRIB methods
  - IPv4/IPv6 encoding as uint64 pair (bio.net format)
  - Full BGP path decode: AS paths, communities, large communities
  - Graceful fallback if RIS unavailable (null/empty returns)
- protos/: bio-rd proto definitions (ris, bgp, session, route, net)
- server.js: three new endpoints + WebSocket stream
  - GET /api/rib/prefix — LPM + more-specifics via GetLonger
  - GET /api/rib/routers — list BMP-monitored routers
  - GET /api/rib/dump — full RIB dump with ASN filter + limit
  - WS /ws/rib — live ObserveRIB stream (add/withdraw events)
- package.json: @grpc/grpc-js + @grpc/proto-loader dependencies
2026-04-05 11:44:50 +02:00
Rene Fichtmueller
32bb279c1d feat: add RS column, contacts, timing panel, JSON export, city (v0.6.6) 2026-04-02 21:39:28 +00:00