Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions router-plugin/config/plugin_config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package config

import sdktrace "go.opentelemetry.io/otel/sdk/trace"

type RouterPluginConfig struct {
ServiceName string
ServiceVersion string
TracingEnabled bool
TracingErrorHandler func(err error)

// This should only be used for testing purposes
MemoryExporter sdktrace.SpanExporter
}
59 changes: 59 additions & 0 deletions router-plugin/config/settings.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package config

import "time"

type (
ExporterProtocolType string
ExporterTemporality string
Propagator string
)

type IPAnonymizationMethod string

const (
Hash IPAnonymizationMethod = "hash"
Redact IPAnonymizationMethod = "redact"
)

const (
ExporterOLTPHTTP ExporterProtocolType = "http"
ExporterOLTPGRPC ExporterProtocolType = "grpc"
)

const (
PropagatorTraceContext Propagator = "tracecontext"
PropagatorB3 Propagator = "b3"
PropagatorJaeger Propagator = "jaeger"
PropagatorBaggage Propagator = "baggage"
PropagatorDatadog Propagator = "datadog"
)

// StartupConfig contains the configuration passed from the router.
type StartupConfig struct {
Telemetry *Telemetry `json:"telemetry,omitempty"`
IPAnonymization *IPAnonymization `json:"ip_anonymization,omitempty"`
}

type Telemetry struct {
Tracing *Tracing `json:"tracing,omitempty"`
}

type Tracing struct {
Exporters []Exporter `json:"exporters,omitempty"`
Propagators []Propagator `json:"propagators,omitempty"`
Sampler float64 `json:"sampler"`
}

type Exporter struct {
Endpoint string `json:"endpoint"`
Exporter ExporterProtocolType `json:"exporter"`
BatchTimeout time.Duration `json:"batch_timeout"`
ExportTimeout time.Duration `json:"export_timeout"`
Headers map[string]string `json:"headers"`
HTTPPath string `json:"http_path"`
}

type IPAnonymization struct {
Enabled bool `json:"enabled"`
Method IPAnonymizationMethod `json:"method"`
}
19 changes: 18 additions & 1 deletion router-plugin/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,38 @@ go 1.23.0
require (
github.com/hashicorp/go-plugin v1.6.3
github.com/hashicorp/go-retryablehttp v0.7.7
github.com/tonglil/opentelemetry-go-datadog-propagator v0.1.3
go.opentelemetry.io/contrib/propagators/b3 v1.23.0
go.opentelemetry.io/contrib/propagators/jaeger v1.23.0
go.opentelemetry.io/otel v1.28.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1
go.opentelemetry.io/otel/sdk v1.28.0
go.opentelemetry.io/otel/trace v1.28.0
google.golang.org/grpc v1.68.1
)

