Observers export gauges in dogstatsd Exporter (#14)

This commit is contained in:
Joshua MacDonald 2020-04-16 10:54:55 -07:00 committed by GitHub
parent ea24ca8575
commit 4ef49a221c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 4 deletions

View File

@ -20,11 +20,14 @@ import (
"github.com/open-telemetry/opentelemetry-go-contrib/exporters/metric/dogstatsd/internal/statsd"
"go.opentelemetry.io/otel/api/global"
"go.opentelemetry.io/otel/api/metric"
"go.opentelemetry.io/otel/sdk/metric/aggregator/array"
"go.opentelemetry.io/otel/sdk/metric/aggregator/lastvalue"
"go.opentelemetry.io/otel/sdk/metric/aggregator/sum"
export "go.opentelemetry.io/otel/sdk/export/metric"
"go.opentelemetry.io/otel/sdk/metric/batcher/ungrouped"
"go.opentelemetry.io/otel/sdk/metric/controller/push"
"go.opentelemetry.io/otel/sdk/metric/selector/simple"
)
type (
@ -81,7 +84,6 @@ func InstallNewPipeline(config Config) (*push.Controller, error) {
// NewExportPipeline sets up a complete export pipeline with the recommended setup,
// chaining a NewRawExporter into the recommended selectors and batchers.
func NewExportPipeline(config Config, period time.Duration) (*push.Controller, error) {
selector := simple.NewWithExactMeasure()
exporter, err := NewRawExporter(config)
if err != nil {
return nil, err
@ -89,7 +91,7 @@ func NewExportPipeline(config Config, period time.Duration) (*push.Controller, e
// The ungrouped batcher ensures that the export sees the full
// set of labels as dogstatsd tags.
batcher := ungrouped.New(selector, exporter.labelEncoder, false)
batcher := ungrouped.New(exporter, exporter.labelEncoder, false)
pusher := push.New(batcher, exporter, period)
pusher.Start()
@ -97,6 +99,19 @@ func NewExportPipeline(config Config, period time.Duration) (*push.Controller, e
return pusher, nil
}
// AggregatorFor uses a Sum aggregator for counters, an Array
// aggregator for Measures, and a LastValue aggregator for Observers.
func (*Exporter) AggregatorFor(descriptor *metric.Descriptor) export.Aggregator {
switch descriptor.MetricKind() {
case metric.ObserverKind:
return lastvalue.New()
case metric.MeasureKind:
return array.New()
default:
return sum.New()
}
}
// AppendName is part of the stats-internal adapter interface.
func (*Exporter) AppendName(rec export.Record, buf *bytes.Buffer) {
_, _ = buf.WriteString(rec.Descriptor().Name())

View File

@ -304,7 +304,6 @@ func writeNumber(buf *bytes.Buffer, num core.Number, kind core.NumberKind) {
conv = strconv.AppendFloat(tmp[:0], num.AsFloat64(), 'g', -1, 64)
case core.Uint64NumberKind:
conv = strconv.AppendUint(tmp[:0], num.AsUint64(), 10)
}
_, _ = buf.Write(conv)
}