otel_serverpod 0.1.0-beta.1
otel_serverpod: ^0.1.0-beta.1 copied to clipboard
OpenTelemetry instrumentation for Serverpod. One call opens http.server semconv spans per endpoint method call (route = endpoint.method), db.* client spans for the database layer, and the standard htt [...]
// The whole wiring diff for a generated Serverpod project's
// `lib/server.dart` — three added lines, marked below.
//
// In a real project `Protocol` and `Endpoints` come from `serverpod
// generate`; minimal stand-ins are defined at the bottom so this example
// compiles standalone.
import 'package:dartastic_opentelemetry/dartastic_opentelemetry.dart' show OTel;
import 'package:otel_serverpod/otel_serverpod.dart';
import 'package:serverpod/serverpod.dart';
Future<void> run(List<String> args) async {
// 1. Initialize OTel first — endpoint + auth come from the standard
// OTEL_EXPORTER_OTLP_* environment variables.
await OTel.initialize(serviceName: 'mypod');
final pod = Serverpod(
args,
Protocol(),
Endpoints(),
// 2. Database spans (`find person`, `insert order`, ...) per session.
databaseInterceptor: OtelServerpod.databaseInterceptor,
);
// 3. Endpoint spans and request metrics.
OtelServerpod.install(pod);
await pod.start();
}
// --- stand-ins for the `serverpod generate` output -------------------------
/// Generated by `serverpod generate` in a real project.
class Protocol extends DatabaseSerializationManager {
@override
Table? getTableForType(Type t) => null;
@override
List<Never> getTargetTableDefinitions() => [];
}
/// Generated by `serverpod generate` in a real project.
class Endpoints extends EndpointDispatch {
@override
void initializeEndpoints(Server server) {}
}