require (
github.com/fatih/color v1.16.0 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/yamux v0.1.1 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/oklog/run v1.0.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 // indirect
go.opentelemetry.io/otel/metric v1.28.0 // indirect
go.opentelemetry.io/proto/otlp v1.1.0 // indirect
golang.org/x/net v0.38.0 // indirect
golang.org/x/sys v0.31.0 // indirect
golang.org/x/text v0.23.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a // indirect
google.golang.org/protobuf v1.36.5 // indirect
)
45 changes: 41 additions & 4 deletions router-plugin/go.sum
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA=
github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
Expand Down Expand Up @@ -37,8 +48,32 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tonglil/opentelemetry-go-datadog-propagator v0.1.3 h1:Ozy1UnlID19jL6+vixEcA1t4NMf8hp01uDAY1nwGl8U=
github.com/tonglil/opentelemetry-go-datadog-propagator v0.1.3/go.mod h1:Ijp5eaviP2mk8CJM+0EDYFKNULr+kicPSB9FOvxOhW0=
go.opentelemetry.io/contrib/propagators/b3 v1.23.0 h1:aaIGWc5JdfRGpCafLRxMJbD65MfTa206AwSKkvGS0Hg=
go.opentelemetry.io/contrib/propagators/b3 v1.23.0/go.mod h1:Gyz7V7XghvwTq+mIhLFlTgcc03UDroOg8vezs4NLhwU=
go.opentelemetry.io/contrib/propagators/jaeger v1.23.0 h1:KFxfTCTkH1usVFzDaWzbmNdFX7ybUTCtkLsUTww0nG4=
go.opentelemetry.io/contrib/propagators/jaeger v1.23.0/go.mod h1:xU+81opGquQICJGzwscLXAQLnIPWI+q7Zu4AQSrgXf8=
go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 h1:o8iWeVFa1BcLtVEV0LzrCxV2/55tB3xLxADr6Kyoey4=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1/go.mod h1:SEVfdK4IoBnbT2FXNM/k8yC08MrfbhWk3U4ljM8B3HE=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1 h1:p3A5+f5l9e/kuEBwLOrnpkIDHQFlHmbiVxMURWRK6gQ=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1/go.mod h1:OClrnXUjBqQbInvjJFjYSnMxBSCXBF8r3b34WqjiIrQ=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1 h1:cfuy3bXmLJS7M1RZmAL6SuhGtKUp2KEsrm00OlAXkq4=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1/go.mod h1:22jr92C6KwlwItJmQzfixzQM3oyyuYLCfHiMY+rpsPU=
go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q=
go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s=
go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE=
go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg=
go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g=
go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI=
go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand All @@ -52,6 +87,8 @@ golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24=
google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a h1:51aaUVRocpvUOSQKM6Q7VuoaktNIaMCLuhZB6DKksq4=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a/go.mod h1:uRxBH1mhmO8PGhU89cMcHaXKZqO+OfakD8QQO0oYwlQ=
google.golang.org/grpc v1.68.1 h1:oI5oTa11+ng8r8XMMN7jAOmWfPZWbYpCFaMUTACxkM0=
Expand Down
40 changes: 40 additions & 0 deletions router-plugin/httpclient/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ import (
"time"

"github.com/hashicorp/go-retryablehttp"

"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/propagation"
semconv "go.opentelemetry.io/otel/semconv/v1.20.0"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/trace/noop"
)

// Client is a wrapper around http.Client with additional functionality
Expand All @@ -20,6 +27,7 @@ type Client struct {
timeout time.Duration
middlewares []Middleware
retryOptions RetryOptions
tracer trace.Tracer
}

// ClientOption is a function that configures a Client
Expand All @@ -43,6 +51,7 @@ func New(options ...ClientOption) *Client {
timeout: 30 * time.Second,
middlewares: []Middleware{},
retryOptions: DefaultRetryOptions(),
tracer: noop.NewTracerProvider().Tracer("noop-tracer"),
}

