social components inlay.at
atproto components sdui
86
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 71 lines 2.2 kB view raw
1import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; 2import { resourceFromAttributes } from "@opentelemetry/resources"; 3import type { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace-node"; 4import { 5 NodeTracerProvider, 6 SimpleSpanProcessor, 7} from "@opentelemetry/sdk-trace-node"; 8import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; 9 10class FilteringSpanProcessor extends SimpleSpanProcessor { 11 constructor(exporter: SpanExporter) { 12 super(exporter); 13 } 14 onEnd(span: ReadableSpan) { 15 const events = span.events || []; 16 const isInlayMissing = events.some( 17 (e) => 18 e.name === "exception" && 19 String(e.attributes?.["exception.message"] ?? "").startsWith( 20 "INLAY_MISSING:" 21 ) 22 ); 23 if (isInlayMissing) return; 24 super.onEnd(span); 25 } 26} 27 28export function register() { 29 if (process.env.AXIOM_TOKEN) { 30 const provider = new NodeTracerProvider({ 31 resource: resourceFromAttributes({ 32 [ATTR_SERVICE_NAME]: "inlay", 33 }), 34 spanProcessors: [ 35 new FilteringSpanProcessor( 36 new OTLPTraceExporter({ 37 url: "https://api.axiom.co/v1/traces", 38 headers: { 39 Authorization: `Bearer ${process.env.AXIOM_TOKEN}`, 40 "X-Axiom-Dataset": process.env.AXIOM_DATASET!, 41 }, 42 }) 43 ), 44 ], 45 }); 46 47 provider.register(); 48 console.log("[otel] trace provider registered, exporting to Axiom"); 49 } else { 50 console.log("[otel] AXIOM_TOKEN not set, skipping"); 51 } 52 53 if (process.env.NEXT_RUNTIME === "nodejs") { 54 let lastHeapMB = 0; 55 56 setInterval(() => { 57 const mem = process.memoryUsage(); 58 const heapMB = Math.round(mem.heapUsed / 1024 / 1024); 59 const rssMB = Math.round(mem.rss / 1024 / 1024); 60 const delta = heapMB - lastHeapMB; 61 const arrow = 62 delta > 5 ? ` ⚠ +${delta}MB` : delta < -5 ? `${delta}MB` : ""; 63 console.log( 64 `[memory] heap=${heapMB}MB rss=${rssMB}MB uptime=${Math.round(process.uptime())}s${arrow}` 65 ); 66 lastHeapMB = heapMB; 67 }, 10_000).unref(); 68 69 console.log("[memory] tracking started"); 70 } 71}