I'm trying to write an extension similar to header setter extension, but in my extension I'm not able to see any client metadata. Attaching my code, would greatly appreciate some help
package authenticator
import (
"context"
"go.opentelemetry.io/collector/client"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/extension/auth"
"google.golang.org/grpc/credentials"
"net/http"
)
// type assertion
var _ auth.Client = (*Authenticator)(nil)
type Authenticator struct {
// noop start
component.StartFunc
// noop shutdown
component.ShutdownFunc
}
func (a *Authenticator) RoundTripper(base http.RoundTripper) (http.RoundTripper, error) {
return newRoundTripper(base), nil
}
func (a *Authenticator) PerRPCCredentials() (credentials.PerRPCCredentials, error) {
return &rpcCredentials{}, nil
}
var _ http.RoundTripper = (*roundTripper)(nil)
type roundTripper struct {
delegate http.RoundTripper
}
func newRoundTripper(delegate http.RoundTripper) http.RoundTripper {
return &roundTripper{delegate: delegate}
}
func (r *roundTripper) RoundTrip(request *http.Request) (*http.Response, error) {
cl := client.FromContext(request.Context())
vals := cl.Metadata.Get("agent-token")
if len(vals) > 0 {
request.Header.Add("agent-token", vals[0])
}
return r.delegate.RoundTrip(request)
}
var _ credentials.PerRPCCredentials = (*rpcCredentials)(nil)
type rpcCredentials struct {
}
func (r rpcCredentials) GetRequestMetadata(ctx context.Context, _ ...string) (map[string]string, error) {
cl := client.FromContext(ctx)
ret := make(map[string]string)
vals := cl.Metadata.Get("agent-token")
if len(vals) > 0 {
ret["agent-token"] = vals[0]
}
return ret, nil
}
func (r rpcCredentials) RequireTransportSecurity() bool {
return false
}
Component(s)
extension/headerssetter
Describe the issue you're reporting
I'm trying to write an extension similar to header setter extension, but in my extension I'm not able to see any client metadata. Attaching my code, would greatly appreciate some help
extension code: