Skip to content

Commit a69e370

Browse files
authored
fix: remove metric maps (#211)
Switch to struct fields
1 parent 1afdcd7 commit a69e370

File tree

6 files changed

+35
-54
lines changed

6 files changed

+35
-54
lines changed

instrumentation/opencensus/metrics.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,5 @@ func NewHttpOperationMetricsHandler() sdk.HttpOperationMetricsHandler {
1414
return &httpOperationMetricsHandler{}
1515
}
1616

17-
func (mh *httpOperationMetricsHandler) CreateRequestCount() {
18-
}
19-
2017
func (mh *httpOperationMetricsHandler) AddToRequestCount(n int64, r *http.Request) {
2118
}

instrumentation/opentelemetry/batchspanprocessor/batch_span_processor.modified.go

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ const (
3636
DefaultScheduleDelay = 5000
3737
DefaultExportTimeout = 30000
3838
DefaultMaxExportBatchSize = 512
39-
SpansReceivedCounter = "hypertrace.agent.bsp.spans_received"
40-
SpansDroppedCounter = "hypertrace.agent.bsp.spans_dropped"
41-
SpansUnSampledCounter = "hypertrace.agent.bsp.spans_unsampled"
39+
spansReceivedCounterName = "hypertrace.agent.bsp.spans_received"
40+
spansDroppedCounterName = "hypertrace.agent.bsp.spans_dropped"
41+
spansUnsampledCounterName = "hypertrace.agent.bsp.spans_unsampled"
42+
meterName = "go.opentelemetry.io/otel/sdk/trace"
4243
)
4344

4445
// batchSpanProcessor is a SpanProcessor that batches asynchronously-received
@@ -57,7 +58,9 @@ type batchSpanProcessor struct {
5758
stopOnce sync.Once
5859
stopCh chan struct{}
5960
// Some metrics in here.
60-
counters map[string]instrument.Int64Counter
61+
spansReceivedCounter instrument.Int64Counter
62+
spansDroppedCounter instrument.Int64Counter
63+
spansUnsampledCounter instrument.Int64Counter
6164
}
6265

6366
var _ sdktrace.SpanProcessor = (*batchSpanProcessor)(nil)
@@ -90,39 +93,36 @@ func NewBatchSpanProcessor(exporter sdktrace.SpanExporter, options ...sdktrace.B
9093

9194
// Setup metrics
9295
mp := metricglobal.MeterProvider()
93-
meter := mp.Meter("go.opentelemetry.io/otel/sdk/trace",
94-
metric.WithInstrumentationVersion(otel.Version()))
95-
counters := make(map[string]instrument.Int64Counter)
96+
meter := mp.Meter(meterName, metric.WithInstrumentationVersion(otel.Version()))
9697

9798
// Spans received by processor
98-
spansReceivedCounter, err := meter.Int64Counter(SpansReceivedCounter)
99+
spansReceivedCounter, err := meter.Int64Counter(spansReceivedCounterName)
99100
if err != nil {
100101
otel.Handle(err)
101102
}
102-
counters[SpansReceivedCounter] = spansReceivedCounter
103103

104104
// Spans Dropped by processor once the buffer is full.
105-
spansDroppedCounter, err := meter.Int64Counter(SpansDroppedCounter)
105+
spansDroppedCounter, err := meter.Int64Counter(spansDroppedCounterName)
106106
if err != nil {
107107
otel.Handle(err)
108108
}
109-
counters[SpansDroppedCounter] = spansDroppedCounter
110109

111110
// Spans that are not sampled.(Useful to know when sampling is enabled)
112-
spansUnSampledCounter, err := meter.Int64Counter(SpansUnSampledCounter)
111+
spansUnsampledCounter, err := meter.Int64Counter(spansUnsampledCounterName)
113112
if err != nil {
114113
otel.Handle(err)
115114
}
116-
counters[SpansUnSampledCounter] = spansUnSampledCounter
117115

118116
bsp := &batchSpanProcessor{
119-
e: exporter,
120-
o: o,
121-
batch: make([]sdktrace.ReadOnlySpan, 0, o.MaxExportBatchSize),
122-
timer: time.NewTimer(o.BatchTimeout),
123-
queue: make(chan sdktrace.ReadOnlySpan, o.MaxQueueSize),
124-
stopCh: make(chan struct{}),
125-
counters: counters,
117+
e: exporter,
118+
o: o,
119+
batch: make([]sdktrace.ReadOnlySpan, 0, o.MaxExportBatchSize),
120+
timer: time.NewTimer(o.BatchTimeout),
121+
queue: make(chan sdktrace.ReadOnlySpan, o.MaxQueueSize),
122+
stopCh: make(chan struct{}),
123+
spansReceivedCounter: spansReceivedCounter,
124+
spansDroppedCounter: spansDroppedCounter,
125+
spansUnsampledCounter: spansUnsampledCounter,
126126
}
127127

128128
bsp.stopWait.Add(1)
@@ -400,12 +400,12 @@ func (bsp *batchSpanProcessor) enqueueBlockOnQueueFull(ctx context.Context, sd s
400400
func (bsp *batchSpanProcessor) enqueueDrop(ctx context.Context, sd sdktrace.ReadOnlySpan) bool {
401401
if !sd.SpanContext().IsSampled() {
402402
// Count the span as unsampled
403-
bsp.counters[SpansUnSampledCounter].Add(ctx, 1)
403+
bsp.spansUnsampledCounter.Add(ctx, 1)
404404
return false
405405
}
406406

407407
// Count the span as received.
408-
bsp.counters[SpansReceivedCounter].Add(ctx, 1)
408+
bsp.spansReceivedCounter.Add(ctx, 1)
409409

410410
// This ensures the bsp.queue<- below does not panic as the
411411
// processor shuts down.
@@ -423,7 +423,7 @@ func (bsp *batchSpanProcessor) enqueueDrop(ctx context.Context, sd sdktrace.Read
423423
default:
424424
atomic.AddUint32(&bsp.dropped, 1)
425425
// Count the span as dropped.
426-
bsp.counters[SpansDroppedCounter].Add(ctx, 1)
426+
bsp.spansDroppedCounter.Add(ctx, 1)
427427
}
428428
return false
429429
}

instrumentation/opentelemetry/metrics.go

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package opentelemetry // import "github.com/hypertrace/goagent/instrumentation/o
22

33
import (
44
"net/http"
5-
"sync"
65

76
"github.com/hypertrace/goagent/sdk"
87
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
@@ -15,40 +14,35 @@ import (
1514

1615
// Server HTTP metrics.
1716
const (
17+
meterName = "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
1818
// Pseudo of go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp#RequestCount since a metric is not
1919
// created for that one for some reason.(annotated with hypertrace to avoid a duplicate if otel go ever implement
2020
// their own)
21-
RequestCount = "hypertrace.http.server.request_count" // Incoming request count total
21+
requestCountCounterName = "hypertrace.http.server.request_count" // Incoming request count total
2222
)
2323

2424
type HttpOperationMetricsHandler struct {
2525
operationNameGetter func(*http.Request) string
26-
counters map[string]instrument.Int64Counter
27-
countersMutex sync.RWMutex
26+
requestCountCounter instrument.Int64Counter
2827
}
2928

3029
var _ sdk.HttpOperationMetricsHandler = (*HttpOperationMetricsHandler)(nil)
3130

3231
func NewHttpOperationMetricsHandler(nameGetter func(*http.Request) string) sdk.HttpOperationMetricsHandler {
33-
return &HttpOperationMetricsHandler{
34-
operationNameGetter: nameGetter,
35-
counters: make(map[string]instrument.Int64Counter, 1),
36-
}
37-
}
38-
39-
func (mh *HttpOperationMetricsHandler) CreateRequestCount() {
4032
mp := global.MeterProvider()
41-
meter := mp.Meter("go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",
42-
metric.WithInstrumentationVersion(otelhttp.SemVersion()))
33+
meter := mp.Meter(meterName, metric.WithInstrumentationVersion(otelhttp.SemVersion()))
4334

44-
requestCountCounter, err := meter.Int64Counter(RequestCount)
35+
// Set up net http metrics
36+
// RequestCount Counter
37+
requestCountCounter, err := meter.Int64Counter(requestCountCounterName)
4538
if err != nil {
4639
otel.Handle(err)
4740
}
4841

49-
mh.countersMutex.Lock()
50-
defer mh.countersMutex.Unlock()
51-
mh.counters[RequestCount] = requestCountCounter
42+
return &HttpOperationMetricsHandler{
43+
operationNameGetter: nameGetter,
44+
requestCountCounter: requestCountCounter,
45+
}
5246
}
5347

5448
func (mh *HttpOperationMetricsHandler) AddToRequestCount(n int64, r *http.Request) {
@@ -57,8 +51,5 @@ func (mh *HttpOperationMetricsHandler) AddToRequestCount(n int64, r *http.Reques
5751
labeler, _ := otelhttp.LabelerFromContext(ctx)
5852
operationName := mh.operationNameGetter(r)
5953
attributes := append(labeler.Get(), semconv.HTTPServerMetricAttributesFromHTTPRequest(operationName, r)...)
60-
61-
mh.countersMutex.RLock()
62-
defer mh.countersMutex.RUnlock()
63-
mh.counters[RequestCount].Add(ctx, n, attributes...)
54+
mh.requestCountCounter.Add(ctx, n, attributes...)
6455
}

sdk/instrumentation/net/http/handler.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ func WrapHandler(delegate http.Handler, spanFromContext sdk.SpanFromContext, opt
4444
f = options.Filter
4545
}
4646

47-
// Create request count metric
48-
mh.CreateRequestCount()
49-
5047
return &handler{delegate, defaultAttributes, spanFromContext, internalconfig.GetConfig().GetDataCapture(), f, mh}
5148
}
5249

sdk/instrumentation/net/http/handler_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ import (
2020
type metricsHandler struct {
2121
}
2222

23-
func (mh *metricsHandler) CreateRequestCount() {
24-
25-
}
2623
func (mh *metricsHandler) AddToRequestCount(int64, *http.Request) {
2724

2825
}

sdk/metrics.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ import (
55
)
66

77
type HttpOperationMetricsHandler interface {
8-
CreateRequestCount()
98
AddToRequestCount(int64, *http.Request)
109
}

0 commit comments

Comments
 (0)