MCP Terminal Server

// Copyright 2024 Google LLC // SPDX-License-Identifier: Apache-2.0 package telemetryplugin import ( "log/slog" "os" "time" // [START import] // Import the Genkit core library. "github.com/firebase/genkit/go/genkit" // Import the OpenTelemetry libraries. "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/sdk/metric" "go.opentelemetry.io/otel/sdk/trace" // [END import] ) // [START config] type Config struct { // Export even in the dev environment. ForceExport bool // The interval for exporting metric data. // The default is 60 seconds. MetricInterval time.Duration // The minimum level at which logs will be written. // Defaults to [slog.LevelInfo]. LogLevel slog.Leveler } // [END config] func Init(cfg Config) error { g, err := genkit.New(nil) if err != nil { return err } // [START shouldexport] shouldExport := cfg.ForceExport || os.Getenv("GENKIT_ENV") != "dev" if !shouldExport { return nil } // [END shouldexport] // [START registerspanexporter] spanProcessor := trace.NewBatchSpanProcessor(YourCustomSpanExporter{}) genkit.RegisterSpanProcessor(g, spanProcessor) // [END registerspanexporter] // [START registermetricexporter] r := metric.NewPeriodicReader( YourCustomMetricExporter{}, metric.WithInterval(cfg.MetricInterval), ) mp := metric.NewMeterProvider(metric.WithReader(r)) otel.SetMeterProvider(mp) // [END registermetricexporter] // [START registerlogexporter] logger := slog.New(YourCustomHandler{ Options: &slog.HandlerOptions{Level: cfg.LogLevel}, }) slog.SetDefault(logger) // [END registerlogexporter] return nil }