You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-09-16 09:26:25 +02:00
Improve detail in stdout exporter (#436)
* Switch stdout exporter to use ungrouped batcher * Add unspecified keys to name without equals signs * Fix tests for stdout exporter * Add test for unspecified keys * Move test to stdout_test.go
This commit is contained in:
committed by
Rahul Patel
parent
2c460f0d97
commit
20bb650b2d
@@ -222,6 +222,6 @@ func TestDefaultSDK(t *testing.T) {
|
||||
pusher.Stop()
|
||||
out.Close()
|
||||
|
||||
require.Equal(t, `{"updates":[{"name":"test.builtin","sum":1}]}
|
||||
require.Equal(t, `{"updates":[{"name":"test.builtin{A=B}","sum":1}]}
|
||||
`, <-ch)
|
||||
}
|
||||
|
@@ -23,12 +23,12 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"go.opentelemetry.io/otel/api/core"
|
||||
"go.opentelemetry.io/otel/api/global"
|
||||
|
||||
export "go.opentelemetry.io/otel/sdk/export/metric"
|
||||
"go.opentelemetry.io/otel/sdk/export/metric/aggregator"
|
||||
metricsdk "go.opentelemetry.io/otel/sdk/metric"
|
||||
"go.opentelemetry.io/otel/sdk/metric/batcher/defaultkeys"
|
||||
"go.opentelemetry.io/otel/sdk/metric/batcher/ungrouped"
|
||||
"go.opentelemetry.io/otel/sdk/metric/controller/push"
|
||||
"go.opentelemetry.io/otel/sdk/metric/selector/simple"
|
||||
)
|
||||
@@ -130,7 +130,7 @@ func NewExportPipeline(config Config) (*push.Controller, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
batcher := defaultkeys.New(selector, metricsdk.NewDefaultLabelEncoder(), true)
|
||||
batcher := ungrouped.New(selector, true)
|
||||
pusher := push.New(batcher, exporter, time.Second)
|
||||
pusher.Start()
|
||||
|
||||
@@ -233,13 +233,30 @@ func (e *Exporter) Export(_ context.Context, checkpointSet export.CheckpointSet)
|
||||
}
|
||||
}
|
||||
|
||||
specifiedKeyMap := make(map[core.Key]core.Value)
|
||||
for _, kv := range record.Labels().Ordered() {
|
||||
specifiedKeyMap[kv.Key] = kv.Value
|
||||
}
|
||||
|
||||
var materializedKeys []string
|
||||
|
||||
if labels := record.Labels(); labels.Len() > 0 {
|
||||
materializedKeys = append(materializedKeys, labels.Encoded())
|
||||
}
|
||||
|
||||
for _, k := range desc.Keys() {
|
||||
if _, ok := specifiedKeyMap[k]; !ok {
|
||||
materializedKeys = append(materializedKeys, string(k))
|
||||
}
|
||||
}
|
||||
|
||||
var sb strings.Builder
|
||||
|
||||
sb.WriteString(desc.Name())
|
||||
|
||||
if labels := record.Labels(); labels.Len() > 0 {
|
||||
if len(materializedKeys) > 0 {
|
||||
sb.WriteRune('{')
|
||||
sb.WriteString(labels.Encoded())
|
||||
sb.WriteString(strings.Join(materializedKeys, ","))
|
||||
sb.WriteRune('}')
|
||||
}
|
||||
|
||||
|
@@ -262,3 +262,22 @@ func TestStdoutGaugeNotSet(t *testing.T) {
|
||||
|
||||
require.Equal(t, `{"updates":null}`, fix.Output())
|
||||
}
|
||||
|
||||
func TestStdoutCounterWithUnspecifiedKeys(t *testing.T) {
|
||||
fix := newFixture(t, stdout.Config{})
|
||||
|
||||
checkpointSet := test.NewCheckpointSet(sdk.NewDefaultLabelEncoder())
|
||||
|
||||
keys := []core.Key{key.New("C"), key.New("D")}
|
||||
|
||||
desc := export.NewDescriptor("test.name", export.CounterKind, keys, "", "", core.Int64NumberKind, false)
|
||||
cagg := counter.New()
|
||||
aggtest.CheckedUpdate(fix.t, cagg, core.NewInt64Number(10), desc)
|
||||
cagg.Checkpoint(fix.ctx, desc)
|
||||
|
||||
checkpointSet.Add(desc, cagg, key.String("A", "B"))
|
||||
|
||||
fix.Export(checkpointSet)
|
||||
|
||||
require.Equal(t, `{"updates":[{"name":"test.name{A=B,C,D}","sum":10}]}`, fix.Output())
|
||||
}
|
||||
|
Reference in New Issue
Block a user