for _, option := range options {
Expand All @@ -54,6 +63,13 @@ func New(options ...ClientOption) *Client {
return c
}

// WithTracing enables tracing using a RoundTripper approach
func WithTracing() ClientOption {
return func(c *Client) {
c.tracer = otel.Tracer("router-plugin-httpclient")
}
}

// WithBaseURL sets the base URL for the client
func WithBaseURL(url string) ClientOption {
return func(c *Client) {
Expand Down Expand Up @@ -132,6 +148,26 @@ func (c *Client) Request(ctx context.Context, method, path string, body interfac
url = c.baseURL + path
}

// Create a span for the HTTP request
var span trace.Span
ctx, span = c.tracer.Start(ctx, fmt.Sprintf("http.request - %s %s", method, url),
trace.WithSpanKind(trace.SpanKindClient),
trace.WithAttributes(
semconv.HTTPMethodKey.String(method),
semconv.HTTPURLKey.String(url),
),
)
defer span.End()

retry, err := c.startRequest(ctx, method, url, reqBody, body, options)
if err != nil {
span.SetStatus(codes.Error, err.Error())
span.RecordError(err)
}
return retry, err
}

func (c *Client) startRequest(ctx context.Context, method string, url string, reqBody io.Reader, body interface{}, options []RequestOption) (*Response, error) {
// Use the retryable client if enabled
if c.retryOptions.Enabled {
return c.doRequestWithRetry(ctx, method, url, reqBody, body != nil, options...)
Expand All @@ -148,6 +184,8 @@ func (c *Client) doRequest(ctx context.Context, method, url string, body io.Read
return nil, fmt.Errorf("error creating request: %w", err)
}

otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(req.Header))

// Add default headers
for key, value := range c.headers {
req.Header.Set(key, value)
Expand Down Expand Up @@ -228,6 +266,8 @@ func (c *Client) doRequestWithRetry(ctx context.Context, method, url string, bod
// Set context
retryReq = retryReq.WithContext(ctx)

otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(retryReq.Header))

// Add default headers
for key, value := range c.headers {
retryReq.Header.Set(key, value)
Expand Down
72 changes: 61 additions & 11 deletions router-plugin/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ package routerplugin

import (
"context"
"encoding/json"
"errors"
"github.com/wundergraph/cosmo/router-plugin/config"
"github.com/wundergraph/cosmo/router-plugin/setup"
"os"

"github.com/hashicorp/go-plugin"
"google.golang.org/grpc"
Expand All @@ -15,9 +19,19 @@ var RouterPluginHandshakeConfig = plugin.HandshakeConfig{
MagicCookieValue: "GRPC_DATASOURCE_PLUGIN",
}

const startupConfigKey = "startup_config"

// PluginMapName is the name of the plugin in the plugin map.
var PluginMapName = "grpc_datasource"

type RouterPlugin struct {
plugin.Plugin
registrationFunc func(*grpc.Server)

serveConfig *plugin.ServeConfig
config config.RouterPluginConfig
}

// GRPCPlugin is the interface that is implemented to serve/connect to
// a plugin over gRPC.
func (p *RouterPlugin) GRPCServer(_ *plugin.GRPCBroker, server *grpc.Server) error {
Expand All @@ -31,18 +45,37 @@ func (p *RouterPlugin) GRPCClient(_ context.Context, _ *plugin.GRPCBroker, cc *g
return cc, nil
}

type RouterPlugin struct {
plugin.Plugin
registrationFunc func(*grpc.Server)
type PluginOption func(*RouterPlugin)

serveConfig *plugin.ServeConfig
func WithTestConfig(testConfig *plugin.ServeTestConfig) PluginOption {
return func(c *RouterPlugin) {
c.serveConfig.Test = testConfig
}
}

type PluginOption func(*plugin.ServeConfig)
// WithTracing enables tracing for the plugin.
// This includes creating a tracing interceptor
func WithTracing() PluginOption {
return func(c *RouterPlugin) {
c.config.TracingEnabled = true
}
}

func WithTestConfig(testConfig *plugin.ServeTestConfig) PluginOption {
return func(c *plugin.ServeConfig) {
c.Test = testConfig
func WithServiceName(serviceName string) PluginOption {
return func(c *RouterPlugin) {
c.config.ServiceName = serviceName
}
}

func WithTracingErrorHandler(errHandler func(err error)) PluginOption {
return func(c *RouterPlugin) {
c.config.TracingErrorHandler = errHandler
}
}

func WithServiceVersion(serviceVersion string) PluginOption {
return func(c *RouterPlugin) {
c.config.ServiceVersion = serviceVersion
}
}

Expand All @@ -55,7 +88,7 @@ func NewRouterPlugin(registrationfunc func(*grpc.Server), opts ...PluginOption)
registrationFunc: registrationfunc,
}

serveConfig := &plugin.ServeConfig{
routerPlugin.serveConfig = &plugin.ServeConfig{
HandshakeConfig: RouterPluginHandshakeConfig,
GRPCServer: plugin.DefaultGRPCServer,
Plugins: map[string]plugin.Plugin{
Expand All @@ -64,10 +97,27 @@ func NewRouterPlugin(registrationfunc func(*grpc.Server), opts ...PluginOption)
}

for _, opt := range opts {
opt(serveConfig)
opt(routerPlugin)
}

var startupConfig config.StartupConfig
if exporterString := os.Getenv(startupConfigKey); exporterString != "" {
err := json.Unmarshal([]byte(exporterString), &startupConfig)
if err != nil {
return nil, err
}
}

routerPlugin.serveConfig = serveConfig
grpcServerFunc, err := setup.GrpcServer(setup.GrpcServerInitOpts{
StartupConfig: startupConfig,
PluginConfig: routerPlugin.config,
})
if err != nil {
return nil, err
}

routerPlugin.serveConfig.GRPCServer = grpcServerFunc

return routerPlugin, nil
}

Expand Down
Loading
Loading