Skip to content

Commit

Permalink
Merge branch 'initial_implementation' of github.com:krakend/krakend-o…
Browse files Browse the repository at this point in the history
…tel into initial_implementation
  • Loading branch information
dhontecillas committed Jan 12, 2024
2 parents 493384b + 486b17a commit 52885ad
Show file tree
Hide file tree
Showing 17 changed files with 36 additions and 45 deletions.
6 changes: 2 additions & 4 deletions config/lura.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,8 @@ const (
Namespace = "telemetry/opentelemetry"
)

var (
// ErrNoConfig is used to signal no config was found
ErrNoConfig = errors.New("No config found for opentelemetry")
)
// ErrNoConfig is used to signal no config was found
var ErrNoConfig = errors.New("No config found for opentelemetry")

// FromLura extracts the configuration from the Lura's ServiceConfig
// "extra_config" field.
Expand Down
4 changes: 1 addition & 3 deletions config/path_pattern.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@ import (
"strings"
)

var (
templatedURLPattern = regexp.MustCompile(`{{\.(.*?)}}`)
)
var templatedURLPattern = regexp.MustCompile(`{{\.(.*?)}}`)

func NormalizeURLPattern(u string) string {
s := templatedURLPattern.ReplaceAllStringFunc(u,
Expand Down
1 change: 0 additions & 1 deletion example/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ func main() {
logger, _ := logging.NewLogger(*logLevel, os.Stdout, "[KRAKEND]")

obsConfig, err := kotelconfig.FromLura(serviceConfig)

if err != nil {
fmt.Printf("ERROR: no config found for open telemetry: %s\n", err.Error())
return
Expand Down
5 changes: 2 additions & 3 deletions http/client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,14 +174,14 @@ func TestInstrumentedHTTPClient(t *testing.T) {
for _, m := range sm.Metrics {
gotMetrics[m.Name] = m
}
for k, _ := range wantedMetrics {
for k := range wantedMetrics {
if _, ok := gotMetrics[k]; !ok {
t.Errorf("missing metric %s", k)
return
}
}
// check that we do not have not expected metrics:
for k, _ := range gotMetrics {
for k := range gotMetrics {
if _, ok := wantedMetrics[k]; !ok {
t.Errorf("got unexpected metric %s", k)
return
Expand Down Expand Up @@ -210,5 +210,4 @@ func TestInstrumentedHTTPClient(t *testing.T) {
t.Errorf("metric size, want: %d, got: %d", len(payload), dp.Value)
return
}

}
12 changes: 6 additions & 6 deletions http/client/transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ type Transport struct {
}

func readWrapperBuilder(metricsOpts *TransportMetricsOptions, tracesOpts *TransportTracesOptions,
meter metric.Meter, tracer trace.Tracer) readerWrapperFn {

meter metric.Meter, tracer trace.Tracer,
) readerWrapperFn {
if !metricsOpts.ReadPayload && !tracesOpts.ReadPayload {
// no metrics or traces for the payload reading
return func(r io.Reader, ctx context.Context) io.ReadCloser {
Expand Down Expand Up @@ -109,8 +109,8 @@ func readWrapperBuilder(metricsOpts *TransportMetricsOptions, tracesOpts *Transp

// NewRoundTripper creates an instrumented round tripper.
func NewRoundTripper(base http.RoundTripper, metricsOpts TransportMetricsOptions,
tracesOpts TransportTracesOptions, spanName string, stateGetter state.GetterFn) http.RoundTripper {

tracesOpts TransportTracesOptions, spanName string, stateGetter state.GetterFn,
) http.RoundTripper {
rt := newTransport(base, metricsOpts, tracesOpts, spanName, stateGetter)
if rt == nil {
return base
Expand All @@ -119,8 +119,8 @@ func NewRoundTripper(base http.RoundTripper, metricsOpts TransportMetricsOptions
}

func newTransport(base http.RoundTripper, metricsOpts TransportMetricsOptions,
tracesOpts TransportTracesOptions, spanName string, stateGetter state.GetterFn) *Transport {

tracesOpts TransportTracesOptions, spanName string, stateGetter state.GetterFn,
) *Transport {
if !tracesOpts.Enabled() && !metricsOpts.Enabled() {
return nil
}
Expand Down
4 changes: 2 additions & 2 deletions http/client/transport_traces.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ func newTransportTraces(tracesOpts *TransportTracesOptions, tracer trace.Tracer,
}

func (t *transportTraces) start(rtt *roundTripTracking,
propagator propagation.TextMapPropagator) {

propagator propagation.TextMapPropagator,
) {
if t == nil || rtt.req == nil {
return
}
Expand Down
1 change: 0 additions & 1 deletion http/client/transport_tracking.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ func (t *roundTripTracking) withClientTrace() {
// WroteRequest: t.WroteRequest,
}
t.req = t.req.WithContext(httptrace.WithClientTrace(t.req.Context(), httpTrace))

}

// GetConn is called before a connection is created or
Expand Down
4 changes: 2 additions & 2 deletions io/instruments.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ type instruments struct {
// create a meter or something ..
func newInstruments(prefix string,
attrT []attribute.KeyValue, attrM []attribute.KeyValue,
tracer trace.Tracer, meter metric.Meter) *instruments {

tracer trace.Tracer, meter metric.Meter,
) *instruments {
if prefix == "" {
prefix = "io-"
}
Expand Down
7 changes: 4 additions & 3 deletions io/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ type instrumentedReader struct {
// an instrumented reader. Is better than the [NewIntrumentedReader] call because
// the instruments here are only created once.
func NewInstrumentedReaderFactory(attrT []attribute.KeyValue, attrM []attribute.KeyValue,
tracer trace.Tracer, meter metric.Meter) func(io.Reader, context.Context) *instrumentedReader {
tracer trace.Tracer, meter metric.Meter,
) func(io.Reader, context.Context) *instrumentedReader {
instr := newInstruments("readed-", attrT, attrM, tracer, meter)

return func(r io.Reader, ctx context.Context) *instrumentedReader {
Expand All @@ -45,8 +46,8 @@ func NewInstrumentedReaderFactory(attrT []attribute.KeyValue, attrM []attribute.
// Is better to use [NewInstrumentedReaderFactory].
func NewInstrumentedReader(r io.Reader, ctx context.Context,
attrT []attribute.KeyValue, attrM []attribute.KeyValue,
tracer trace.Tracer, meter metric.Meter) *instrumentedReader {

tracer trace.Tracer, meter metric.Meter,
) *instrumentedReader {
return NewInstrumentedReaderFactory(attrT, attrM, tracer, meter)(r, ctx)
}

Expand Down
4 changes: 2 additions & 2 deletions io/reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func TestReaderHappyPath(t *testing.T) {
for _, m := range sm.Metrics {
gotMetrics[m.Name] = m
}
for k, _ := range wantedMetrics {
for k := range wantedMetrics {
if _, ok := gotMetrics[k]; !ok {
t.Errorf("missing metric %s", k)
return
Expand Down Expand Up @@ -225,7 +225,7 @@ func TestReaderTimeout(t *testing.T) {
for _, m := range sm.Metrics {
gotMetrics[m.Name] = m
}
for k, _ := range wantedMetrics {
for k := range wantedMetrics {
if _, ok := gotMetrics[k]; !ok {
t.Errorf("missing metric %s", k)
return
Expand Down
7 changes: 4 additions & 3 deletions io/writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ type instrumentedWriter struct {
// an instrumented writer. Is better than the [NewIntrumentedWriter] call because
// the instruments here are only created once.
func NewInstrumentedWriterFactory(attrT []attribute.KeyValue, attrM []attribute.KeyValue,
tracer trace.Tracer, meter metric.Meter) func(io.Writer, context.Context) *instrumentedWriter {
tracer trace.Tracer, meter metric.Meter,
) func(io.Writer, context.Context) *instrumentedWriter {
instr := newInstruments("written-", attrT, attrM, tracer, meter)

return func(w io.Writer, ctx context.Context) *instrumentedWriter {
Expand All @@ -50,8 +51,8 @@ func NewInstrumentedWriterFactory(attrT []attribute.KeyValue, attrM []attribute.
// Is better to use [NewInstrumentedWriterFactory].
func NewInstrumentedWriter(w io.Writer, ctx context.Context,
attrT []attribute.KeyValue, attrM []attribute.KeyValue,
tracer trace.Tracer, meter metric.Meter) *instrumentedWriter {

tracer trace.Tracer, meter metric.Meter,
) *instrumentedWriter {
return NewInstrumentedWriterFactory(attrT, attrM, tracer, meter)(w, ctx)
}

Expand Down
2 changes: 1 addition & 1 deletion io/writer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func TestWriterHappyPath(t *testing.T) {
for _, m := range sm.Metrics {
gotMetrics[m.Name] = m
}
for k, _ := range wantedMetrics {
for k := range wantedMetrics {
if _, ok := gotMetrics[k]; !ok {
t.Errorf("missing metric %s", k)
return
Expand Down
4 changes: 2 additions & 2 deletions lura/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ var (
// HTTPRequestExecutorFromConfig creates an HTTPRequestExecutor to be used
// for the backend requests.
func HTTPRequestExecutorFromConfig(clientFactory transport.HTTPClientFactory,
cfg *config.Backend, opts *otelconfig.BackendOpts) transport.HTTPRequestExecutor {

cfg *config.Backend, opts *otelconfig.BackendOpts,
) transport.HTTPRequestExecutor {
if !opts.Enabled() {
// no configuration for the backend, then .. no metrics nor tracing:
return transport.DefaultHTTPRequestExecutor(clientFactory)
Expand Down
8 changes: 3 additions & 5 deletions otel.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@ import (
"github.com/krakend/krakend-otel/state"
)

var (
otelState state.OTELState
)
var otelState state.OTELState

// Register all the known exporter factories (opentelemetry, prometheus, etc..)
// and uses the proviced ServiceConfig to instantiate the configured exporters.
Expand Down Expand Up @@ -69,10 +67,10 @@ func Register(ctx context.Context, srvCfg lconfig.ServiceConfig) error {
TraceSampleRate: 1.0,
TraceProviders: make([]string, 0, len(te)),
}
for mk, _ := range me {
for mk := range me {
cfg.Instance.MetricProviders = append(cfg.Instance.MetricProviders, mk)
}
for tk, _ := range te {
for tk := range te {
cfg.Instance.TraceProviders = append(cfg.Instance.TraceProviders, tk)
}
}
Expand Down
4 changes: 2 additions & 2 deletions router/gin/endpoint_traces.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ type ginTraces struct {
}

func newGinTraces(tracesOpts *ginTracesOptions, tracer trace.Tracer,
endpoint string, prop propagation.TextMapPropagator) *ginTraces {

endpoint string, prop propagation.TextMapPropagator,
) *ginTraces {
if tracesOpts.DisablePropagation {
prop = nil
}
Expand Down
4 changes: 1 addition & 3 deletions state/global.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ var (
otelState *OTELState
)

var (
_ GetterFn = GlobalState
)
var _ GetterFn = GlobalState

// GlobalState retrieves a configured global state
func GlobalState() OTEL {
Expand Down
4 changes: 2 additions & 2 deletions state/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ func New(cfg config.Config) (*OTELState, error) {
// NewWithVersion create a new OTELState with a version for
// the KrakenD service, with the provided metrics and traces exporters
func NewWithVersion(serviceName string, cfg config.Instance, version string,
me map[string]exporter.MetricReader, te map[string]exporter.SpanExporter) (*OTELState, error) {

me map[string]exporter.MetricReader, te map[string]exporter.SpanExporter,
) (*OTELState, error) {
res := sdkresource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceName(serviceName),
Expand Down

0 comments on commit 52885ad

Please sign in to comment.