You've already forked opentelemetry-go
							
							
				mirror of
				https://github.com/open-telemetry/opentelemetry-go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	Rename otel/label -> otel/attribute (#1541)
* Rename otel/label -> otel/attr Leave the imported name alone, to avoid a large diff and conflicts * Better import comment * Update CHANGELOG.md Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> * otel/attr -> otel/attribute * Missed the changelog entry * Get rid of import renaming * Merge remaining conflicts Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
This commit is contained in:
		| @@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm | ||||
|  | ||||
| - Replaced interface `oteltest.SpanRecorder` with its existing implementation | ||||
|   `StandardSpanRecorder` (#1542). | ||||
| - Renamed the `otel/label` package to `otel/attribute`. (#1541) | ||||
|  | ||||
| ### Added | ||||
|  | ||||
|   | ||||
| @@ -12,40 +12,40 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label_test | ||||
| package attribute_test | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
| 
 | ||||
| type test struct{} | ||||
| 
 | ||||
| var ( | ||||
| 	arrayVal    = []string{"one", "two"} | ||||
| 	arrayKeyVal = label.Array("array", arrayVal) | ||||
| 	arrayKeyVal = attribute.Array("array", arrayVal) | ||||
| 
 | ||||
| 	boolVal    = true | ||||
| 	boolKeyVal = label.Bool("bool", boolVal) | ||||
| 	boolKeyVal = attribute.Bool("bool", boolVal) | ||||
| 
 | ||||
| 	intVal    = int(1) | ||||
| 	intKeyVal = label.Int("int", intVal) | ||||
| 	intKeyVal = attribute.Int("int", intVal) | ||||
| 
 | ||||
| 	int8Val    = int8(1) | ||||
| 	int8KeyVal = label.Int("int8", int(int8Val)) | ||||
| 	int8KeyVal = attribute.Int("int8", int(int8Val)) | ||||
| 
 | ||||
| 	int16Val    = int16(1) | ||||
| 	int16KeyVal = label.Int("int16", int(int16Val)) | ||||
| 	int16KeyVal = attribute.Int("int16", int(int16Val)) | ||||
| 
 | ||||
| 	int64Val    = int64(1) | ||||
| 	int64KeyVal = label.Int64("int64", int64Val) | ||||
| 	int64KeyVal = attribute.Int64("int64", int64Val) | ||||
| 
 | ||||
| 	float64Val    = float64(1.0) | ||||
| 	float64KeyVal = label.Float64("float64", float64Val) | ||||
| 	float64KeyVal = attribute.Float64("float64", float64Val) | ||||
| 
 | ||||
| 	stringVal    = "string" | ||||
| 	stringKeyVal = label.String("string", stringVal) | ||||
| 	stringKeyVal = attribute.String("string", stringVal) | ||||
| 
 | ||||
| 	bytesVal  = []byte("bytes") | ||||
| 	structVal = test{} | ||||
| @@ -54,112 +54,112 @@ var ( | ||||
| func BenchmarkArrayKey(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Array("array", arrayVal) | ||||
| 		_ = attribute.Array("array", arrayVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkArrayKeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("array", arrayVal) | ||||
| 		_ = attribute.Any("array", arrayVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkBoolKey(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Bool("bool", boolVal) | ||||
| 		_ = attribute.Bool("bool", boolVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkBoolKeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("bool", boolVal) | ||||
| 		_ = attribute.Any("bool", boolVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkIntKey(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Int("int", intVal) | ||||
| 		_ = attribute.Int("int", intVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkIntKeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("int", intVal) | ||||
| 		_ = attribute.Any("int", intVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkInt8KeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("int8", int8Val) | ||||
| 		_ = attribute.Any("int8", int8Val) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkInt16KeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("int16", int16Val) | ||||
| 		_ = attribute.Any("int16", int16Val) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkInt64Key(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Int64("int64", int64Val) | ||||
| 		_ = attribute.Int64("int64", int64Val) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkInt64KeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("int64", int64Val) | ||||
| 		_ = attribute.Any("int64", int64Val) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkFloat64Key(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Float64("float64", float64Val) | ||||
| 		_ = attribute.Float64("float64", float64Val) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkFloat64KeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("float64", float64Val) | ||||
| 		_ = attribute.Any("float64", float64Val) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkStringKey(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.String("string", stringVal) | ||||
| 		_ = attribute.String("string", stringVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkStringKeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("string", stringVal) | ||||
| 		_ = attribute.Any("string", stringVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkBytesKeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("bytes", bytesVal) | ||||
| 		_ = attribute.Any("bytes", bytesVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func BenchmarkStructKeyAny(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = label.Any("struct", structVal) | ||||
| 		_ = attribute.Any("struct", structVal) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @@ -12,9 +12,9 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| // Package label provides key and value labels. | ||||
| // package attribute provides key and value attributes. | ||||
| // | ||||
| // This package is currently in a pre-GA phase. Backwards incompatible changes | ||||
| // may be introduced in subsequent minor version releases as we work to track | ||||
| // the evolving OpenTelemetry specification and user feedback. | ||||
| package label // import "go.opentelemetry.io/otel/label" | ||||
| package attribute // import "go.opentelemetry.io/otel/attribute" | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label // import "go.opentelemetry.io/otel/label" | ||||
| package attribute // import "go.opentelemetry.io/otel/attribute" | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| @@ -28,7 +28,7 @@ type ( | ||||
| 	Encoder interface { | ||||
| 		// Encode returns the serialized encoding of the label | ||||
| 		// set using its Iterator.  This result may be cached | ||||
| 		// by a label.Set. | ||||
| 		// by a attribute.Set. | ||||
| 		Encode(iterator Iterator) string | ||||
| 
 | ||||
| 		// ID returns a value that is unique for each class of | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label // import "go.opentelemetry.io/otel/label" | ||||
| package attribute // import "go.opentelemetry.io/otel/attribute" | ||||
| 
 | ||||
| // Iterator allows iterating over the set of labels in order, | ||||
| // sorted by key. | ||||
| @@ -55,7 +55,7 @@ func (i *Iterator) Attribute() KeyValue { | ||||
| 	return i.Label() | ||||
| } | ||||
| 
 | ||||
| // IndexedLabel returns current index and label. Must be called only | ||||
| // IndexedLabel returns current index and attribute. Must be called only | ||||
| // after Next returns true. | ||||
| func (i *Iterator) IndexedLabel() (int, KeyValue) { | ||||
| 	return i.idx, i.Label() | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label_test | ||||
| package attribute_test | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| @@ -20,13 +20,13 @@ import ( | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 
 | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
| 
 | ||||
| func TestIterator(t *testing.T) { | ||||
| 	one := label.String("one", "1") | ||||
| 	two := label.Int("two", 2) | ||||
| 	lbl := label.NewSet(one, two) | ||||
| 	one := attribute.String("one", "1") | ||||
| 	two := attribute.Int("two", 2) | ||||
| 	lbl := attribute.NewSet(one, two) | ||||
| 	iter := lbl.Iter() | ||||
| 	require.Equal(t, 2, iter.Len()) | ||||
| 
 | ||||
| @@ -49,7 +49,7 @@ func TestIterator(t *testing.T) { | ||||
| } | ||||
| 
 | ||||
| func TestEmptyIterator(t *testing.T) { | ||||
| 	lbl := label.NewSet() | ||||
| 	lbl := attribute.NewSet() | ||||
| 	iter := lbl.Iter() | ||||
| 	require.Equal(t, 0, iter.Len()) | ||||
| 	require.False(t, iter.Next()) | ||||
| @@ -64,9 +64,9 @@ func TestMergedIterator(t *testing.T) { | ||||
| 		expect []string | ||||
| 	} | ||||
| 
 | ||||
| 	makeLabels := func(keys []string, num int) (result []label.KeyValue) { | ||||
| 	makeLabels := func(keys []string, num int) (result []attribute.KeyValue) { | ||||
| 		for _, k := range keys { | ||||
| 			result = append(result, label.Int(k, num)) | ||||
| 			result = append(result, attribute.Int(k, num)) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| @@ -131,10 +131,10 @@ func TestMergedIterator(t *testing.T) { | ||||
| 			labels1 := makeLabels(input.keys1, 1) | ||||
| 			labels2 := makeLabels(input.keys2, 2) | ||||
| 
 | ||||
| 			set1 := label.NewSet(labels1...) | ||||
| 			set2 := label.NewSet(labels2...) | ||||
| 			set1 := attribute.NewSet(labels1...) | ||||
| 			set2 := attribute.NewSet(labels2...) | ||||
| 
 | ||||
| 			merge := label.NewMergeIterator(&set1, &set2) | ||||
| 			merge := attribute.NewMergeIterator(&set1, &set2) | ||||
| 
 | ||||
| 			var result []string | ||||
| 
 | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label // import "go.opentelemetry.io/otel/label" | ||||
| package attribute // import "go.opentelemetry.io/otel/attribute" | ||||
| 
 | ||||
| // Key represents the key part in key-value pairs. It's a string. The | ||||
| // allowed character set in the key depends on the use of the key. | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label_test | ||||
| package attribute_test | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| @@ -20,28 +20,28 @@ import ( | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 
 | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
| 
 | ||||
| func TestDefined(t *testing.T) { | ||||
| 	for _, testcase := range []struct { | ||||
| 		name string | ||||
| 		k    label.Key | ||||
| 		k    attribute.Key | ||||
| 		want bool | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "Key.Defined() returns true when len(v.Name) != 0", | ||||
| 			k:    label.Key("foo"), | ||||
| 			k:    attribute.Key("foo"), | ||||
| 			want: true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "Key.Defined() returns false when len(v.Name) == 0", | ||||
| 			k:    label.Key(""), | ||||
| 			k:    attribute.Key(""), | ||||
| 			want: false, | ||||
| 		}, | ||||
| 	} { | ||||
| 		t.Run(testcase.name, func(t *testing.T) { | ||||
| 			//func (k label.Key) Defined() bool { | ||||
| 			//func (k attribute.Key) Defined() bool { | ||||
| 			have := testcase.k.Defined() | ||||
| 			if have != testcase.want { | ||||
| 				t.Errorf("Want: %v, but have: %v", testcase.want, have) | ||||
| @@ -51,9 +51,9 @@ func TestDefined(t *testing.T) { | ||||
| } | ||||
| 
 | ||||
| func TestJSONValue(t *testing.T) { | ||||
| 	var kvs interface{} = [2]label.KeyValue{ | ||||
| 		label.String("A", "B"), | ||||
| 		label.Int64("C", 1), | ||||
| 	var kvs interface{} = [2]attribute.KeyValue{ | ||||
| 		attribute.String("A", "B"), | ||||
| 		attribute.Int64("C", 1), | ||||
| 	} | ||||
| 
 | ||||
| 	data, err := json.Marshal(kvs) | ||||
| @@ -66,32 +66,32 @@ func TestJSONValue(t *testing.T) { | ||||
| func TestEmit(t *testing.T) { | ||||
| 	for _, testcase := range []struct { | ||||
| 		name string | ||||
| 		v    label.Value | ||||
| 		v    attribute.Value | ||||
| 		want string | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: `test Key.Emit() can emit a string representing self.BOOL`, | ||||
| 			v:    label.BoolValue(true), | ||||
| 			v:    attribute.BoolValue(true), | ||||
| 			want: "true", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: `test Key.Emit() can emit a string representing self.INT64`, | ||||
| 			v:    label.Int64Value(42), | ||||
| 			v:    attribute.Int64Value(42), | ||||
| 			want: "42", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: `test Key.Emit() can emit a string representing self.FLOAT64`, | ||||
| 			v:    label.Float64Value(42.1), | ||||
| 			v:    attribute.Float64Value(42.1), | ||||
| 			want: "42.1", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: `test Key.Emit() can emit a string representing self.STRING`, | ||||
| 			v:    label.StringValue("foo"), | ||||
| 			v:    attribute.StringValue("foo"), | ||||
| 			want: "foo", | ||||
| 		}, | ||||
| 	} { | ||||
| 		t.Run(testcase.name, func(t *testing.T) { | ||||
| 			//proto: func (v label.Value) Emit() string { | ||||
| 			//proto: func (v attribute.Value) Emit() string { | ||||
| 			have := testcase.v.Emit() | ||||
| 			if have != testcase.want { | ||||
| 				t.Errorf("Want: %s, but have: %s", testcase.want, have) | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label // import "go.opentelemetry.io/otel/label" | ||||
| package attribute // import "go.opentelemetry.io/otel/attribute" | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label_test | ||||
| package attribute_test | ||||
| 
 | ||||
| import ( | ||||
| 	"strings" | ||||
| @@ -20,60 +20,60 @@ import ( | ||||
| 
 | ||||
| 	"github.com/google/go-cmp/cmp" | ||||
| 
 | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
| 
 | ||||
| func TestKeyValueConstructors(t *testing.T) { | ||||
| 	tt := []struct { | ||||
| 		name     string | ||||
| 		actual   label.KeyValue | ||||
| 		expected label.KeyValue | ||||
| 		actual   attribute.KeyValue | ||||
| 		expected attribute.KeyValue | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:   "Bool", | ||||
| 			actual: label.Bool("k1", true), | ||||
| 			expected: label.KeyValue{ | ||||
| 			actual: attribute.Bool("k1", true), | ||||
| 			expected: attribute.KeyValue{ | ||||
| 				Key:   "k1", | ||||
| 				Value: label.BoolValue(true), | ||||
| 				Value: attribute.BoolValue(true), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "Int64", | ||||
| 			actual: label.Int64("k1", 123), | ||||
| 			expected: label.KeyValue{ | ||||
| 			actual: attribute.Int64("k1", 123), | ||||
| 			expected: attribute.KeyValue{ | ||||
| 				Key:   "k1", | ||||
| 				Value: label.Int64Value(123), | ||||
| 				Value: attribute.Int64Value(123), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "Float64", | ||||
| 			actual: label.Float64("k1", 123.5), | ||||
| 			expected: label.KeyValue{ | ||||
| 			actual: attribute.Float64("k1", 123.5), | ||||
| 			expected: attribute.KeyValue{ | ||||
| 				Key:   "k1", | ||||
| 				Value: label.Float64Value(123.5), | ||||
| 				Value: attribute.Float64Value(123.5), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "String", | ||||
| 			actual: label.String("k1", "123.5"), | ||||
| 			expected: label.KeyValue{ | ||||
| 			actual: attribute.String("k1", "123.5"), | ||||
| 			expected: attribute.KeyValue{ | ||||
| 				Key:   "k1", | ||||
| 				Value: label.StringValue("123.5"), | ||||
| 				Value: attribute.StringValue("123.5"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "Int", | ||||
| 			actual: label.Int("k1", 123), | ||||
| 			expected: label.KeyValue{ | ||||
| 			actual: attribute.Int("k1", 123), | ||||
| 			expected: attribute.KeyValue{ | ||||
| 				Key:   "k1", | ||||
| 				Value: label.IntValue(123), | ||||
| 				Value: attribute.IntValue(123), | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, test := range tt { | ||||
| 		t.Run(test.name, func(t *testing.T) { | ||||
| 			if diff := cmp.Diff(test.actual, test.expected, cmp.AllowUnexported(label.Value{})); diff != "" { | ||||
| 			if diff := cmp.Diff(test.actual, test.expected, cmp.AllowUnexported(attribute.Value{})); diff != "" { | ||||
| 				t.Fatal(diff) | ||||
| 			} | ||||
| 		}) | ||||
| @@ -97,60 +97,60 @@ func TestAny(t *testing.T) { | ||||
| 	for _, testcase := range []struct { | ||||
| 		key       string | ||||
| 		value     interface{} | ||||
| 		wantType  label.Type | ||||
| 		wantType  attribute.Type | ||||
| 		wantValue interface{} | ||||
| 	}{ | ||||
| 		{ | ||||
| 			key:       "bool type inferred", | ||||
| 			value:     true, | ||||
| 			wantType:  label.BOOL, | ||||
| 			wantType:  attribute.BOOL, | ||||
| 			wantValue: true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:       "int64 type inferred", | ||||
| 			value:     int64(42), | ||||
| 			wantType:  label.INT64, | ||||
| 			wantType:  attribute.INT64, | ||||
| 			wantValue: int64(42), | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:       "float64 type inferred", | ||||
| 			value:     float64(42.1), | ||||
| 			wantType:  label.FLOAT64, | ||||
| 			wantType:  attribute.FLOAT64, | ||||
| 			wantValue: 42.1, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:       "string type inferred", | ||||
| 			value:     "foo", | ||||
| 			wantType:  label.STRING, | ||||
| 			wantType:  attribute.STRING, | ||||
| 			wantValue: "foo", | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:       "stringer type inferred", | ||||
| 			value:     builder, | ||||
| 			wantType:  label.STRING, | ||||
| 			wantType:  attribute.STRING, | ||||
| 			wantValue: "foo", | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:       "unknown value serialized as %v", | ||||
| 			value:     nil, | ||||
| 			wantType:  label.STRING, | ||||
| 			wantType:  attribute.STRING, | ||||
| 			wantValue: "<nil>", | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:       "JSON struct serialized correctly", | ||||
| 			value:     &jsonifyStruct, | ||||
| 			wantType:  label.STRING, | ||||
| 			wantType:  attribute.STRING, | ||||
| 			wantValue: `{"Public":"foo","tagName":"baz","Empty":""}`, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:       "Invalid JSON struct falls back to string", | ||||
| 			value:     &invalidStruct, | ||||
| 			wantType:  label.STRING, | ||||
| 			wantType:  attribute.STRING, | ||||
| 			wantValue: "&{(0+0i)}", | ||||
| 		}, | ||||
| 	} { | ||||
| 		t.Logf("Running test case %s", testcase.key) | ||||
| 		keyValue := label.Any(testcase.key, testcase.value) | ||||
| 		keyValue := attribute.Any(testcase.key, testcase.value) | ||||
| 		if keyValue.Value.Type() != testcase.wantType { | ||||
| 			t.Errorf("wrong value type, got %#v, expected %#v", keyValue.Value.Type(), testcase.wantType) | ||||
| 		} | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label // import "go.opentelemetry.io/otel/label" | ||||
| package attribute // import "go.opentelemetry.io/otel/attribute" | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| @@ -295,7 +295,7 @@ func NewSetWithFiltered(kvs []KeyValue, filter Filter) (Set, []KeyValue) { | ||||
| // - allocating a `Set` for storing the return value of this | ||||
| //   constructor. | ||||
| // | ||||
| // The result maintains a cache of encoded labels, by label.EncoderID. | ||||
| // The result maintains a cache of encoded labels, by attribute.EncoderID. | ||||
| // This value should not be copied after its first use. | ||||
| // | ||||
| // The second `[]KeyValue` return value is a list of labels that were | ||||
| @@ -12,19 +12,19 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label_test | ||||
| package attribute_test | ||||
| 
 | ||||
| import ( | ||||
| 	"regexp" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 
 | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
| 
 | ||||
| type testCase struct { | ||||
| 	kvs []label.KeyValue | ||||
| 	kvs []attribute.KeyValue | ||||
| 
 | ||||
| 	keyRe *regexp.Regexp | ||||
| 
 | ||||
| @@ -32,14 +32,14 @@ type testCase struct { | ||||
| 	fullEnc  string | ||||
| } | ||||
| 
 | ||||
| func expect(enc string, kvs ...label.KeyValue) testCase { | ||||
| func expect(enc string, kvs ...attribute.KeyValue) testCase { | ||||
| 	return testCase{ | ||||
| 		kvs:      kvs, | ||||
| 		encoding: enc, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func expectFiltered(enc, filter, fullEnc string, kvs ...label.KeyValue) testCase { | ||||
| func expectFiltered(enc, filter, fullEnc string, kvs ...attribute.KeyValue) testCase { | ||||
| 	return testCase{ | ||||
| 		kvs:      kvs, | ||||
| 		keyRe:    regexp.MustCompile(filter), | ||||
| @@ -50,26 +50,26 @@ func expectFiltered(enc, filter, fullEnc string, kvs ...label.KeyValue) testCase | ||||
| 
 | ||||
| func TestSetDedup(t *testing.T) { | ||||
| 	cases := []testCase{ | ||||
| 		expect("A=B", label.String("A", "2"), label.String("A", "B")), | ||||
| 		expect("A=B", label.String("A", "2"), label.Int("A", 1), label.String("A", "B")), | ||||
| 		expect("A=B", label.String("A", "B"), label.String("A", "C"), label.String("A", "D"), label.String("A", "B")), | ||||
| 		expect("A=B", attribute.String("A", "2"), attribute.String("A", "B")), | ||||
| 		expect("A=B", attribute.String("A", "2"), attribute.Int("A", 1), attribute.String("A", "B")), | ||||
| 		expect("A=B", attribute.String("A", "B"), attribute.String("A", "C"), attribute.String("A", "D"), attribute.String("A", "B")), | ||||
| 
 | ||||
| 		expect("A=B,C=D", label.String("A", "1"), label.String("C", "D"), label.String("A", "B")), | ||||
| 		expect("A=B,C=D", label.String("A", "2"), label.String("A", "B"), label.String("C", "D")), | ||||
| 		expect("A=B,C=D", label.Float64("C", 1.2), label.String("A", "2"), label.String("A", "B"), label.String("C", "D")), | ||||
| 		expect("A=B,C=D", label.String("C", "D"), label.String("A", "B"), label.String("A", "C"), label.String("A", "D"), label.String("A", "B")), | ||||
| 		expect("A=B,C=D", label.String("A", "B"), label.String("C", "D"), label.String("A", "C"), label.String("A", "D"), label.String("A", "B")), | ||||
| 		expect("A=B,C=D", label.String("A", "B"), label.String("A", "C"), label.String("A", "D"), label.String("A", "B"), label.String("C", "D")), | ||||
| 		expect("A=B,C=D", attribute.String("A", "1"), attribute.String("C", "D"), attribute.String("A", "B")), | ||||
| 		expect("A=B,C=D", attribute.String("A", "2"), attribute.String("A", "B"), attribute.String("C", "D")), | ||||
| 		expect("A=B,C=D", attribute.Float64("C", 1.2), attribute.String("A", "2"), attribute.String("A", "B"), attribute.String("C", "D")), | ||||
| 		expect("A=B,C=D", attribute.String("C", "D"), attribute.String("A", "B"), attribute.String("A", "C"), attribute.String("A", "D"), attribute.String("A", "B")), | ||||
| 		expect("A=B,C=D", attribute.String("A", "B"), attribute.String("C", "D"), attribute.String("A", "C"), attribute.String("A", "D"), attribute.String("A", "B")), | ||||
| 		expect("A=B,C=D", attribute.String("A", "B"), attribute.String("A", "C"), attribute.String("A", "D"), attribute.String("A", "B"), attribute.String("C", "D")), | ||||
| 	} | ||||
| 	enc := label.DefaultEncoder() | ||||
| 	enc := attribute.DefaultEncoder() | ||||
| 
 | ||||
| 	s2d := map[string][]label.Distinct{} | ||||
| 	d2s := map[label.Distinct][]string{} | ||||
| 	s2d := map[string][]attribute.Distinct{} | ||||
| 	d2s := map[attribute.Distinct][]string{} | ||||
| 
 | ||||
| 	for _, tc := range cases { | ||||
| 		cpy := make([]label.KeyValue, len(tc.kvs)) | ||||
| 		cpy := make([]attribute.KeyValue, len(tc.kvs)) | ||||
| 		copy(cpy, tc.kvs) | ||||
| 		sl := label.NewSet(cpy...) | ||||
| 		sl := attribute.NewSet(cpy...) | ||||
| 
 | ||||
| 		// Ensure that the input was reordered but no elements went missing. | ||||
| 		require.ElementsMatch(t, tc.kvs, cpy) | ||||
| @@ -129,19 +129,19 @@ func TestSetDedup(t *testing.T) { | ||||
| } | ||||
| 
 | ||||
| func TestUniqueness(t *testing.T) { | ||||
| 	short := []label.KeyValue{ | ||||
| 		label.String("A", "0"), | ||||
| 		label.String("B", "2"), | ||||
| 		label.String("A", "1"), | ||||
| 	short := []attribute.KeyValue{ | ||||
| 		attribute.String("A", "0"), | ||||
| 		attribute.String("B", "2"), | ||||
| 		attribute.String("A", "1"), | ||||
| 	} | ||||
| 	long := []label.KeyValue{ | ||||
| 		label.String("B", "2"), | ||||
| 		label.String("C", "5"), | ||||
| 		label.String("B", "2"), | ||||
| 		label.String("C", "1"), | ||||
| 		label.String("A", "4"), | ||||
| 		label.String("C", "3"), | ||||
| 		label.String("A", "1"), | ||||
| 	long := []attribute.KeyValue{ | ||||
| 		attribute.String("B", "2"), | ||||
| 		attribute.String("C", "5"), | ||||
| 		attribute.String("B", "2"), | ||||
| 		attribute.String("C", "1"), | ||||
| 		attribute.String("A", "4"), | ||||
| 		attribute.String("C", "3"), | ||||
| 		attribute.String("A", "1"), | ||||
| 	} | ||||
| 	cases := []testCase{ | ||||
| 		expectFiltered("A=1", "^A$", "B=2", short...), | ||||
| @@ -154,16 +154,16 @@ func TestUniqueness(t *testing.T) { | ||||
| 		expectFiltered("C=3", "C", "A=1,B=2", long...), | ||||
| 		expectFiltered("", "D", "A=1,B=2,C=3", long...), | ||||
| 	} | ||||
| 	enc := label.DefaultEncoder() | ||||
| 	enc := attribute.DefaultEncoder() | ||||
| 
 | ||||
| 	for _, tc := range cases { | ||||
| 		cpy := make([]label.KeyValue, len(tc.kvs)) | ||||
| 		cpy := make([]attribute.KeyValue, len(tc.kvs)) | ||||
| 		copy(cpy, tc.kvs) | ||||
| 		distinct, uniq := label.NewSetWithFiltered(cpy, func(label label.KeyValue) bool { | ||||
| 		distinct, uniq := attribute.NewSetWithFiltered(cpy, func(label attribute.KeyValue) bool { | ||||
| 			return tc.keyRe.MatchString(string(label.Key)) | ||||
| 		}) | ||||
| 
 | ||||
| 		full := label.NewSet(uniq...) | ||||
| 		full := attribute.NewSet(uniq...) | ||||
| 
 | ||||
| 		require.Equal(t, tc.encoding, distinct.Encoded(enc)) | ||||
| 		require.Equal(t, tc.fullEnc, full.Encoded(enc)) | ||||
| @@ -171,7 +171,7 @@ func TestUniqueness(t *testing.T) { | ||||
| } | ||||
| 
 | ||||
| func TestLookup(t *testing.T) { | ||||
| 	set := label.NewSet(label.Int("C", 3), label.Int("A", 1), label.Int("B", 2)) | ||||
| 	set := attribute.NewSet(attribute.Int("C", 3), attribute.Int("A", 1), attribute.Int("B", 2)) | ||||
| 
 | ||||
| 	value, has := set.Value("C") | ||||
| 	require.True(t, has) | ||||
| @@ -1,6 +1,6 @@ | ||||
| // Code generated by "stringer -type=Type"; DO NOT EDIT. | ||||
| 
 | ||||
| package label | ||||
| package attribute | ||||
| 
 | ||||
| import "strconv" | ||||
| 
 | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label // import "go.opentelemetry.io/otel/label" | ||||
| package attribute // import "go.opentelemetry.io/otel/attribute" | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| @@ -12,7 +12,7 @@ | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package label_test | ||||
| package attribute_test | ||||
| 
 | ||||
| import ( | ||||
| 	"reflect" | ||||
| @@ -20,46 +20,46 @@ import ( | ||||
| 
 | ||||
| 	"github.com/google/go-cmp/cmp" | ||||
| 
 | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
| 
 | ||||
| func TestValue(t *testing.T) { | ||||
| 	k := label.Key("test") | ||||
| 	k := attribute.Key("test") | ||||
| 	bli := getBitlessInfo(42) | ||||
| 	for _, testcase := range []struct { | ||||
| 		name      string | ||||
| 		value     label.Value | ||||
| 		wantType  label.Type | ||||
| 		value     attribute.Value | ||||
| 		wantType  attribute.Type | ||||
| 		wantValue interface{} | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:      "Key.Bool() correctly returns keys's internal bool value", | ||||
| 			value:     k.Bool(true).Value, | ||||
| 			wantType:  label.BOOL, | ||||
| 			wantType:  attribute.BOOL, | ||||
| 			wantValue: true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "Key.Array([]bool) correctly return key's internal bool values", | ||||
| 			value:     k.Array([]bool{true, false}).Value, | ||||
| 			wantType:  label.ARRAY, | ||||
| 			wantType:  attribute.ARRAY, | ||||
| 			wantValue: [2]bool{true, false}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "Key.Int64() correctly returns keys's internal int64 value", | ||||
| 			value:     k.Int64(42).Value, | ||||
| 			wantType:  label.INT64, | ||||
| 			wantType:  attribute.INT64, | ||||
| 			wantValue: int64(42), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "Key.Float64() correctly returns keys's internal float64 value", | ||||
| 			value:     k.Float64(42.1).Value, | ||||
| 			wantType:  label.FLOAT64, | ||||
| 			wantType:  attribute.FLOAT64, | ||||
| 			wantValue: 42.1, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "Key.String() correctly returns keys's internal string value", | ||||
| 			value:     k.String("foo").Value, | ||||
| 			wantType:  label.STRING, | ||||
| 			wantType:  attribute.STRING, | ||||
| 			wantValue: "foo", | ||||
| 		}, | ||||
| 		{ | ||||
| @@ -71,31 +71,31 @@ func TestValue(t *testing.T) { | ||||
| 		{ | ||||
| 			name:      "Key.Array([]int64) correctly returns keys's internal int64 values", | ||||
| 			value:     k.Array([]int64{42, 43}).Value, | ||||
| 			wantType:  label.ARRAY, | ||||
| 			wantType:  attribute.ARRAY, | ||||
| 			wantValue: [2]int64{42, 43}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "Key.Array([]float64) correctly returns keys's internal float64 values", | ||||
| 			value:     k.Array([]float64{42, 43}).Value, | ||||
| 			wantType:  label.ARRAY, | ||||
| 			wantType:  attribute.ARRAY, | ||||
| 			wantValue: [2]float64{42, 43}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "Key.Array([]string) correctly return key's internal string values", | ||||
| 			value:     k.Array([]string{"foo", "bar"}).Value, | ||||
| 			wantType:  label.ARRAY, | ||||
| 			wantType:  attribute.ARRAY, | ||||
| 			wantValue: [2]string{"foo", "bar"}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "Key.Array([]int) correctly returns keys's internal signed integral values", | ||||
| 			value:     k.Array([]int{42, 43}).Value, | ||||
| 			wantType:  label.ARRAY, | ||||
| 			wantType:  attribute.ARRAY, | ||||
| 			wantValue: [2]int{42, 43}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "Key.Array([][]int) refuses to create multi-dimensional array", | ||||
| 			value:     k.Array([][]int{{1, 2}, {3, 4}}).Value, | ||||
| 			wantType:  label.INVALID, | ||||
| 			wantType:  attribute.INVALID, | ||||
| 			wantValue: nil, | ||||
| 		}, | ||||
| 	} { | ||||
| @@ -103,7 +103,7 @@ func TestValue(t *testing.T) { | ||||
| 		if testcase.value.Type() != testcase.wantType { | ||||
| 			t.Errorf("wrong value type, got %#v, expected %#v", testcase.value.Type(), testcase.wantType) | ||||
| 		} | ||||
| 		if testcase.wantType == label.INVALID { | ||||
| 		if testcase.wantType == attribute.INVALID { | ||||
| 			continue | ||||
| 		} | ||||
| 		got := testcase.value.AsInterface() | ||||
| @@ -116,7 +116,7 @@ func TestValue(t *testing.T) { | ||||
| type bitlessInfo struct { | ||||
| 	intValue    int | ||||
| 	uintValue   uint | ||||
| 	signedType  label.Type | ||||
| 	signedType  attribute.Type | ||||
| 	signedValue interface{} | ||||
| } | ||||
| 
 | ||||
| @@ -124,13 +124,13 @@ func getBitlessInfo(i int) bitlessInfo { | ||||
| 	return bitlessInfo{ | ||||
| 		intValue:    i, | ||||
| 		uintValue:   uint(i), | ||||
| 		signedType:  label.INT64, | ||||
| 		signedType:  attribute.INT64, | ||||
| 		signedValue: int64(i), | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestAsArrayValue(t *testing.T) { | ||||
| 	v := label.ArrayValue([]int{1, 2, 3}).AsArray() | ||||
| 	v := attribute.ArrayValue([]int{1, 2, 3}).AsArray() | ||||
| 	// Ensure the returned dynamic type is stable. | ||||
| 	if got, want := reflect.TypeOf(v).Kind(), reflect.Array; got != want { | ||||
| 		t.Errorf("AsArray() returned %T, want %T", got, want) | ||||
| @@ -17,35 +17,35 @@ package baggage // import "go.opentelemetry.io/otel/baggage" | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/internal/baggage" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| ) | ||||
|  | ||||
| // Set returns a copy of the set of baggage key-values in ctx. | ||||
| func Set(ctx context.Context) label.Set { | ||||
| func Set(ctx context.Context) attribute.Set { | ||||
| 	// TODO (MrAlias, #1222): The underlying storage, the Map, shares many of | ||||
| 	// the functional elements of the label.Set. These should be unified so | ||||
| 	// the functional elements of the attribute.Set. These should be unified so | ||||
| 	// this conversion is unnecessary and there is no performance hit calling | ||||
| 	// this. | ||||
| 	m := baggage.MapFromContext(ctx) | ||||
| 	values := make([]label.KeyValue, 0, m.Len()) | ||||
| 	m.Foreach(func(kv label.KeyValue) bool { | ||||
| 	values := make([]attribute.KeyValue, 0, m.Len()) | ||||
| 	m.Foreach(func(kv attribute.KeyValue) bool { | ||||
| 		values = append(values, kv) | ||||
| 		return true | ||||
| 	}) | ||||
| 	return label.NewSet(values...) | ||||
| 	return attribute.NewSet(values...) | ||||
| } | ||||
|  | ||||
| // Value returns the value related to key in the baggage of ctx. If no | ||||
| // value is set, the returned label.Value will be an uninitialized zero-value | ||||
| // value is set, the returned attribute.Value will be an uninitialized zero-value | ||||
| // with type INVALID. | ||||
| func Value(ctx context.Context, key label.Key) label.Value { | ||||
| func Value(ctx context.Context, key attribute.Key) attribute.Value { | ||||
| 	v, _ := baggage.MapFromContext(ctx).Value(key) | ||||
| 	return v | ||||
| } | ||||
|  | ||||
| // ContextWithValues returns a copy of parent with pairs updated in the baggage. | ||||
| func ContextWithValues(parent context.Context, pairs ...label.KeyValue) context.Context { | ||||
| func ContextWithValues(parent context.Context, pairs ...attribute.KeyValue) context.Context { | ||||
| 	m := baggage.MapFromContext(parent).Apply(baggage.MapUpdate{ | ||||
| 		MultiKV: pairs, | ||||
| 	}) | ||||
| @@ -54,7 +54,7 @@ func ContextWithValues(parent context.Context, pairs ...label.KeyValue) context. | ||||
|  | ||||
| // ContextWithoutValues returns a copy of parent in which the values related | ||||
| // to keys have been removed from the baggage. | ||||
| func ContextWithoutValues(parent context.Context, keys ...label.Key) context.Context { | ||||
| func ContextWithoutValues(parent context.Context, keys ...attribute.Key) context.Context { | ||||
| 	m := baggage.MapFromContext(parent).Apply(baggage.MapUpdate{ | ||||
| 		DropMultiK: keys, | ||||
| 	}) | ||||
|   | ||||
| @@ -18,8 +18,8 @@ import ( | ||||
| 	"context" | ||||
| 	"testing" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/internal/baggage" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| ) | ||||
|  | ||||
| func TestBaggage(t *testing.T) { | ||||
| @@ -31,7 +31,7 @@ func TestBaggage(t *testing.T) { | ||||
| 		t.Fatalf("empty baggage returned a set with %d elements", b.Len()) | ||||
| 	} | ||||
|  | ||||
| 	first, second, third := label.Key("first"), label.Key("second"), label.Key("third") | ||||
| 	first, second, third := attribute.Key("first"), attribute.Key("second"), attribute.Key("third") | ||||
| 	ctx = ContextWithValues(ctx, first.Bool(true), second.String("2")) | ||||
| 	m := baggage.MapFromContext(ctx) | ||||
| 	v, ok := m.Value(first) | ||||
| @@ -59,11 +59,11 @@ func TestBaggage(t *testing.T) { | ||||
| 	} | ||||
|  | ||||
| 	v = Value(ctx, first) | ||||
| 	if v.Type() != label.BOOL || !v.AsBool() { | ||||
| 	if v.Type() != attribute.BOOL || !v.AsBool() { | ||||
| 		t.Fatal("Value failed to get correct first value") | ||||
| 	} | ||||
| 	v = Value(ctx, second) | ||||
| 	if v.Type() != label.STRING || v.AsString() != "2" { | ||||
| 	if v.Type() != attribute.STRING || v.AsString() != "2" { | ||||
| 		t.Fatal("Value failed to get correct second value") | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -21,9 +21,9 @@ import ( | ||||
| 	octrace "go.opencensus.io/trace" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/bridge/opencensus/utils" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| @@ -114,29 +114,29 @@ func (s *span) AddAttributes(attributes ...octrace.Attribute) { | ||||
| 	s.otSpan.SetAttributes(convertAttributes(attributes)...) | ||||
| } | ||||
|  | ||||
| func convertAttributes(attributes []octrace.Attribute) []label.KeyValue { | ||||
| 	otAttributes := make([]label.KeyValue, len(attributes)) | ||||
| func convertAttributes(attributes []octrace.Attribute) []attribute.KeyValue { | ||||
| 	otAttributes := make([]attribute.KeyValue, len(attributes)) | ||||
| 	for i, a := range attributes { | ||||
| 		otAttributes[i] = label.KeyValue{ | ||||
| 			Key:   label.Key(a.Key()), | ||||
| 		otAttributes[i] = attribute.KeyValue{ | ||||
| 			Key:   attribute.Key(a.Key()), | ||||
| 			Value: convertValue(a.Value()), | ||||
| 		} | ||||
| 	} | ||||
| 	return otAttributes | ||||
| } | ||||
|  | ||||
| func convertValue(ocval interface{}) label.Value { | ||||
| func convertValue(ocval interface{}) attribute.Value { | ||||
| 	switch v := ocval.(type) { | ||||
| 	case bool: | ||||
| 		return label.BoolValue(v) | ||||
| 		return attribute.BoolValue(v) | ||||
| 	case int64: | ||||
| 		return label.Int64Value(v) | ||||
| 		return attribute.Int64Value(v) | ||||
| 	case float64: | ||||
| 		return label.Float64Value(v) | ||||
| 		return attribute.Float64Value(v) | ||||
| 	case string: | ||||
| 		return label.StringValue(v) | ||||
| 		return attribute.StringValue(v) | ||||
| 	default: | ||||
| 		return label.StringValue("unknown") | ||||
| 		return attribute.StringValue("unknown") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -149,20 +149,20 @@ func (s *span) Annotatef(attributes []octrace.Attribute, format string, a ...int | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	uncompressedKey = label.Key("uncompressed byte size") | ||||
| 	compressedKey   = label.Key("compressed byte size") | ||||
| 	uncompressedKey = attribute.Key("uncompressed byte size") | ||||
| 	compressedKey   = attribute.Key("compressed byte size") | ||||
| ) | ||||
|  | ||||
| func (s *span) AddMessageSendEvent(messageID, uncompressedByteSize, compressedByteSize int64) { | ||||
| 	s.otSpan.AddEvent("message send", | ||||
| 		trace.WithAttributes( | ||||
| 			label.KeyValue{ | ||||
| 			attribute.KeyValue{ | ||||
| 				Key:   uncompressedKey, | ||||
| 				Value: label.Int64Value(uncompressedByteSize), | ||||
| 				Value: attribute.Int64Value(uncompressedByteSize), | ||||
| 			}, | ||||
| 			label.KeyValue{ | ||||
| 			attribute.KeyValue{ | ||||
| 				Key:   compressedKey, | ||||
| 				Value: label.Int64Value(compressedByteSize), | ||||
| 				Value: attribute.Int64Value(compressedByteSize), | ||||
| 			}), | ||||
| 	) | ||||
| } | ||||
| @@ -170,13 +170,13 @@ func (s *span) AddMessageSendEvent(messageID, uncompressedByteSize, compressedBy | ||||
| func (s *span) AddMessageReceiveEvent(messageID, uncompressedByteSize, compressedByteSize int64) { | ||||
| 	s.otSpan.AddEvent("message receive", | ||||
| 		trace.WithAttributes( | ||||
| 			label.KeyValue{ | ||||
| 			attribute.KeyValue{ | ||||
| 				Key:   uncompressedKey, | ||||
| 				Value: label.Int64Value(uncompressedByteSize), | ||||
| 				Value: attribute.Int64Value(uncompressedByteSize), | ||||
| 			}, | ||||
| 			label.KeyValue{ | ||||
| 			attribute.KeyValue{ | ||||
| 				Key:   compressedKey, | ||||
| 				Value: label.Int64Value(compressedByteSize), | ||||
| 				Value: attribute.Int64Value(compressedByteSize), | ||||
| 			}), | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -20,9 +20,9 @@ import ( | ||||
|  | ||||
| 	octrace "go.opencensus.io/trace" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/bridge/opencensus/utils" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/oteltest" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
| @@ -218,16 +218,16 @@ func TestSetThings(t *testing.T) { | ||||
| 		t.Errorf("Got code %v, expected foo", s.StatusMessage()) | ||||
| 	} | ||||
|  | ||||
| 	if v := s.Attributes()[label.Key("bool")]; !v.AsBool() { | ||||
| 	if v := s.Attributes()[attribute.Key("bool")]; !v.AsBool() { | ||||
| 		t.Errorf("Got attributes[bool] %v, expected true", v.AsBool()) | ||||
| 	} | ||||
| 	if v := s.Attributes()[label.Key("int64")]; v.AsInt64() != 12345 { | ||||
| 	if v := s.Attributes()[attribute.Key("int64")]; v.AsInt64() != 12345 { | ||||
| 		t.Errorf("Got attributes[int64] %v, expected 12345", v.AsInt64()) | ||||
| 	} | ||||
| 	if v := s.Attributes()[label.Key("float64")]; v.AsFloat64() != 12.345 { | ||||
| 	if v := s.Attributes()[attribute.Key("float64")]; v.AsFloat64() != 12.345 { | ||||
| 		t.Errorf("Got attributes[float64] %v, expected 12.345", v.AsFloat64()) | ||||
| 	} | ||||
| 	if v := s.Attributes()[label.Key("string")]; v.AsString() != "stringval" { | ||||
| 	if v := s.Attributes()[attribute.Key("string")]; v.AsString() != "stringval" { | ||||
| 		t.Errorf("Got attributes[string] %v, expected stringval", v.AsString()) | ||||
| 	} | ||||
|  | ||||
| @@ -238,22 +238,22 @@ func TestSetThings(t *testing.T) { | ||||
| 	annotatefEvent := s.Events()[1] | ||||
| 	sendEvent := s.Events()[2] | ||||
| 	receiveEvent := s.Events()[3] | ||||
| 	if v := annotateEvent.Attributes[label.Key("string")]; v.AsString() != "annotateval" { | ||||
| 	if v := annotateEvent.Attributes[attribute.Key("string")]; v.AsString() != "annotateval" { | ||||
| 		t.Errorf("Got annotateEvent.Attributes[string] = %v, expected annotateval", v.AsString()) | ||||
| 	} | ||||
| 	if annotateEvent.Name != "annotate" { | ||||
| 		t.Errorf("Got annotateEvent.Name = %v, expected annotate", annotateEvent.Name) | ||||
| 	} | ||||
| 	if v := annotatefEvent.Attributes[label.Key("int64")]; v.AsInt64() != 12345 { | ||||
| 	if v := annotatefEvent.Attributes[attribute.Key("int64")]; v.AsInt64() != 12345 { | ||||
| 		t.Errorf("Got annotatefEvent.Attributes[int64] = %v, expected 12345", v.AsInt64()) | ||||
| 	} | ||||
| 	if v := annotatefEvent.Attributes[label.Key("float64")]; v.AsFloat64() != 12.345 { | ||||
| 	if v := annotatefEvent.Attributes[attribute.Key("float64")]; v.AsFloat64() != 12.345 { | ||||
| 		t.Errorf("Got annotatefEvent.Attributes[float64] = %v, expected 12.345", v.AsFloat64()) | ||||
| 	} | ||||
| 	if annotatefEvent.Name != "annotate67890" { | ||||
| 		t.Errorf("Got annotatefEvent.Name = %v, expected annotate67890", annotatefEvent.Name) | ||||
| 	} | ||||
| 	if v := annotateEvent.Attributes[label.Key("string")]; v.AsString() != "annotateval" { | ||||
| 	if v := annotateEvent.Attributes[attribute.Key("string")]; v.AsString() != "annotateval" { | ||||
| 		t.Errorf("Got annotateEvent.Attributes[string] = %v, expected annotateval", v.AsString()) | ||||
| 	} | ||||
| 	if sendEvent.Name != "message send" { | ||||
|   | ||||
| @@ -26,12 +26,12 @@ import ( | ||||
| 	otlog "github.com/opentracing/opentracing-go/log" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/bridge/opentracing/migration" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/internal/baggage" | ||||
| 	"go.opentelemetry.io/otel/internal/trace/noop" | ||||
| 	otelparent "go.opentelemetry.io/otel/internal/trace/parent" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/propagation" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
| @@ -58,19 +58,19 @@ func newBridgeSpanContext(otelSpanContext trace.SpanContext, parentOtSpanContext | ||||
| } | ||||
|  | ||||
| func (c *bridgeSpanContext) ForeachBaggageItem(handler func(k, v string) bool) { | ||||
| 	c.baggageItems.Foreach(func(kv label.KeyValue) bool { | ||||
| 	c.baggageItems.Foreach(func(kv attribute.KeyValue) bool { | ||||
| 		return handler(string(kv.Key), kv.Value.Emit()) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (c *bridgeSpanContext) setBaggageItem(restrictedKey, value string) { | ||||
| 	crk := http.CanonicalHeaderKey(restrictedKey) | ||||
| 	c.baggageItems = c.baggageItems.Apply(baggage.MapUpdate{SingleKV: label.String(crk, value)}) | ||||
| 	c.baggageItems = c.baggageItems.Apply(baggage.MapUpdate{SingleKV: attribute.String(crk, value)}) | ||||
| } | ||||
|  | ||||
| func (c *bridgeSpanContext) baggageItem(restrictedKey string) string { | ||||
| 	crk := http.CanonicalHeaderKey(restrictedKey) | ||||
| 	val, _ := c.baggageItems.Value(label.Key(crk)) | ||||
| 	val, _ := c.baggageItems.Value(attribute.Key(crk)) | ||||
| 	return val.Emit() | ||||
| } | ||||
|  | ||||
| @@ -161,7 +161,7 @@ func (s *bridgeSpan) LogFields(fields ...otlog.Field) { | ||||
| } | ||||
|  | ||||
| type bridgeFieldEncoder struct { | ||||
| 	pairs []label.KeyValue | ||||
| 	pairs []attribute.KeyValue | ||||
| } | ||||
|  | ||||
| var _ otlog.Encoder = &bridgeFieldEncoder{} | ||||
| @@ -214,7 +214,7 @@ func (e *bridgeFieldEncoder) emitCommon(key string, value interface{}) { | ||||
| 	e.pairs = append(e.pairs, otTagToOTelLabel(key, value)) | ||||
| } | ||||
|  | ||||
| func otLogFieldsToOTelLabels(fields []otlog.Field) []label.KeyValue { | ||||
| func otLogFieldsToOTelLabels(fields []otlog.Field) []attribute.KeyValue { | ||||
| 	encoder := &bridgeFieldEncoder{} | ||||
| 	for _, field := range fields { | ||||
| 		field.Marshal(encoder) | ||||
| @@ -363,7 +363,7 @@ func (t *BridgeTracer) baggageSetHook(ctx context.Context) context.Context { | ||||
| 	// context, so we don't care about the old hooks. | ||||
| 	clearCtx, _, _ := baggage.ContextWithNoHooks(ctx) | ||||
| 	m := baggage.MapFromContext(clearCtx) | ||||
| 	m.Foreach(func(kv label.KeyValue) bool { | ||||
| 	m.Foreach(func(kv attribute.KeyValue) bool { | ||||
| 		bSpan.setBaggageItemOnly(string(kv.Key), kv.Value.Emit()) | ||||
| 		return true | ||||
| 	}) | ||||
| @@ -385,9 +385,9 @@ func (t *BridgeTracer) baggageGetHook(ctx context.Context, m baggage.Map) baggag | ||||
| 	if len(items) == 0 { | ||||
| 		return m | ||||
| 	} | ||||
| 	kv := make([]label.KeyValue, 0, len(items)) | ||||
| 	kv := make([]attribute.KeyValue, 0, len(items)) | ||||
| 	for k, v := range items { | ||||
| 		kv = append(kv, label.String(k, v)) | ||||
| 		kv = append(kv, attribute.String(k, v)) | ||||
| 	} | ||||
| 	return m.Apply(baggage.MapUpdate{MultiKV: kv}) | ||||
| } | ||||
| @@ -474,10 +474,10 @@ func (t *BridgeTracer) ContextWithSpanHook(ctx context.Context, span ot.Span) co | ||||
| 	return ctx | ||||
| } | ||||
|  | ||||
| func otTagsToOTelAttributesKindAndError(tags map[string]interface{}) ([]label.KeyValue, trace.SpanKind, bool) { | ||||
| func otTagsToOTelAttributesKindAndError(tags map[string]interface{}) ([]attribute.KeyValue, trace.SpanKind, bool) { | ||||
| 	kind := trace.SpanKindInternal | ||||
| 	err := false | ||||
| 	var pairs []label.KeyValue | ||||
| 	var pairs []attribute.KeyValue | ||||
| 	for k, v := range tags { | ||||
| 		switch k { | ||||
| 		case string(otext.SpanKind): | ||||
| @@ -504,7 +504,7 @@ func otTagsToOTelAttributesKindAndError(tags map[string]interface{}) ([]label.Ke | ||||
| 	return pairs, kind, err | ||||
| } | ||||
|  | ||||
| // otTagToOTelLabel converts given key-value into label.KeyValue. | ||||
| // otTagToOTelLabel converts given key-value into attribute.KeyValue. | ||||
| // Note that some conversions are not obvious: | ||||
| // - int -> int64 | ||||
| // - uint -> string | ||||
| @@ -512,7 +512,7 @@ func otTagsToOTelAttributesKindAndError(tags map[string]interface{}) ([]label.Ke | ||||
| // - uint32 -> int64 | ||||
| // - uint64 -> string | ||||
| // - float32 -> float64 | ||||
| func otTagToOTelLabel(k string, v interface{}) label.KeyValue { | ||||
| func otTagToOTelLabel(k string, v interface{}) attribute.KeyValue { | ||||
| 	key := otTagToOTelLabelKey(k) | ||||
| 	switch val := v.(type) { | ||||
| 	case bool: | ||||
| @@ -540,8 +540,8 @@ func otTagToOTelLabel(k string, v interface{}) label.KeyValue { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func otTagToOTelLabelKey(k string) label.Key { | ||||
| 	return label.Key(k) | ||||
| func otTagToOTelLabelKey(k string) attribute.Key { | ||||
| 	return attribute.Key(k) | ||||
| } | ||||
|  | ||||
| func otSpanReferencesToParentAndLinks(references []ot.SpanReference) (*bridgeSpanContext, []trace.Link) { | ||||
| @@ -580,9 +580,9 @@ func otSpanReferenceToOTelLink(bridgeSC *bridgeSpanContext, refType ot.SpanRefer | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func otSpanReferenceTypeToOTelLinkAttributes(refType ot.SpanReferenceType) []label.KeyValue { | ||||
| 	return []label.KeyValue{ | ||||
| 		label.String("ot-span-reference-type", otSpanReferenceTypeToString(refType)), | ||||
| func otSpanReferenceTypeToOTelLinkAttributes(refType ot.SpanReferenceType) []attribute.KeyValue { | ||||
| 	return []attribute.KeyValue{ | ||||
| 		attribute.String("ot-span-reference-type", otSpanReferenceTypeToString(refType)), | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -21,22 +21,22 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/internal/baggage" | ||||
| 	otelparent "go.opentelemetry.io/otel/internal/trace/parent" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/bridge/opentracing/migration" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	ComponentKey     = label.Key("component") | ||||
| 	ServiceKey       = label.Key("service") | ||||
| 	StatusCodeKey    = label.Key("status.code") | ||||
| 	StatusMessageKey = label.Key("status.message") | ||||
| 	ErrorKey         = label.Key("error") | ||||
| 	NameKey          = label.Key("name") | ||||
| 	ComponentKey     = attribute.Key("component") | ||||
| 	ServiceKey       = attribute.Key("service") | ||||
| 	StatusCodeKey    = attribute.Key("status.code") | ||||
| 	StatusMessageKey = attribute.Key("status.message") | ||||
| 	ErrorKey         = attribute.Key("error") | ||||
| 	NameKey          = attribute.Key("name") | ||||
| ) | ||||
|  | ||||
| type MockContextKeyValue struct { | ||||
| @@ -221,7 +221,7 @@ func (s *MockSpan) SetError(v bool) { | ||||
| 	s.SetAttributes(ErrorKey.Bool(v)) | ||||
| } | ||||
|  | ||||
| func (s *MockSpan) SetAttributes(attributes ...label.KeyValue) { | ||||
| func (s *MockSpan) SetAttributes(attributes ...attribute.KeyValue) { | ||||
| 	s.applyUpdate(baggage.MapUpdate{ | ||||
| 		MultiKV: attributes, | ||||
| 	}) | ||||
| @@ -255,8 +255,8 @@ func (s *MockSpan) RecordError(err error, opts ...trace.EventOption) { | ||||
|  | ||||
| 	s.SetStatus(codes.Error, "") | ||||
| 	opts = append(opts, trace.WithAttributes( | ||||
| 		label.String("error.type", reflect.TypeOf(err).String()), | ||||
| 		label.String("error.message", err.Error()), | ||||
| 		attribute.String("error.type", reflect.TypeOf(err).String()), | ||||
| 		attribute.String("error.message", err.Error()), | ||||
| 	)) | ||||
| 	s.AddEvent("error", opts...) | ||||
| } | ||||
|   | ||||
| @@ -22,8 +22,8 @@ import ( | ||||
| 	ot "github.com/opentracing/opentracing-go" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	otelbaggage "go.opentelemetry.io/otel/internal/baggage" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/bridge/opentracing/internal" | ||||
| @@ -589,7 +589,7 @@ func (bio *baggageInteroperationTest) addAndRecordBaggage(t *testing.T, ctx cont | ||||
| 	value := bio.baggageItems[idx].value | ||||
|  | ||||
| 	otSpan.SetBaggageItem(otKey, value) | ||||
| 	ctx = otelbaggage.NewContext(ctx, label.String(otelKey, value)) | ||||
| 	ctx = otelbaggage.NewContext(ctx, attribute.String(otelKey, value)) | ||||
|  | ||||
| 	otRecording := make(map[string]string) | ||||
| 	otSpan.Context().ForeachBaggageItem(func(key, value string) bool { | ||||
| @@ -597,7 +597,7 @@ func (bio *baggageInteroperationTest) addAndRecordBaggage(t *testing.T, ctx cont | ||||
| 		return true | ||||
| 	}) | ||||
| 	otelRecording := make(map[string]string) | ||||
| 	otelbaggage.MapFromContext(ctx).Foreach(func(kv label.KeyValue) bool { | ||||
| 	otelbaggage.MapFromContext(ctx).Foreach(func(kv attribute.KeyValue) bool { | ||||
| 		otelRecording[string(kv.Key)] = kv.Value.Emit() | ||||
| 		return true | ||||
| 	}) | ||||
| @@ -721,62 +721,62 @@ func TestOtTagToOTelLabel_CheckTypeConversions(t *testing.T) { | ||||
| 	tableTest := []struct { | ||||
| 		key               string | ||||
| 		value             interface{} | ||||
| 		expectedValueType label.Type | ||||
| 		expectedValueType attribute.Type | ||||
| 	}{ | ||||
| 		{ | ||||
| 			key:               "bool to bool", | ||||
| 			value:             true, | ||||
| 			expectedValueType: label.BOOL, | ||||
| 			expectedValueType: attribute.BOOL, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "int to int64", | ||||
| 			value:             123, | ||||
| 			expectedValueType: label.INT64, | ||||
| 			expectedValueType: attribute.INT64, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "uint to string", | ||||
| 			value:             uint(1234), | ||||
| 			expectedValueType: label.STRING, | ||||
| 			expectedValueType: attribute.STRING, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "int32 to int64", | ||||
| 			value:             int32(12345), | ||||
| 			expectedValueType: label.INT64, | ||||
| 			expectedValueType: attribute.INT64, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "uint32 to int64", | ||||
| 			value:             uint32(123456), | ||||
| 			expectedValueType: label.INT64, | ||||
| 			expectedValueType: attribute.INT64, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "int64 to int64", | ||||
| 			value:             int64(1234567), | ||||
| 			expectedValueType: label.INT64, | ||||
| 			expectedValueType: attribute.INT64, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "uint64 to string", | ||||
| 			value:             uint64(12345678), | ||||
| 			expectedValueType: label.STRING, | ||||
| 			expectedValueType: attribute.STRING, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "float32 to float64", | ||||
| 			value:             float32(3.14), | ||||
| 			expectedValueType: label.FLOAT64, | ||||
| 			expectedValueType: attribute.FLOAT64, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "float64 to float64", | ||||
| 			value:             float64(3.14), | ||||
| 			expectedValueType: label.FLOAT64, | ||||
| 			expectedValueType: attribute.FLOAT64, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "string to string", | ||||
| 			value:             "string_value", | ||||
| 			expectedValueType: label.STRING, | ||||
| 			expectedValueType: attribute.STRING, | ||||
| 		}, | ||||
| 		{ | ||||
| 			key:               "unexpected type to string", | ||||
| 			value:             struct{}{}, | ||||
| 			expectedValueType: label.STRING, | ||||
| 			expectedValueType: attribute.STRING, | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -21,8 +21,8 @@ import ( | ||||
| 	"log" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/trace/jaeger" | ||||
| 	sdktrace "go.opentelemetry.io/otel/sdk/trace" | ||||
| ) | ||||
| @@ -34,9 +34,9 @@ func initTracer() func() { | ||||
| 		jaeger.WithCollectorEndpoint("http://localhost:14268/api/traces"), | ||||
| 		jaeger.WithProcess(jaeger.Process{ | ||||
| 			ServiceName: "trace-demo", | ||||
| 			Tags: []label.KeyValue{ | ||||
| 				label.String("exporter", "jaeger"), | ||||
| 				label.Float64("float", 312.23), | ||||
| 			Tags: []attribute.KeyValue{ | ||||
| 				attribute.String("exporter", "jaeger"), | ||||
| 				attribute.Float64("float", 312.23), | ||||
| 			}, | ||||
| 		}), | ||||
| 		jaeger.WithSDK(&sdktrace.Config{DefaultSampler: sdktrace.AlwaysSample()}), | ||||
|   | ||||
| @@ -18,12 +18,12 @@ import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	lemonsKey = label.Key("ex.com/lemons") | ||||
| 	lemonsKey = attribute.Key("ex.com/lemons") | ||||
| ) | ||||
|  | ||||
| // SubOperation is an example to demonstrate the use of named tracer. | ||||
|   | ||||
| @@ -19,18 +19,18 @@ import ( | ||||
| 	"log" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/baggage" | ||||
| 	"go.opentelemetry.io/otel/example/namedtracer/foo" | ||||
| 	"go.opentelemetry.io/otel/exporters/stdout" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	sdktrace "go.opentelemetry.io/otel/sdk/trace" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	fooKey     = label.Key("ex.com/foo") | ||||
| 	barKey     = label.Key("ex.com/bar") | ||||
| 	anotherKey = label.Key("ex.com/another") | ||||
| 	fooKey     = attribute.Key("ex.com/foo") | ||||
| 	barKey     = attribute.Key("ex.com/bar") | ||||
| 	anotherKey = attribute.Key("ex.com/another") | ||||
| ) | ||||
|  | ||||
| var tp *sdktrace.TracerProvider | ||||
| @@ -68,7 +68,7 @@ func main() { | ||||
| 	var span trace.Span | ||||
| 	ctx, span = tracer.Start(ctx, "operation") | ||||
| 	defer span.End() | ||||
| 	span.AddEvent("Nice operation!", trace.WithAttributes(label.Int("bogons", 100))) | ||||
| 	span.AddEvent("Nice operation!", trace.WithAttributes(attribute.Int("bogons", 100))) | ||||
| 	span.SetAttributes(anotherKey.String("yes")) | ||||
| 	if err := foo.SubOperation(ctx); err != nil { | ||||
| 		panic(err) | ||||
|   | ||||
| @@ -26,9 +26,9 @@ import ( | ||||
| 	"google.golang.org/grpc" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp/otlpgrpc" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/global" | ||||
| 	"go.opentelemetry.io/otel/propagation" | ||||
| @@ -109,10 +109,10 @@ func main() { | ||||
|  | ||||
| 	// labels represent additional key-value descriptors that can be bound to a | ||||
| 	// metric observer or recorder. | ||||
| 	commonLabels := []label.KeyValue{ | ||||
| 		label.String("labelA", "chocolate"), | ||||
| 		label.String("labelB", "raspberry"), | ||||
| 		label.String("labelC", "vanilla"), | ||||
| 	commonLabels := []attribute.KeyValue{ | ||||
| 		attribute.String("labelA", "chocolate"), | ||||
| 		attribute.String("labelB", "raspberry"), | ||||
| 		attribute.String("labelC", "vanilla"), | ||||
| 	} | ||||
|  | ||||
| 	// Recorder metric example | ||||
|   | ||||
| @@ -23,10 +23,10 @@ import ( | ||||
|  | ||||
| 	"google.golang.org/grpc" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/metric/prometheus" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp/otlpgrpc" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/global" | ||||
| 	"go.opentelemetry.io/otel/sdk/metric/aggregator/histogram" | ||||
| @@ -41,7 +41,7 @@ func initMeter() { | ||||
|  | ||||
| 	res, err := resource.New( | ||||
| 		ctx, | ||||
| 		resource.WithAttributes(label.String("R", "V")), | ||||
| 		resource.WithAttributes(attribute.String("R", "V")), | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		log.Fatal("could not initialize resource:", err) | ||||
| @@ -94,8 +94,8 @@ func initMeter() { | ||||
| func main() { | ||||
| 	initMeter() | ||||
|  | ||||
| 	labels := []label.KeyValue{ | ||||
| 		label.String("label1", "value1"), | ||||
| 	labels := []attribute.KeyValue{ | ||||
| 		attribute.String("label1", "value1"), | ||||
| 	} | ||||
|  | ||||
| 	meter := global.Meter("ex.com/prom-collector") | ||||
|   | ||||
| @@ -22,14 +22,14 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/metric/prometheus" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/global" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	lemonsKey = label.Key("ex.com/lemons") | ||||
| 	lemonsKey = attribute.Key("ex.com/lemons") | ||||
| ) | ||||
|  | ||||
| func initMeter() { | ||||
| @@ -51,7 +51,7 @@ func main() { | ||||
| 	meter := global.Meter("ex.com/basic") | ||||
| 	observerLock := new(sync.RWMutex) | ||||
| 	observerValueToReport := new(float64) | ||||
| 	observerLabelsToReport := new([]label.KeyValue) | ||||
| 	observerLabelsToReport := new([]attribute.KeyValue) | ||||
| 	cb := func(_ context.Context, result metric.Float64ObserverResult) { | ||||
| 		(*observerLock).RLock() | ||||
| 		value := *observerValueToReport | ||||
| @@ -66,8 +66,8 @@ func main() { | ||||
| 	valuerecorder := metric.Must(meter).NewFloat64ValueRecorder("ex.com.two") | ||||
| 	counter := metric.Must(meter).NewFloat64Counter("ex.com.three") | ||||
|  | ||||
| 	commonLabels := []label.KeyValue{lemonsKey.Int(10), label.String("A", "1"), label.String("B", "2"), label.String("C", "3")} | ||||
| 	notSoCommonLabels := []label.KeyValue{lemonsKey.Int(13)} | ||||
| 	commonLabels := []attribute.KeyValue{lemonsKey.Int(10), attribute.String("A", "1"), attribute.String("B", "2"), attribute.String("C", "3")} | ||||
| 	notSoCommonLabels := []attribute.KeyValue{lemonsKey.Int(13)} | ||||
|  | ||||
| 	ctx := context.Background() | ||||
|  | ||||
|   | ||||
| @@ -22,8 +22,8 @@ import ( | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/metric/prometheus" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	controller "go.opentelemetry.io/otel/sdk/metric/controller/basic" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| @@ -41,7 +41,7 @@ func ExampleNewExportPipeline() { | ||||
| 	res, err := resource.New( | ||||
| 		context.Background(), | ||||
| 		resource.WithoutBuiltin(), // Test-only! | ||||
| 		resource.WithAttributes(label.String("R", "V")), | ||||
| 		resource.WithAttributes(attribute.String("R", "V")), | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| @@ -68,8 +68,8 @@ func ExampleNewExportPipeline() { | ||||
| 		metric.WithDescription("Records values"), | ||||
| 	) | ||||
|  | ||||
| 	counter.Add(ctx, 100, label.String("key", "value")) | ||||
| 	recorder.Record(ctx, 100, label.String("key", "value")) | ||||
| 	counter.Add(ctx, 100, attribute.String("key", "value")) | ||||
| 	recorder.Record(ctx, 100, attribute.String("key", "value")) | ||||
|  | ||||
| 	// GET the HTTP endpoint | ||||
| 	var input bytes.Buffer | ||||
|   | ||||
| @@ -27,7 +27,7 @@ import ( | ||||
| 	"github.com/prometheus/client_golang/prometheus/promhttp" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/global" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| @@ -349,7 +349,7 @@ func mergeLabels(record export.Record, keys, values *[]string) { | ||||
|  | ||||
| 	// Duplicate keys are resolved by taking the record label value over | ||||
| 	// the resource value. | ||||
| 	mi := label.NewMergeIterator(record.Labels(), record.Resource().LabelSet()) | ||||
| 	mi := attribute.NewMergeIterator(record.Labels(), record.Resource().LabelSet()) | ||||
| 	for mi.Next() { | ||||
| 		label := mi.Label() | ||||
| 		if keys != nil { | ||||
|   | ||||
| @@ -26,8 +26,8 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/metric/prometheus" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	controller "go.opentelemetry.io/otel/sdk/metric/controller/basic" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| @@ -43,7 +43,7 @@ func TestPrometheusExporter(t *testing.T) { | ||||
| 			DefaultHistogramBoundaries: []float64{-0.5, 1}, | ||||
| 		}, | ||||
| 		controller.WithCollectPeriod(0), | ||||
| 		controller.WithResource(resource.NewWithAttributes(label.String("R", "V"))), | ||||
| 		controller.WithResource(resource.NewWithAttributes(attribute.String("R", "V"))), | ||||
| 	) | ||||
| 	require.NoError(t, err) | ||||
|  | ||||
| @@ -52,9 +52,9 @@ func TestPrometheusExporter(t *testing.T) { | ||||
| 	counter := metric.Must(meter).NewFloat64Counter("counter") | ||||
| 	valuerecorder := metric.Must(meter).NewFloat64ValueRecorder("valuerecorder") | ||||
|  | ||||
| 	labels := []label.KeyValue{ | ||||
| 		label.Key("A").String("B"), | ||||
| 		label.Key("C").String("D"), | ||||
| 	labels := []attribute.KeyValue{ | ||||
| 		attribute.Key("A").String("B"), | ||||
| 		attribute.Key("C").String("D"), | ||||
| 	} | ||||
| 	ctx := context.Background() | ||||
|  | ||||
| @@ -144,14 +144,14 @@ func TestPrometheusStatefulness(t *testing.T) { | ||||
| 		metric.WithDescription("Counts things"), | ||||
| 	) | ||||
|  | ||||
| 	counter.Add(ctx, 100, label.String("key", "value")) | ||||
| 	counter.Add(ctx, 100, attribute.String("key", "value")) | ||||
|  | ||||
| 	require.Equal(t, `# HELP a_counter Counts things | ||||
| # TYPE a_counter counter | ||||
| a_counter{key="value"} 100 | ||||
| `, scrape()) | ||||
|  | ||||
| 	counter.Add(ctx, 100, label.String("key", "value")) | ||||
| 	counter.Add(ctx, 100, attribute.String("key", "value")) | ||||
|  | ||||
| 	require.Equal(t, `# HELP a_counter Counts things | ||||
| # TYPE a_counter counter | ||||
|   | ||||
| @@ -19,8 +19,8 @@ import ( | ||||
| 	"fmt" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	exportmetric "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -66,14 +66,14 @@ func (OneRecordCheckpointSet) ForEach(kindSelector exportmetric.ExportKindSelect | ||||
| 		metric.CounterInstrumentKind, | ||||
| 		number.Int64Kind, | ||||
| 	) | ||||
| 	res := resource.NewWithAttributes(label.String("a", "b")) | ||||
| 	res := resource.NewWithAttributes(attribute.String("a", "b")) | ||||
| 	agg := sum.New(1) | ||||
| 	if err := agg[0].Update(context.Background(), number.NewInt64Number(42), &desc); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	start := time.Date(2020, time.December, 8, 19, 15, 0, 0, time.UTC) | ||||
| 	end := time.Date(2020, time.December, 8, 19, 16, 0, 0, time.UTC) | ||||
| 	labels := label.NewSet(label.String("abc", "def"), label.Int64("one", 1)) | ||||
| 	labels := attribute.NewSet(attribute.String("abc", "def"), attribute.Int64("one", 1)) | ||||
| 	rec := exportmetric.NewRecord(&desc, &labels, res, agg[0].Aggregation(), start, end) | ||||
| 	return recordFunc(rec) | ||||
| } | ||||
| @@ -92,7 +92,7 @@ func SingleSpanSnapshot() []*exporttrace.SpanSnapshot { | ||||
| 		Name:                     "foo", | ||||
| 		StartTime:                time.Date(2020, time.December, 8, 20, 23, 0, 0, time.UTC), | ||||
| 		EndTime:                  time.Date(2020, time.December, 0, 20, 24, 0, 0, time.UTC), | ||||
| 		Attributes:               []label.KeyValue{}, | ||||
| 		Attributes:               []attribute.KeyValue{}, | ||||
| 		MessageEvents:            []trace.Event{}, | ||||
| 		Links:                    []trace.Link{}, | ||||
| 		StatusCode:               codes.Ok, | ||||
| @@ -102,7 +102,7 @@ func SingleSpanSnapshot() []*exporttrace.SpanSnapshot { | ||||
| 		DroppedMessageEventCount: 0, | ||||
| 		DroppedLinkCount:         0, | ||||
| 		ChildSpanCount:           0, | ||||
| 		Resource:                 resource.NewWithAttributes(label.String("a", "b")), | ||||
| 		Resource:                 resource.NewWithAttributes(attribute.String("a", "b")), | ||||
| 		InstrumentationLibrary: instrumentation.Library{ | ||||
| 			Name:    "bar", | ||||
| 			Version: "0.0.0", | ||||
|   | ||||
| @@ -23,9 +23,9 @@ import ( | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp" | ||||
| 	commonpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/common/v1" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	exportmetric "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -50,14 +50,14 @@ func RunEndToEndTest(ctx context.Context, t *testing.T, exp *otlp.Exporter, mcTr | ||||
| 	} | ||||
| 	tp1 := sdktrace.NewTracerProvider(append(pOpts, | ||||
| 		sdktrace.WithResource(resource.NewWithAttributes( | ||||
| 			label.String("rk1", "rv11)"), | ||||
| 			label.Int64("rk2", 5), | ||||
| 			attribute.String("rk1", "rv11)"), | ||||
| 			attribute.Int64("rk2", 5), | ||||
| 		)))...) | ||||
|  | ||||
| 	tp2 := sdktrace.NewTracerProvider(append(pOpts, | ||||
| 		sdktrace.WithResource(resource.NewWithAttributes( | ||||
| 			label.String("rk1", "rv12)"), | ||||
| 			label.Float64("rk3", 6.5), | ||||
| 			attribute.String("rk1", "rv12)"), | ||||
| 			attribute.Float64("rk3", 6.5), | ||||
| 		)))...) | ||||
|  | ||||
| 	tr1 := tp1.Tracer("test-tracer1") | ||||
| @@ -66,11 +66,11 @@ func RunEndToEndTest(ctx context.Context, t *testing.T, exp *otlp.Exporter, mcTr | ||||
| 	m := 4 | ||||
| 	for i := 0; i < m; i++ { | ||||
| 		_, span := tr1.Start(ctx, "AlwaysSample") | ||||
| 		span.SetAttributes(label.Int64("i", int64(i))) | ||||
| 		span.SetAttributes(attribute.Int64("i", int64(i))) | ||||
| 		span.End() | ||||
|  | ||||
| 		_, span = tr2.Start(ctx, "AlwaysSample") | ||||
| 		span.SetAttributes(label.Int64("i", int64(i))) | ||||
| 		span.SetAttributes(attribute.Int64("i", int64(i))) | ||||
| 		span.End() | ||||
| 	} | ||||
|  | ||||
| @@ -80,7 +80,7 @@ func RunEndToEndTest(ctx context.Context, t *testing.T, exp *otlp.Exporter, mcTr | ||||
| 	require.NoError(t, cont.Start(ctx)) | ||||
|  | ||||
| 	meter := cont.MeterProvider().Meter("test-meter") | ||||
| 	labels := []label.KeyValue{label.Bool("test", true)} | ||||
| 	labels := []attribute.KeyValue{attribute.Bool("test", true)} | ||||
|  | ||||
| 	type data struct { | ||||
| 		iKind metric.InstrumentKind | ||||
|   | ||||
| @@ -17,14 +17,14 @@ package transform | ||||
| import ( | ||||
| 	"reflect" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	commonpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/common/v1" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| ) | ||||
|  | ||||
| // Attributes transforms a slice of KeyValues into a slice of OTLP attribute key-values. | ||||
| func Attributes(attrs []label.KeyValue) []*commonpb.KeyValue { | ||||
| func Attributes(attrs []attribute.KeyValue) []*commonpb.KeyValue { | ||||
| 	if len(attrs) == 0 { | ||||
| 		return nil | ||||
| 	} | ||||
| @@ -50,29 +50,29 @@ func ResourceAttributes(resource *resource.Resource) []*commonpb.KeyValue { | ||||
| 	return out | ||||
| } | ||||
|  | ||||
| func toAttribute(v label.KeyValue) *commonpb.KeyValue { | ||||
| func toAttribute(v attribute.KeyValue) *commonpb.KeyValue { | ||||
| 	result := &commonpb.KeyValue{ | ||||
| 		Key:   string(v.Key), | ||||
| 		Value: new(commonpb.AnyValue), | ||||
| 	} | ||||
| 	switch v.Value.Type() { | ||||
| 	case label.BOOL: | ||||
| 	case attribute.BOOL: | ||||
| 		result.Value.Value = &commonpb.AnyValue_BoolValue{ | ||||
| 			BoolValue: v.Value.AsBool(), | ||||
| 		} | ||||
| 	case label.INT64: | ||||
| 	case attribute.INT64: | ||||
| 		result.Value.Value = &commonpb.AnyValue_IntValue{ | ||||
| 			IntValue: v.Value.AsInt64(), | ||||
| 		} | ||||
| 	case label.FLOAT64: | ||||
| 	case attribute.FLOAT64: | ||||
| 		result.Value.Value = &commonpb.AnyValue_DoubleValue{ | ||||
| 			DoubleValue: v.Value.AsFloat64(), | ||||
| 		} | ||||
| 	case label.STRING: | ||||
| 	case attribute.STRING: | ||||
| 		result.Value.Value = &commonpb.AnyValue_StringValue{ | ||||
| 			StringValue: v.Value.AsString(), | ||||
| 		} | ||||
| 	case label.ARRAY: | ||||
| 	case attribute.ARRAY: | ||||
| 		result.Value.Value = &commonpb.AnyValue_ArrayValue{ | ||||
| 			ArrayValue: &commonpb.ArrayValue{ | ||||
| 				Values: arrayValues(v), | ||||
| @@ -86,7 +86,7 @@ func toAttribute(v label.KeyValue) *commonpb.KeyValue { | ||||
| 	return result | ||||
| } | ||||
|  | ||||
| func arrayValues(kv label.KeyValue) []*commonpb.AnyValue { | ||||
| func arrayValues(kv attribute.KeyValue) []*commonpb.AnyValue { | ||||
| 	a := kv.Value.AsArray() | ||||
| 	aType := reflect.TypeOf(a) | ||||
| 	var valueFunc func(reflect.Value) *commonpb.AnyValue | ||||
|   | ||||
| @@ -19,12 +19,12 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	commonpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/common/v1" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| ) | ||||
|  | ||||
| type attributeTest struct { | ||||
| 	attrs    []label.KeyValue | ||||
| 	attrs    []attribute.KeyValue | ||||
| 	expected []*commonpb.KeyValue | ||||
| } | ||||
|  | ||||
| @@ -32,12 +32,12 @@ func TestAttributes(t *testing.T) { | ||||
| 	for _, test := range []attributeTest{ | ||||
| 		{nil, nil}, | ||||
| 		{ | ||||
| 			[]label.KeyValue{ | ||||
| 				label.Int("int to int", 123), | ||||
| 				label.Int64("int64 to int64", 1234567), | ||||
| 				label.Float64("float64 to double", 1.61), | ||||
| 				label.String("string to string", "string"), | ||||
| 				label.Bool("bool to bool", true), | ||||
| 			[]attribute.KeyValue{ | ||||
| 				attribute.Int("int to int", 123), | ||||
| 				attribute.Int64("int64 to int64", 1234567), | ||||
| 				attribute.Float64("float64 to double", 1.61), | ||||
| 				attribute.String("string to string", "string"), | ||||
| 				attribute.Bool("bool to bool", true), | ||||
| 			}, | ||||
| 			[]*commonpb.KeyValue{ | ||||
| 				{ | ||||
| @@ -111,8 +111,8 @@ func TestArrayAttributes(t *testing.T) { | ||||
| 	for _, test := range []attributeTest{ | ||||
| 		{nil, nil}, | ||||
| 		{ | ||||
| 			[]label.KeyValue{ | ||||
| 				label.Array("invalid", [][]string{{"1", "2"}, {"a"}}), | ||||
| 			[]attribute.KeyValue{ | ||||
| 				attribute.Array("invalid", [][]string{{"1", "2"}, {"a"}}), | ||||
| 			}, | ||||
| 			[]*commonpb.KeyValue{ | ||||
| 				{ | ||||
| @@ -126,12 +126,12 @@ func TestArrayAttributes(t *testing.T) { | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			[]label.KeyValue{ | ||||
| 				label.Array("bool array to bool array", []bool{true, false}), | ||||
| 				label.Array("int array to int64 array", []int{1, 2, 3}), | ||||
| 				label.Array("int64 array to int64 array", []int64{1, 2, 3}), | ||||
| 				label.Array("float64 array to double array", []float64{1.11, 2.22, 3.33}), | ||||
| 				label.Array("string array to string array", []string{"foo", "bar", "baz"}), | ||||
| 			[]attribute.KeyValue{ | ||||
| 				attribute.Array("bool array to bool array", []bool{true, false}), | ||||
| 				attribute.Array("int array to int64 array", []int{1, 2, 3}), | ||||
| 				attribute.Array("int64 array to int64 array", []int64{1, 2, 3}), | ||||
| 				attribute.Array("float64 array to double array", []float64{1.11, 2.22, 3.33}), | ||||
| 				attribute.Array("string array to string array", []string{"foo", "bar", "baz"}), | ||||
| 			}, | ||||
| 			[]*commonpb.KeyValue{ | ||||
| 				newOTelBoolArray("bool array to bool array", []bool{true, false}), | ||||
|   | ||||
| @@ -24,11 +24,11 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	commonpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/common/v1" | ||||
| 	metricpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/metrics/v1" | ||||
| 	resourcepb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/resource/v1" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| 	"go.opentelemetry.io/otel/sdk/export/metric/aggregation" | ||||
| @@ -170,7 +170,7 @@ func sink(ctx context.Context, in <-chan result) ([]*metricpb.ResourceMetrics, e | ||||
| 	} | ||||
|  | ||||
| 	// group by unique Resource string. | ||||
| 	grouped := make(map[label.Distinct]resourceBatch) | ||||
| 	grouped := make(map[attribute.Distinct]resourceBatch) | ||||
| 	for res := range in { | ||||
| 		if res.Err != nil { | ||||
| 			errStrings = append(errStrings, res.Err.Error()) | ||||
| @@ -611,7 +611,7 @@ func histogramPoint(record export.Record, ek export.ExportKind, a aggregation.Hi | ||||
| } | ||||
|  | ||||
| // stringKeyValues transforms a label iterator into an OTLP StringKeyValues. | ||||
| func stringKeyValues(iter label.Iterator) []*commonpb.StringKeyValue { | ||||
| func stringKeyValues(iter attribute.Iterator) []*commonpb.StringKeyValue { | ||||
| 	l := iter.Len() | ||||
| 	if l == 0 { | ||||
| 		return nil | ||||
|   | ||||
| @@ -24,9 +24,9 @@ import ( | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	commonpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/common/v1" | ||||
| 	metricpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/metrics/v1" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -55,7 +55,7 @@ const ( | ||||
|  | ||||
| func TestStringKeyValues(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		kvs      []label.KeyValue | ||||
| 		kvs      []attribute.KeyValue | ||||
| 		expected []*commonpb.StringKeyValue | ||||
| 	}{ | ||||
| 		{ | ||||
| @@ -63,21 +63,21 @@ func TestStringKeyValues(t *testing.T) { | ||||
| 			nil, | ||||
| 		}, | ||||
| 		{ | ||||
| 			[]label.KeyValue{}, | ||||
| 			[]attribute.KeyValue{}, | ||||
| 			nil, | ||||
| 		}, | ||||
| 		{ | ||||
| 			[]label.KeyValue{ | ||||
| 				label.Bool("true", true), | ||||
| 				label.Int64("one", 1), | ||||
| 				label.Int64("two", 2), | ||||
| 				label.Float64("three", 3), | ||||
| 				label.Int("four", 4), | ||||
| 				label.Int("five", 5), | ||||
| 				label.Float64("six", 6), | ||||
| 				label.Int("seven", 7), | ||||
| 				label.Int("eight", 8), | ||||
| 				label.String("the", "final word"), | ||||
| 			[]attribute.KeyValue{ | ||||
| 				attribute.Bool("true", true), | ||||
| 				attribute.Int64("one", 1), | ||||
| 				attribute.Int64("two", 2), | ||||
| 				attribute.Float64("three", 3), | ||||
| 				attribute.Int("four", 4), | ||||
| 				attribute.Int("five", 5), | ||||
| 				attribute.Float64("six", 6), | ||||
| 				attribute.Int("seven", 7), | ||||
| 				attribute.Int("eight", 8), | ||||
| 				attribute.String("the", "final word"), | ||||
| 			}, | ||||
| 			[]*commonpb.StringKeyValue{ | ||||
| 				{Key: "eight", Value: "8"}, | ||||
| @@ -95,7 +95,7 @@ func TestStringKeyValues(t *testing.T) { | ||||
| 	} | ||||
|  | ||||
| 	for _, test := range tests { | ||||
| 		labels := label.NewSet(test.kvs...) | ||||
| 		labels := attribute.NewSet(test.kvs...) | ||||
| 		assert.Equal(t, test.expected, stringKeyValues(labels.Iter())) | ||||
| 	} | ||||
| } | ||||
| @@ -123,7 +123,7 @@ func TestMinMaxSumCountValue(t *testing.T) { | ||||
|  | ||||
| func TestMinMaxSumCountDatapoints(t *testing.T) { | ||||
| 	desc := metric.NewDescriptor("", metric.ValueRecorderInstrumentKind, number.Int64Kind) | ||||
| 	labels := label.NewSet() | ||||
| 	labels := attribute.NewSet() | ||||
| 	mmsc, ckpt := metrictest.Unslice2(minmaxsumcount.New(2, &desc)) | ||||
|  | ||||
| 	assert.NoError(t, mmsc.Update(context.Background(), 1, &desc)) | ||||
| @@ -162,7 +162,7 @@ func TestMinMaxSumCountPropagatesErrors(t *testing.T) { | ||||
|  | ||||
| func TestSumIntDataPoints(t *testing.T) { | ||||
| 	desc := metric.NewDescriptor("", metric.ValueRecorderInstrumentKind, number.Int64Kind) | ||||
| 	labels := label.NewSet() | ||||
| 	labels := attribute.NewSet() | ||||
| 	s, ckpt := metrictest.Unslice2(sumAgg.New(2)) | ||||
| 	assert.NoError(t, s.Update(context.Background(), number.Number(1), &desc)) | ||||
| 	require.NoError(t, s.SynchronizedMove(ckpt, &desc)) | ||||
| @@ -190,7 +190,7 @@ func TestSumIntDataPoints(t *testing.T) { | ||||
|  | ||||
| func TestSumFloatDataPoints(t *testing.T) { | ||||
| 	desc := metric.NewDescriptor("", metric.ValueRecorderInstrumentKind, number.Float64Kind) | ||||
| 	labels := label.NewSet() | ||||
| 	labels := attribute.NewSet() | ||||
| 	s, ckpt := metrictest.Unslice2(sumAgg.New(2)) | ||||
| 	assert.NoError(t, s.Update(context.Background(), number.NewFloat64Number(1), &desc)) | ||||
| 	require.NoError(t, s.SynchronizedMove(ckpt, &desc)) | ||||
| @@ -219,7 +219,7 @@ func TestSumFloatDataPoints(t *testing.T) { | ||||
|  | ||||
| func TestLastValueIntDataPoints(t *testing.T) { | ||||
| 	desc := metric.NewDescriptor("", metric.ValueRecorderInstrumentKind, number.Int64Kind) | ||||
| 	labels := label.NewSet() | ||||
| 	labels := attribute.NewSet() | ||||
| 	s, ckpt := metrictest.Unslice2(lvAgg.New(2)) | ||||
| 	assert.NoError(t, s.Update(context.Background(), number.Number(100), &desc)) | ||||
| 	require.NoError(t, s.SynchronizedMove(ckpt, &desc)) | ||||
| @@ -245,7 +245,7 @@ func TestLastValueIntDataPoints(t *testing.T) { | ||||
|  | ||||
| func TestExactIntDataPoints(t *testing.T) { | ||||
| 	desc := metric.NewDescriptor("", metric.ValueRecorderInstrumentKind, number.Int64Kind) | ||||
| 	labels := label.NewSet() | ||||
| 	labels := attribute.NewSet() | ||||
| 	e, ckpt := metrictest.Unslice2(arrAgg.New(2)) | ||||
| 	assert.NoError(t, e.Update(context.Background(), number.Number(100), &desc)) | ||||
| 	require.NoError(t, e.SynchronizedMove(ckpt, &desc)) | ||||
| @@ -271,7 +271,7 @@ func TestExactIntDataPoints(t *testing.T) { | ||||
|  | ||||
| func TestExactFloatDataPoints(t *testing.T) { | ||||
| 	desc := metric.NewDescriptor("", metric.ValueRecorderInstrumentKind, number.Float64Kind) | ||||
| 	labels := label.NewSet() | ||||
| 	labels := attribute.NewSet() | ||||
| 	e, ckpt := metrictest.Unslice2(arrAgg.New(2)) | ||||
| 	assert.NoError(t, e.Update(context.Background(), number.NewFloat64Number(100), &desc)) | ||||
| 	require.NoError(t, e.SynchronizedMove(ckpt, &desc)) | ||||
| @@ -297,7 +297,7 @@ func TestExactFloatDataPoints(t *testing.T) { | ||||
|  | ||||
| func TestSumErrUnknownValueType(t *testing.T) { | ||||
| 	desc := metric.NewDescriptor("", metric.ValueRecorderInstrumentKind, number.Kind(-1)) | ||||
| 	labels := label.NewSet() | ||||
| 	labels := attribute.NewSet() | ||||
| 	s := &sumAgg.New(1)[0] | ||||
| 	record := export.NewRecord(&desc, &labels, nil, s, intervalStart, intervalEnd) | ||||
| 	value, err := s.Sum() | ||||
| @@ -382,7 +382,7 @@ var _ aggregation.MinMaxSumCount = &testErrMinMaxSumCount{} | ||||
| func TestRecordAggregatorIncompatibleErrors(t *testing.T) { | ||||
| 	makeMpb := func(kind aggregation.Kind, agg aggregation.Aggregation) (*metricpb.Metric, error) { | ||||
| 		desc := metric.NewDescriptor("things", metric.CounterInstrumentKind, number.Int64Kind) | ||||
| 		labels := label.NewSet() | ||||
| 		labels := attribute.NewSet() | ||||
| 		res := resource.Empty() | ||||
| 		test := &testAgg{ | ||||
| 			kind: kind, | ||||
| @@ -419,7 +419,7 @@ func TestRecordAggregatorIncompatibleErrors(t *testing.T) { | ||||
| func TestRecordAggregatorUnexpectedErrors(t *testing.T) { | ||||
| 	makeMpb := func(kind aggregation.Kind, agg aggregation.Aggregation) (*metricpb.Metric, error) { | ||||
| 		desc := metric.NewDescriptor("things", metric.CounterInstrumentKind, number.Int64Kind) | ||||
| 		labels := label.NewSet() | ||||
| 		labels := attribute.NewSet() | ||||
| 		res := resource.Empty() | ||||
| 		return Record(export.CumulativeExportKindSelector(), export.NewRecord(&desc, &labels, res, agg, intervalStart, intervalEnd)) | ||||
| 	} | ||||
|   | ||||
| @@ -19,7 +19,7 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| ) | ||||
|  | ||||
| @@ -38,7 +38,7 @@ func TestEmptyResource(t *testing.T) { | ||||
|  */ | ||||
|  | ||||
| func TestResourceAttributes(t *testing.T) { | ||||
| 	attrs := []label.KeyValue{label.Int("one", 1), label.Int("two", 2)} | ||||
| 	attrs := []attribute.KeyValue{attribute.Int("one", 1), attribute.Int("two", 2)} | ||||
|  | ||||
| 	got := Resource(resource.NewWithAttributes(attrs...)).GetAttributes() | ||||
| 	if !assert.Len(t, attrs, 2) { | ||||
|   | ||||
| @@ -15,10 +15,10 @@ | ||||
| package transform | ||||
|  | ||||
| import ( | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	tracepb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/trace/v1" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/trace" | ||||
| 	"go.opentelemetry.io/otel/sdk/instrumentation" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| @@ -35,10 +35,10 @@ func SpanData(sdl []*export.SpanSnapshot) []*tracepb.ResourceSpans { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	rsm := make(map[label.Distinct]*tracepb.ResourceSpans) | ||||
| 	rsm := make(map[attribute.Distinct]*tracepb.ResourceSpans) | ||||
|  | ||||
| 	type ilsKey struct { | ||||
| 		r  label.Distinct | ||||
| 		r  attribute.Distinct | ||||
| 		il instrumentation.Library | ||||
| 	} | ||||
| 	ilsm := make(map[ilsKey]*tracepb.InstrumentationLibrarySpans) | ||||
|   | ||||
| @@ -24,8 +24,8 @@ import ( | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	tracepb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/trace/v1" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| @@ -77,12 +77,12 @@ func TestEmptySpanEvent(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func TestSpanEvent(t *testing.T) { | ||||
| 	attrs := []label.KeyValue{label.Int("one", 1), label.Int("two", 2)} | ||||
| 	attrs := []attribute.KeyValue{attribute.Int("one", 1), attribute.Int("two", 2)} | ||||
| 	eventTime := time.Date(2020, 5, 20, 0, 0, 0, 0, time.UTC) | ||||
| 	got := spanEvents([]trace.Event{ | ||||
| 		{ | ||||
| 			Name:       "test 1", | ||||
| 			Attributes: []label.KeyValue{}, | ||||
| 			Attributes: []attribute.KeyValue{}, | ||||
| 			Time:       eventTime, | ||||
| 		}, | ||||
| 		{ | ||||
| @@ -121,7 +121,7 @@ func TestEmptyLinks(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func TestLinks(t *testing.T) { | ||||
| 	attrs := []label.KeyValue{label.Int("one", 1), label.Int("two", 2)} | ||||
| 	attrs := []attribute.KeyValue{attribute.Int("one", 1), attribute.Int("two", 2)} | ||||
| 	l := []trace.Link{ | ||||
| 		{}, | ||||
| 		{ | ||||
| @@ -199,7 +199,7 @@ func TestSpanData(t *testing.T) { | ||||
| 	// March 31, 2020 5:01:26 1234nanos (UTC) | ||||
| 	startTime := time.Unix(1585674086, 1234) | ||||
| 	endTime := startTime.Add(10 * time.Second) | ||||
| 	traceState, _ := trace.TraceStateFromKeyValues(label.String("key1", "val1"), label.String("key2", "val2")) | ||||
| 	traceState, _ := trace.TraceStateFromKeyValues(attribute.String("key1", "val1"), attribute.String("key2", "val2")) | ||||
| 	spanData := &export.SpanSnapshot{ | ||||
| 		SpanContext: trace.SpanContext{ | ||||
| 			TraceID:    trace.TraceID{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, | ||||
| @@ -213,13 +213,13 @@ func TestSpanData(t *testing.T) { | ||||
| 		EndTime:      endTime, | ||||
| 		MessageEvents: []trace.Event{ | ||||
| 			{Time: startTime, | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.Int64("CompressedByteSize", 512), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.Int64("CompressedByteSize", 512), | ||||
| 				}, | ||||
| 			}, | ||||
| 			{Time: endTime, | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.String("MessageEventType", "Recv"), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.String("MessageEventType", "Recv"), | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| @@ -230,8 +230,8 @@ func TestSpanData(t *testing.T) { | ||||
| 					SpanID:     trace.SpanID{0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7}, | ||||
| 					TraceFlags: 0, | ||||
| 				}, | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.String("LinkType", "Parent"), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.String("LinkType", "Parent"), | ||||
| 				}, | ||||
| 			}, | ||||
| 			{ | ||||
| @@ -240,21 +240,21 @@ func TestSpanData(t *testing.T) { | ||||
| 					SpanID:     trace.SpanID{0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7}, | ||||
| 					TraceFlags: 0, | ||||
| 				}, | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.String("LinkType", "Child"), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.String("LinkType", "Child"), | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		StatusCode:      codes.Error, | ||||
| 		StatusMessage:   "utterly unrecognized", | ||||
| 		HasRemoteParent: true, | ||||
| 		Attributes: []label.KeyValue{ | ||||
| 			label.Int64("timeout_ns", 12e9), | ||||
| 		Attributes: []attribute.KeyValue{ | ||||
| 			attribute.Int64("timeout_ns", 12e9), | ||||
| 		}, | ||||
| 		DroppedAttributeCount:    1, | ||||
| 		DroppedMessageEventCount: 2, | ||||
| 		DroppedLinkCount:         3, | ||||
| 		Resource:                 resource.NewWithAttributes(label.String("rk1", "rv1"), label.Int64("rk2", 5)), | ||||
| 		Resource:                 resource.NewWithAttributes(attribute.String("rk1", "rv1"), attribute.Int64("rk2", 5)), | ||||
| 		InstrumentationLibrary: instrumentation.Library{ | ||||
| 			Name:    "go.opentelemetry.io/test/otel", | ||||
| 			Version: "v0.0.1", | ||||
|   | ||||
| @@ -23,11 +23,11 @@ import ( | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp" | ||||
| 	commonpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/common/v1" | ||||
| 	metricpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/metrics/v1" | ||||
| 	resourcepb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/resource/v1" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	metricsdk "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -73,15 +73,15 @@ type record struct { | ||||
| 	nKind    number.Kind | ||||
| 	resource *resource.Resource | ||||
| 	opts     []metric.InstrumentOption | ||||
| 	labels   []label.KeyValue | ||||
| 	labels   []attribute.KeyValue | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	baseKeyValues = []label.KeyValue{label.String("host", "test.com")} | ||||
| 	cpuKey        = label.Key("CPU") | ||||
| 	baseKeyValues = []attribute.KeyValue{attribute.String("host", "test.com")} | ||||
| 	cpuKey        = attribute.Key("CPU") | ||||
|  | ||||
| 	testInstA = resource.NewWithAttributes(label.String("instance", "tester-a")) | ||||
| 	testInstB = resource.NewWithAttributes(label.String("instance", "tester-b")) | ||||
| 	testInstA = resource.NewWithAttributes(attribute.String("instance", "tester-a")) | ||||
| 	testInstB = resource.NewWithAttributes(attribute.String("instance", "tester-b")) | ||||
|  | ||||
| 	testHistogramBoundaries = []float64{2.0, 4.0, 8.0} | ||||
|  | ||||
| @@ -744,13 +744,13 @@ func TestStatelessExportKind(t *testing.T) { | ||||
| func runMetricExportTests(t *testing.T, opts []otlp.ExporterOption, rs []record, expected []metricpb.ResourceMetrics) { | ||||
| 	exp, driver := newExporter(t, opts...) | ||||
|  | ||||
| 	recs := map[label.Distinct][]metricsdk.Record{} | ||||
| 	resources := map[label.Distinct]*resource.Resource{} | ||||
| 	recs := map[attribute.Distinct][]metricsdk.Record{} | ||||
| 	resources := map[attribute.Distinct]*resource.Resource{} | ||||
| 	for _, r := range rs { | ||||
| 		lcopy := make([]label.KeyValue, len(r.labels)) | ||||
| 		lcopy := make([]attribute.KeyValue, len(r.labels)) | ||||
| 		copy(lcopy, r.labels) | ||||
| 		desc := metric.NewDescriptor(r.name, r.iKind, r.nKind, r.opts...) | ||||
| 		labs := label.NewSet(lcopy...) | ||||
| 		labs := attribute.NewSet(lcopy...) | ||||
|  | ||||
| 		var agg, ckpt metricsdk.Aggregator | ||||
| 		if r.iKind.Adding() { | ||||
|   | ||||
| @@ -21,11 +21,11 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	commonpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/common/v1" | ||||
| 	resourcepb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/resource/v1" | ||||
| 	tracepb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/trace/v1" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
|  | ||||
| 	tracesdk "go.opentelemetry.io/otel/sdk/export/trace" | ||||
| @@ -64,13 +64,13 @@ func TestExportSpans(t *testing.T) { | ||||
| 					Name:      "parent process", | ||||
| 					StartTime: startTime, | ||||
| 					EndTime:   endTime, | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.String("user", "alice"), | ||||
| 						label.Bool("authenticated", true), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.String("user", "alice"), | ||||
| 						attribute.Bool("authenticated", true), | ||||
| 					}, | ||||
| 					StatusCode:    codes.Ok, | ||||
| 					StatusMessage: "Ok", | ||||
| 					Resource:      resource.NewWithAttributes(label.String("instance", "tester-a")), | ||||
| 					Resource:      resource.NewWithAttributes(attribute.String("instance", "tester-a")), | ||||
| 					InstrumentationLibrary: instrumentation.Library{ | ||||
| 						Name:    "lib-a", | ||||
| 						Version: "v0.1.0", | ||||
| @@ -86,13 +86,13 @@ func TestExportSpans(t *testing.T) { | ||||
| 					Name:      "secondary parent process", | ||||
| 					StartTime: startTime, | ||||
| 					EndTime:   endTime, | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.String("user", "alice"), | ||||
| 						label.Bool("authenticated", true), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.String("user", "alice"), | ||||
| 						attribute.Bool("authenticated", true), | ||||
| 					}, | ||||
| 					StatusCode:    codes.Ok, | ||||
| 					StatusMessage: "Ok", | ||||
| 					Resource:      resource.NewWithAttributes(label.String("instance", "tester-a")), | ||||
| 					Resource:      resource.NewWithAttributes(attribute.String("instance", "tester-a")), | ||||
| 					InstrumentationLibrary: instrumentation.Library{ | ||||
| 						Name:    "lib-b", | ||||
| 						Version: "v0.1.0", | ||||
| @@ -109,13 +109,13 @@ func TestExportSpans(t *testing.T) { | ||||
| 					Name:         "internal process", | ||||
| 					StartTime:    startTime, | ||||
| 					EndTime:      endTime, | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.String("user", "alice"), | ||||
| 						label.Bool("authenticated", true), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.String("user", "alice"), | ||||
| 						attribute.Bool("authenticated", true), | ||||
| 					}, | ||||
| 					StatusCode:    codes.Ok, | ||||
| 					StatusMessage: "Ok", | ||||
| 					Resource:      resource.NewWithAttributes(label.String("instance", "tester-a")), | ||||
| 					Resource:      resource.NewWithAttributes(attribute.String("instance", "tester-a")), | ||||
| 					InstrumentationLibrary: instrumentation.Library{ | ||||
| 						Name:    "lib-a", | ||||
| 						Version: "v0.1.0", | ||||
| @@ -131,13 +131,13 @@ func TestExportSpans(t *testing.T) { | ||||
| 					Name:      "parent process", | ||||
| 					StartTime: startTime, | ||||
| 					EndTime:   endTime, | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.String("user", "bob"), | ||||
| 						label.Bool("authenticated", false), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.String("user", "bob"), | ||||
| 						attribute.Bool("authenticated", false), | ||||
| 					}, | ||||
| 					StatusCode:    codes.Error, | ||||
| 					StatusMessage: "Unauthenticated", | ||||
| 					Resource:      resource.NewWithAttributes(label.String("instance", "tester-b")), | ||||
| 					Resource:      resource.NewWithAttributes(attribute.String("instance", "tester-b")), | ||||
| 					InstrumentationLibrary: instrumentation.Library{ | ||||
| 						Name:    "lib-a", | ||||
| 						Version: "v1.1.0", | ||||
|   | ||||
| @@ -28,11 +28,11 @@ import ( | ||||
| 	"google.golang.org/grpc" | ||||
| 	"google.golang.org/grpc/encoding/gzip" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp" | ||||
| 	commonpb "go.opentelemetry.io/otel/exporters/otlp/internal/opentelemetry-proto-gen/common/v1" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp/internal/otlptest" | ||||
| 	"go.opentelemetry.io/otel/exporters/otlp/otlpgrpc" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	exporttrace "go.opentelemetry.io/otel/sdk/export/trace" | ||||
| 	sdktrace "go.opentelemetry.io/otel/sdk/trace" | ||||
| ) | ||||
| @@ -344,12 +344,12 @@ func TestNewExporter_withMultipleAttributeTypes(t *testing.T) { | ||||
| 	defer func() { _ = tp.Shutdown(ctx) }() | ||||
|  | ||||
| 	tr := tp.Tracer("test-tracer") | ||||
| 	testKvs := []label.KeyValue{ | ||||
| 		label.Int("Int", 1), | ||||
| 		label.Int64("Int64", int64(3)), | ||||
| 		label.Float64("Float64", 2.22), | ||||
| 		label.Bool("Bool", true), | ||||
| 		label.String("String", "test"), | ||||
| 	testKvs := []attribute.KeyValue{ | ||||
| 		attribute.Int("Int", 1), | ||||
| 		attribute.Int64("Int64", int64(3)), | ||||
| 		attribute.Float64("Float64", 2.22), | ||||
| 		attribute.Bool("Bool", true), | ||||
| 		attribute.String("String", "test"), | ||||
| 	} | ||||
| 	_, span := tr.Start(ctx, "AlwaysSample") | ||||
| 	span.SetAttributes(testKvs...) | ||||
|   | ||||
| @@ -18,14 +18,14 @@ import ( | ||||
| 	"io" | ||||
| 	"os" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	defaultWriter              = os.Stdout | ||||
| 	defaultPrettyPrint         = false | ||||
| 	defaultTimestamps          = true | ||||
| 	defaultLabelEncoder        = label.DefaultEncoder() | ||||
| 	defaultLabelEncoder        = attribute.DefaultEncoder() | ||||
| 	defaultDisableTraceExport  = false | ||||
| 	defaultDisableMetricExport = false | ||||
| ) | ||||
| @@ -44,7 +44,7 @@ type Config struct { | ||||
| 	Timestamps bool | ||||
|  | ||||
| 	// LabelEncoder encodes the labels. | ||||
| 	LabelEncoder label.Encoder | ||||
| 	LabelEncoder attribute.Encoder | ||||
|  | ||||
| 	// DisableTraceExport prevents any export of trace telemetry. | ||||
| 	DisableTraceExport bool | ||||
| @@ -112,12 +112,12 @@ func (o timestampsOption) Apply(config *Config) { | ||||
| } | ||||
|  | ||||
| // WithLabelEncoder sets the label encoder used in export. | ||||
| func WithLabelEncoder(enc label.Encoder) Option { | ||||
| func WithLabelEncoder(enc attribute.Encoder) Option { | ||||
| 	return labelEncoderOption{enc} | ||||
| } | ||||
|  | ||||
| type labelEncoderOption struct { | ||||
| 	LabelEncoder label.Encoder | ||||
| 	LabelEncoder attribute.Encoder | ||||
| } | ||||
|  | ||||
| func (o labelEncoderOption) Apply(config *Config) { | ||||
|   | ||||
| @@ -19,8 +19,8 @@ import ( | ||||
| 	"log" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/stdout" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/global" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| @@ -45,7 +45,7 @@ var ( | ||||
| 	loopCounter = metric.Must(meter).NewInt64Counter("function.loops") | ||||
| 	paramValue  = metric.Must(meter).NewInt64ValueRecorder("function.param") | ||||
|  | ||||
| 	nameKey = label.Key("function.name") | ||||
| 	nameKey = attribute.Key("function.name") | ||||
| ) | ||||
|  | ||||
| func add(ctx context.Context, x, y int64) int64 { | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
| 	"strings" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	exportmetric "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| 	"go.opentelemetry.io/otel/sdk/export/metric/aggregation" | ||||
| @@ -61,14 +61,14 @@ func (e *metricExporter) Export(_ context.Context, checkpointSet exportmetric.Ch | ||||
| 		kind := desc.NumberKind() | ||||
| 		encodedResource := record.Resource().Encoded(e.config.LabelEncoder) | ||||
|  | ||||
| 		var instLabels []label.KeyValue | ||||
| 		var instLabels []attribute.KeyValue | ||||
| 		if name := desc.InstrumentationName(); name != "" { | ||||
| 			instLabels = append(instLabels, label.String("instrumentation.name", name)) | ||||
| 			instLabels = append(instLabels, attribute.String("instrumentation.name", name)) | ||||
| 			if version := desc.InstrumentationVersion(); version != "" { | ||||
| 				instLabels = append(instLabels, label.String("instrumentation.version", version)) | ||||
| 				instLabels = append(instLabels, attribute.String("instrumentation.version", version)) | ||||
| 			} | ||||
| 		} | ||||
| 		instSet := label.NewSet(instLabels...) | ||||
| 		instSet := attribute.NewSet(instLabels...) | ||||
| 		encodedInstLabels := instSet.Encoded(e.config.LabelEncoder) | ||||
|  | ||||
| 		var expose line | ||||
|   | ||||
| @@ -26,8 +26,8 @@ import ( | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/exporters/stdout" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -46,7 +46,7 @@ type testFixture struct { | ||||
| 	output   *bytes.Buffer | ||||
| } | ||||
|  | ||||
| var testResource = resource.NewWithAttributes(label.String("R", "V")) | ||||
| var testResource = resource.NewWithAttributes(attribute.String("R", "V")) | ||||
|  | ||||
| func newFixture(t *testing.T, opts ...stdout.Option) testFixture { | ||||
| 	buf := &bytes.Buffer{} | ||||
| @@ -135,7 +135,7 @@ func TestStdoutCounterFormat(t *testing.T) { | ||||
| 	aggregatortest.CheckedUpdate(fix.t, cagg, number.NewInt64Number(123), &desc) | ||||
| 	require.NoError(t, cagg.SynchronizedMove(ckpt, &desc)) | ||||
|  | ||||
| 	checkpointSet.Add(&desc, ckpt, label.String("A", "B"), label.String("C", "D")) | ||||
| 	checkpointSet.Add(&desc, ckpt, attribute.String("A", "B"), attribute.String("C", "D")) | ||||
|  | ||||
| 	fix.Export(checkpointSet) | ||||
|  | ||||
| @@ -153,7 +153,7 @@ func TestStdoutLastValueFormat(t *testing.T) { | ||||
| 	aggregatortest.CheckedUpdate(fix.t, lvagg, number.NewFloat64Number(123.456), &desc) | ||||
| 	require.NoError(t, lvagg.SynchronizedMove(ckpt, &desc)) | ||||
|  | ||||
| 	checkpointSet.Add(&desc, ckpt, label.String("A", "B"), label.String("C", "D")) | ||||
| 	checkpointSet.Add(&desc, ckpt, attribute.String("A", "B"), attribute.String("C", "D")) | ||||
|  | ||||
| 	fix.Export(checkpointSet) | ||||
|  | ||||
| @@ -173,7 +173,7 @@ func TestStdoutMinMaxSumCount(t *testing.T) { | ||||
| 	aggregatortest.CheckedUpdate(fix.t, magg, number.NewFloat64Number(876.543), &desc) | ||||
| 	require.NoError(t, magg.SynchronizedMove(ckpt, &desc)) | ||||
|  | ||||
| 	checkpointSet.Add(&desc, ckpt, label.String("A", "B"), label.String("C", "D")) | ||||
| 	checkpointSet.Add(&desc, ckpt, attribute.String("A", "B"), attribute.String("C", "D")) | ||||
|  | ||||
| 	fix.Export(checkpointSet) | ||||
|  | ||||
| @@ -194,7 +194,7 @@ func TestStdoutValueRecorderFormat(t *testing.T) { | ||||
|  | ||||
| 	require.NoError(t, aagg.SynchronizedMove(ckpt, &desc)) | ||||
|  | ||||
| 	checkpointSet.Add(&desc, ckpt, label.String("A", "B"), label.String("C", "D")) | ||||
| 	checkpointSet.Add(&desc, ckpt, attribute.String("A", "B"), attribute.String("C", "D")) | ||||
|  | ||||
| 	fix.Export(checkpointSet) | ||||
|  | ||||
| @@ -244,7 +244,7 @@ func TestStdoutLastValueNotSet(t *testing.T) { | ||||
| 	lvagg, ckpt := metrictest.Unslice2(lastvalue.New(2)) | ||||
| 	require.NoError(t, lvagg.SynchronizedMove(ckpt, &desc)) | ||||
|  | ||||
| 	checkpointSet.Add(&desc, lvagg, label.String("A", "B"), label.String("C", "D")) | ||||
| 	checkpointSet.Add(&desc, lvagg, attribute.String("A", "B"), attribute.String("C", "D")) | ||||
|  | ||||
| 	fix.Export(checkpointSet) | ||||
|  | ||||
| @@ -255,9 +255,9 @@ func TestStdoutResource(t *testing.T) { | ||||
| 	type testCase struct { | ||||
| 		expect string | ||||
| 		res    *resource.Resource | ||||
| 		attrs  []label.KeyValue | ||||
| 		attrs  []attribute.KeyValue | ||||
| 	} | ||||
| 	newCase := func(expect string, res *resource.Resource, attrs ...label.KeyValue) testCase { | ||||
| 	newCase := func(expect string, res *resource.Resource, attrs ...attribute.KeyValue) testCase { | ||||
| 		return testCase{ | ||||
| 			expect: expect, | ||||
| 			res:    res, | ||||
| @@ -266,23 +266,23 @@ func TestStdoutResource(t *testing.T) { | ||||
| 	} | ||||
| 	testCases := []testCase{ | ||||
| 		newCase("R1=V1,R2=V2,A=B,C=D", | ||||
| 			resource.NewWithAttributes(label.String("R1", "V1"), label.String("R2", "V2")), | ||||
| 			label.String("A", "B"), | ||||
| 			label.String("C", "D")), | ||||
| 			resource.NewWithAttributes(attribute.String("R1", "V1"), attribute.String("R2", "V2")), | ||||
| 			attribute.String("A", "B"), | ||||
| 			attribute.String("C", "D")), | ||||
| 		newCase("R1=V1,R2=V2", | ||||
| 			resource.NewWithAttributes(label.String("R1", "V1"), label.String("R2", "V2")), | ||||
| 			resource.NewWithAttributes(attribute.String("R1", "V1"), attribute.String("R2", "V2")), | ||||
| 		), | ||||
| 		newCase("A=B,C=D", | ||||
| 			nil, | ||||
| 			label.String("A", "B"), | ||||
| 			label.String("C", "D"), | ||||
| 			attribute.String("A", "B"), | ||||
| 			attribute.String("C", "D"), | ||||
| 		), | ||||
| 		// We explicitly do not de-duplicate between resources | ||||
| 		// and metric labels in this exporter. | ||||
| 		newCase("R1=V1,R2=V2,R1=V3,R2=V4", | ||||
| 			resource.NewWithAttributes(label.String("R1", "V1"), label.String("R2", "V2")), | ||||
| 			label.String("R1", "V3"), | ||||
| 			label.String("R2", "V4")), | ||||
| 			resource.NewWithAttributes(attribute.String("R1", "V1"), attribute.String("R2", "V2")), | ||||
| 			attribute.String("R1", "V3"), | ||||
| 			attribute.String("R2", "V4")), | ||||
| 	} | ||||
|  | ||||
| 	for _, tc := range testCases { | ||||
|   | ||||
| @@ -22,9 +22,9 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/exporters/stdout" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/trace" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| @@ -42,10 +42,10 @@ func TestExporter_ExportSpan(t *testing.T) { | ||||
| 	now := time.Now() | ||||
| 	traceID, _ := trace.TraceIDFromHex("0102030405060708090a0b0c0d0e0f10") | ||||
| 	spanID, _ := trace.SpanIDFromHex("0102030405060708") | ||||
| 	traceState, _ := trace.TraceStateFromKeyValues(label.String("key", "val")) | ||||
| 	traceState, _ := trace.TraceStateFromKeyValues(attribute.String("key", "val")) | ||||
| 	keyValue := "value" | ||||
| 	doubleValue := 123.456 | ||||
| 	resource := resource.NewWithAttributes(label.String("rk1", "rv11")) | ||||
| 	resource := resource.NewWithAttributes(attribute.String("rk1", "rv11")) | ||||
|  | ||||
| 	testSpan := &export.SpanSnapshot{ | ||||
| 		SpanContext: trace.SpanContext{ | ||||
| @@ -56,13 +56,13 @@ func TestExporter_ExportSpan(t *testing.T) { | ||||
| 		Name:      "/foo", | ||||
| 		StartTime: now, | ||||
| 		EndTime:   now, | ||||
| 		Attributes: []label.KeyValue{ | ||||
| 			label.String("key", keyValue), | ||||
| 			label.Float64("double", doubleValue), | ||||
| 		Attributes: []attribute.KeyValue{ | ||||
| 			attribute.String("key", keyValue), | ||||
| 			attribute.Float64("double", doubleValue), | ||||
| 		}, | ||||
| 		MessageEvents: []trace.Event{ | ||||
| 			{Name: "foo", Attributes: []label.KeyValue{label.String("key", keyValue)}, Time: now}, | ||||
| 			{Name: "bar", Attributes: []label.KeyValue{label.Float64("double", doubleValue)}, Time: now}, | ||||
| 			{Name: "foo", Attributes: []attribute.KeyValue{attribute.String("key", keyValue)}, Time: now}, | ||||
| 			{Name: "bar", Attributes: []attribute.KeyValue{attribute.Float64("double", doubleValue)}, Time: now}, | ||||
| 		}, | ||||
| 		SpanKind:      trace.SpanKindInternal, | ||||
| 		StatusCode:    codes.Error, | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
| 	"strings" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
|  | ||||
| // Environment variable names | ||||
| @@ -111,9 +111,9 @@ var errTagEnvironmentDefaultValueNotFound = errors.New("missing default value fo | ||||
| // - comma separated list of key=value | ||||
| // - value can be specified using the notation ${envVar:defaultValue}, where `envVar` | ||||
| // is an environment variable and `defaultValue` is the value to use in case the env var is not set | ||||
| func parseTags(sTags string) ([]label.KeyValue, error) { | ||||
| func parseTags(sTags string) ([]attribute.KeyValue, error) { | ||||
| 	pairs := strings.Split(sTags, ",") | ||||
| 	tags := make([]label.KeyValue, len(pairs)) | ||||
| 	tags := make([]attribute.KeyValue, len(pairs)) | ||||
| 	for i, p := range pairs { | ||||
| 		field := strings.SplitN(p, "=", 2) | ||||
| 		if len(field) != 2 { | ||||
| @@ -139,24 +139,24 @@ func parseTags(sTags string) ([]label.KeyValue, error) { | ||||
| 	return tags, nil | ||||
| } | ||||
|  | ||||
| func parseKeyValue(k, v string) label.KeyValue { | ||||
| 	return label.KeyValue{ | ||||
| 		Key:   label.Key(k), | ||||
| func parseKeyValue(k, v string) attribute.KeyValue { | ||||
| 	return attribute.KeyValue{ | ||||
| 		Key:   attribute.Key(k), | ||||
| 		Value: parseValue(v), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func parseValue(str string) label.Value { | ||||
| func parseValue(str string) attribute.Value { | ||||
| 	if v, err := strconv.ParseInt(str, 10, 64); err == nil { | ||||
| 		return label.Int64Value(v) | ||||
| 		return attribute.Int64Value(v) | ||||
| 	} | ||||
| 	if v, err := strconv.ParseFloat(str, 64); err == nil { | ||||
| 		return label.Float64Value(v) | ||||
| 		return attribute.Float64Value(v) | ||||
| 	} | ||||
| 	if v, err := strconv.ParseBool(str); err == nil { | ||||
| 		return label.BoolValue(v) | ||||
| 		return attribute.BoolValue(v) | ||||
| 	} | ||||
|  | ||||
| 	// Fallback | ||||
| 	return label.StringValue(str) | ||||
| 	return attribute.StringValue(str) | ||||
| } | ||||
|   | ||||
| @@ -22,8 +22,8 @@ import ( | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	ottest "go.opentelemetry.io/otel/internal/internaltest" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| ) | ||||
|  | ||||
| func Test_parseTags(t *testing.T) { | ||||
| @@ -38,78 +38,78 @@ func Test_parseTags(t *testing.T) { | ||||
| 	testCases := []struct { | ||||
| 		name          string | ||||
| 		tagStr        string | ||||
| 		expectedTags  []label.KeyValue | ||||
| 		expectedTags  []attribute.KeyValue | ||||
| 		expectedError error | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:   "string", | ||||
| 			tagStr: "key=value", | ||||
| 			expectedTags: []label.KeyValue{ | ||||
| 			expectedTags: []attribute.KeyValue{ | ||||
| 				{ | ||||
| 					Key:   "key", | ||||
| 					Value: label.StringValue("value"), | ||||
| 					Value: attribute.StringValue("value"), | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "int64", | ||||
| 			tagStr: "k=9223372036854775807,k2=-9223372036854775808", | ||||
| 			expectedTags: []label.KeyValue{ | ||||
| 			expectedTags: []attribute.KeyValue{ | ||||
| 				{ | ||||
| 					Key:   "k", | ||||
| 					Value: label.Int64Value(math.MaxInt64), | ||||
| 					Value: attribute.Int64Value(math.MaxInt64), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Key:   "k2", | ||||
| 					Value: label.Int64Value(math.MinInt64), | ||||
| 					Value: attribute.Int64Value(math.MinInt64), | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "float64", | ||||
| 			tagStr: "k=1.797693134862315708145274237317043567981e+308,k2=4.940656458412465441765687928682213723651e-324,k3=-1.2", | ||||
| 			expectedTags: []label.KeyValue{ | ||||
| 			expectedTags: []attribute.KeyValue{ | ||||
| 				{ | ||||
| 					Key:   "k", | ||||
| 					Value: label.Float64Value(math.MaxFloat64), | ||||
| 					Value: attribute.Float64Value(math.MaxFloat64), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Key:   "k2", | ||||
| 					Value: label.Float64Value(math.SmallestNonzeroFloat64), | ||||
| 					Value: attribute.Float64Value(math.SmallestNonzeroFloat64), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Key:   "k3", | ||||
| 					Value: label.Float64Value(-1.2), | ||||
| 					Value: attribute.Float64Value(-1.2), | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "multiple type values", | ||||
| 			tagStr: "k=v,k2=123, k3=v3 ,k4=-1.2, k5=${existing:default},k6=${nonExisting:default}", | ||||
| 			expectedTags: []label.KeyValue{ | ||||
| 			expectedTags: []attribute.KeyValue{ | ||||
| 				{ | ||||
| 					Key:   "k", | ||||
| 					Value: label.StringValue("v"), | ||||
| 					Value: attribute.StringValue("v"), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Key:   "k2", | ||||
| 					Value: label.Int64Value(123), | ||||
| 					Value: attribute.Int64Value(123), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Key:   "k3", | ||||
| 					Value: label.StringValue("v3"), | ||||
| 					Value: attribute.StringValue("v3"), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Key:   "k4", | ||||
| 					Value: label.Float64Value(-1.2), | ||||
| 					Value: attribute.Float64Value(-1.2), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Key:   "k5", | ||||
| 					Value: label.StringValue("not-default"), | ||||
| 					Value: attribute.StringValue("not-default"), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Key:   "k6", | ||||
| 					Value: label.StringValue("default"), | ||||
| 					Value: attribute.StringValue("default"), | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| @@ -144,52 +144,52 @@ func Test_parseValue(t *testing.T) { | ||||
| 	testCases := []struct { | ||||
| 		name     string | ||||
| 		str      string | ||||
| 		expected label.Value | ||||
| 		expected attribute.Value | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:     "bool: true", | ||||
| 			str:      "true", | ||||
| 			expected: label.BoolValue(true), | ||||
| 			expected: attribute.BoolValue(true), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:     "bool: false", | ||||
| 			str:      "false", | ||||
| 			expected: label.BoolValue(false), | ||||
| 			expected: attribute.BoolValue(false), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:     "int64: 012340", | ||||
| 			str:      "012340", | ||||
| 			expected: label.Int64Value(12340), | ||||
| 			expected: attribute.Int64Value(12340), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:     "int64: -012340", | ||||
| 			str:      "-012340", | ||||
| 			expected: label.Int64Value(-12340), | ||||
| 			expected: attribute.Int64Value(-12340), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:     "int64: 0", | ||||
| 			str:      "0", | ||||
| 			expected: label.Int64Value(0), | ||||
| 			expected: attribute.Int64Value(0), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:     "float64: -0.1", | ||||
| 			str:      "-0.1", | ||||
| 			expected: label.Float64Value(-0.1), | ||||
| 			expected: attribute.Float64Value(-0.1), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:     "float64: 00.001", | ||||
| 			str:      "00.001", | ||||
| 			expected: label.Float64Value(0.001), | ||||
| 			expected: attribute.Float64Value(0.001), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:     "float64: 1E23", | ||||
| 			str:      "1E23", | ||||
| 			expected: label.Float64Value(1e23), | ||||
| 			expected: attribute.Float64Value(1e23), | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:     "string: foo", | ||||
| 			str:      "foo", | ||||
| 			expected: label.StringValue("foo"), | ||||
| 			expected: attribute.StringValue("foo"), | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| @@ -408,9 +408,9 @@ func TestProcessFromEnv(t *testing.T) { | ||||
| 			tags:        "key=value,key2=123", | ||||
| 			expectedProcess: Process{ | ||||
| 				ServiceName: "test-service", | ||||
| 				Tags: []label.KeyValue{ | ||||
| 					label.String("key", "value"), | ||||
| 					label.Int64("key2", 123), | ||||
| 				Tags: []attribute.KeyValue{ | ||||
| 					attribute.String("key", "value"), | ||||
| 					attribute.Int64("key2", 123), | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| @@ -455,16 +455,16 @@ func TestWithProcessFromEnv(t *testing.T) { | ||||
| 			options: options{ | ||||
| 				Process: Process{ | ||||
| 					ServiceName: "old-name", | ||||
| 					Tags: []label.KeyValue{ | ||||
| 						label.String("old-key", "old-value"), | ||||
| 					Tags: []attribute.KeyValue{ | ||||
| 						attribute.String("old-key", "old-value"), | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 			expectedOptions: options{ | ||||
| 				Process: Process{ | ||||
| 					ServiceName: "service-name", | ||||
| 					Tags: []label.KeyValue{ | ||||
| 						label.String("key", "value"), | ||||
| 					Tags: []attribute.KeyValue{ | ||||
| 						attribute.String("key", "value"), | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| @@ -476,16 +476,16 @@ func TestWithProcessFromEnv(t *testing.T) { | ||||
| 			options: options{ | ||||
| 				Process: Process{ | ||||
| 					ServiceName: "old-name", | ||||
| 					Tags: []label.KeyValue{ | ||||
| 						label.String("old-key", "old-value"), | ||||
| 					Tags: []attribute.KeyValue{ | ||||
| 						attribute.String("old-key", "old-value"), | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 			expectedOptions: options{ | ||||
| 				Process: Process{ | ||||
| 					ServiceName: "old-name", | ||||
| 					Tags: []label.KeyValue{ | ||||
| 						label.String("old-key", "old-value"), | ||||
| 					Tags: []attribute.KeyValue{ | ||||
| 						attribute.String("old-key", "old-value"), | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
|   | ||||
| @@ -23,9 +23,9 @@ import ( | ||||
| 	"google.golang.org/api/support/bundler" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	gen "go.opentelemetry.io/otel/exporters/trace/jaeger/internal/gen-go/jaeger" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/trace" | ||||
| 	sdktrace "go.opentelemetry.io/otel/sdk/trace" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| @@ -193,7 +193,7 @@ type Process struct { | ||||
| 	ServiceName string | ||||
|  | ||||
| 	// Tags are added to Jaeger Process exports | ||||
| 	Tags []label.KeyValue | ||||
| 	Tags []attribute.KeyValue | ||||
| } | ||||
|  | ||||
| // Exporter is an implementation of an OTel SpanSyncer that uploads spans to | ||||
| @@ -342,31 +342,31 @@ func spanSnapshotToThrift(ss *export.SpanSnapshot) *gen.Span { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func keyValueToTag(keyValue label.KeyValue) *gen.Tag { | ||||
| func keyValueToTag(keyValue attribute.KeyValue) *gen.Tag { | ||||
| 	var tag *gen.Tag | ||||
| 	switch keyValue.Value.Type() { | ||||
| 	case label.STRING: | ||||
| 	case attribute.STRING: | ||||
| 		s := keyValue.Value.AsString() | ||||
| 		tag = &gen.Tag{ | ||||
| 			Key:   string(keyValue.Key), | ||||
| 			VStr:  &s, | ||||
| 			VType: gen.TagType_STRING, | ||||
| 		} | ||||
| 	case label.BOOL: | ||||
| 	case attribute.BOOL: | ||||
| 		b := keyValue.Value.AsBool() | ||||
| 		tag = &gen.Tag{ | ||||
| 			Key:   string(keyValue.Key), | ||||
| 			VBool: &b, | ||||
| 			VType: gen.TagType_BOOL, | ||||
| 		} | ||||
| 	case label.INT64: | ||||
| 	case attribute.INT64: | ||||
| 		i := keyValue.Value.AsInt64() | ||||
| 		tag = &gen.Tag{ | ||||
| 			Key:   string(keyValue.Key), | ||||
| 			VLong: &i, | ||||
| 			VType: gen.TagType_LONG, | ||||
| 		} | ||||
| 	case label.FLOAT64: | ||||
| 	case attribute.FLOAT64: | ||||
| 		f := keyValue.Value.AsFloat64() | ||||
| 		tag = &gen.Tag{ | ||||
| 			Key:     string(keyValue.Key), | ||||
|   | ||||
| @@ -28,10 +28,10 @@ import ( | ||||
| 	"google.golang.org/api/support/bundler" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	gen "go.opentelemetry.io/otel/exporters/trace/jaeger/internal/gen-go/jaeger" | ||||
| 	ottest "go.opentelemetry.io/otel/internal/internaltest" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/trace" | ||||
| 	"go.opentelemetry.io/otel/sdk/instrumentation" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| @@ -203,8 +203,8 @@ func TestNewRawExporter(t *testing.T) { | ||||
| 				WithProcess( | ||||
| 					Process{ | ||||
| 						ServiceName: "jaeger-test", | ||||
| 						Tags: []label.KeyValue{ | ||||
| 							label.String("key", "val"), | ||||
| 						Tags: []attribute.KeyValue{ | ||||
| 							attribute.String("key", "val"), | ||||
| 						}, | ||||
| 					}, | ||||
| 				), | ||||
| @@ -329,8 +329,8 @@ func TestExporter_ExportSpan(t *testing.T) { | ||||
| 		withTestCollectorEndpoint(), | ||||
| 		WithProcess(Process{ | ||||
| 			ServiceName: serviceName, | ||||
| 			Tags: []label.KeyValue{ | ||||
| 				label.String(tagKey, tagVal), | ||||
| 			Tags: []attribute.KeyValue{ | ||||
| 				attribute.String(tagKey, tagVal), | ||||
| 			}, | ||||
| 		}), | ||||
| 	) | ||||
| @@ -396,18 +396,18 @@ func Test_spanSnapshotToThrift(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 				}, | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.String("key", keyValue), | ||||
| 					label.Float64("double", doubleValue), | ||||
| 					label.Int64("int", intValue), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.String("key", keyValue), | ||||
| 					attribute.Float64("double", doubleValue), | ||||
| 					attribute.Int64("int", intValue), | ||||
| 				}, | ||||
| 				MessageEvents: []trace.Event{ | ||||
| 					{Name: eventNameValue, Attributes: []label.KeyValue{label.String("k1", keyValue)}, Time: now}, | ||||
| 					{Name: eventNameValue, Attributes: []attribute.KeyValue{attribute.String("k1", keyValue)}, Time: now}, | ||||
| 				}, | ||||
| 				StatusCode:    codes.Error, | ||||
| 				StatusMessage: statusMessage, | ||||
| 				SpanKind:      trace.SpanKindClient, | ||||
| 				Resource:      resource.NewWithAttributes(label.String("rk1", rv1), label.Int64("rk2", rv2)), | ||||
| 				Resource:      resource.NewWithAttributes(attribute.String("rk1", rv1), attribute.Int64("rk2", rv2)), | ||||
| 				InstrumentationLibrary: instrumentation.Library{ | ||||
| 					Name:    instrLibName, | ||||
| 					Version: instrLibVersion, | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
|  | ||||
| 	zkmodel "github.com/openzipkin/zipkin-go/model" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/trace" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
| @@ -127,7 +127,7 @@ func toZipkinAnnotations(events []trace.Event) []zkmodel.Annotation { | ||||
| 	return annotations | ||||
| } | ||||
|  | ||||
| func attributesToJSONMapString(attributes []label.KeyValue) string { | ||||
| func attributesToJSONMapString(attributes []attribute.KeyValue) string { | ||||
| 	m := make(map[string]interface{}, len(attributes)) | ||||
| 	for _, attribute := range attributes { | ||||
| 		m[(string)(attribute.Key)] = attribute.Value.AsInterface() | ||||
|   | ||||
| @@ -24,8 +24,8 @@ import ( | ||||
| 	zkmodel "github.com/openzipkin/zipkin-go/model" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/trace" | ||||
| 	"go.opentelemetry.io/otel/sdk/instrumentation" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| @@ -44,16 +44,16 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.Int64("attr1", 42), | ||||
| 				label.String("attr2", "bar"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.Int64("attr1", 42), | ||||
| 				attribute.String("attr2", "bar"), | ||||
| 			}, | ||||
| 			MessageEvents: []trace.Event{ | ||||
| 				{ | ||||
| 					Time: time.Date(2020, time.March, 11, 19, 24, 30, 0, time.UTC), | ||||
| 					Name: "ev1", | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.Int64("eventattr1", 123), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.Int64("eventattr1", 123), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| @@ -77,16 +77,16 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.Int64("attr1", 42), | ||||
| 				label.String("attr2", "bar"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.Int64("attr1", 42), | ||||
| 				attribute.String("attr2", "bar"), | ||||
| 			}, | ||||
| 			MessageEvents: []trace.Event{ | ||||
| 				{ | ||||
| 					Time: time.Date(2020, time.March, 11, 19, 24, 30, 0, time.UTC), | ||||
| 					Name: "ev1", | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.Int64("eventattr1", 123), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.Int64("eventattr1", 123), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| @@ -109,16 +109,16 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.Int64("attr1", 42), | ||||
| 				label.String("attr2", "bar"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.Int64("attr1", 42), | ||||
| 				attribute.String("attr2", "bar"), | ||||
| 			}, | ||||
| 			MessageEvents: []trace.Event{ | ||||
| 				{ | ||||
| 					Time: time.Date(2020, time.March, 11, 19, 24, 30, 0, time.UTC), | ||||
| 					Name: "ev1", | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.Int64("eventattr1", 123), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.Int64("eventattr1", 123), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| @@ -141,16 +141,16 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.Int64("attr1", 42), | ||||
| 				label.String("attr2", "bar"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.Int64("attr1", 42), | ||||
| 				attribute.String("attr2", "bar"), | ||||
| 			}, | ||||
| 			MessageEvents: []trace.Event{ | ||||
| 				{ | ||||
| 					Time: time.Date(2020, time.March, 11, 19, 24, 30, 0, time.UTC), | ||||
| 					Name: "ev1", | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.Int64("eventattr1", 123), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.Int64("eventattr1", 123), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| @@ -173,16 +173,16 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.Int64("attr1", 42), | ||||
| 				label.String("attr2", "bar"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.Int64("attr1", 42), | ||||
| 				attribute.String("attr2", "bar"), | ||||
| 			}, | ||||
| 			MessageEvents: []trace.Event{ | ||||
| 				{ | ||||
| 					Time: time.Date(2020, time.March, 11, 19, 24, 30, 0, time.UTC), | ||||
| 					Name: "ev1", | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.Int64("eventattr1", 123), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.Int64("eventattr1", 123), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| @@ -205,16 +205,16 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.Int64("attr1", 42), | ||||
| 				label.String("attr2", "bar"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.Int64("attr1", 42), | ||||
| 				attribute.String("attr2", "bar"), | ||||
| 			}, | ||||
| 			MessageEvents: []trace.Event{ | ||||
| 				{ | ||||
| 					Time: time.Date(2020, time.March, 11, 19, 24, 30, 0, time.UTC), | ||||
| 					Name: "ev1", | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.Int64("eventattr1", 123), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.Int64("eventattr1", 123), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| @@ -237,16 +237,16 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.Int64("attr1", 42), | ||||
| 				label.String("attr2", "bar"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.Int64("attr1", 42), | ||||
| 				attribute.String("attr2", "bar"), | ||||
| 			}, | ||||
| 			MessageEvents: []trace.Event{ | ||||
| 				{ | ||||
| 					Time: time.Date(2020, time.March, 11, 19, 24, 30, 0, time.UTC), | ||||
| 					Name: "ev1", | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.Int64("eventattr1", 123), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.Int64("eventattr1", 123), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| @@ -269,9 +269,9 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.Int64("attr1", 42), | ||||
| 				label.String("attr2", "bar"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.Int64("attr1", 42), | ||||
| 				attribute.String("attr2", "bar"), | ||||
| 			}, | ||||
| 			MessageEvents: nil, | ||||
| 			StatusCode:    codes.Error, | ||||
| @@ -288,15 +288,15 @@ func TestModelConversion(t *testing.T) { | ||||
| 			Name:         "foo", | ||||
| 			StartTime:    time.Date(2020, time.March, 11, 19, 24, 0, 0, time.UTC), | ||||
| 			EndTime:      time.Date(2020, time.March, 11, 19, 25, 0, 0, time.UTC), | ||||
| 			Attributes: []label.KeyValue{ | ||||
| 				label.String("error", "false"), | ||||
| 			Attributes: []attribute.KeyValue{ | ||||
| 				attribute.String("error", "false"), | ||||
| 			}, | ||||
| 			MessageEvents: []trace.Event{ | ||||
| 				{ | ||||
| 					Time: time.Date(2020, time.March, 11, 19, 24, 30, 0, time.UTC), | ||||
| 					Name: "ev1", | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.Int64("eventattr1", 123), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.Int64("eventattr1", 123), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| @@ -677,11 +677,11 @@ func Test_toZipkinTags(t *testing.T) { | ||||
| 		{ | ||||
| 			name: "attributes", | ||||
| 			data: &export.SpanSnapshot{ | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.String("key", keyValue), | ||||
| 					label.Float64("double", doubleValue), | ||||
| 					label.Int64("uint", uintValue), | ||||
| 					label.Bool("ok", true), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.String("key", keyValue), | ||||
| 					attribute.Float64("double", doubleValue), | ||||
| 					attribute.Int64("uint", uintValue), | ||||
| 					attribute.Bool("ok", true), | ||||
| 				}, | ||||
| 			}, | ||||
| 			want: map[string]string{ | ||||
| @@ -704,8 +704,8 @@ func Test_toZipkinTags(t *testing.T) { | ||||
| 		{ | ||||
| 			name: "omit-noerror", | ||||
| 			data: &export.SpanSnapshot{ | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.Bool("error", false), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.Bool("error", false), | ||||
| 				}, | ||||
| 			}, | ||||
| 			want: map[string]string{ | ||||
| @@ -716,9 +716,9 @@ func Test_toZipkinTags(t *testing.T) { | ||||
| 		{ | ||||
| 			name: "statusCode", | ||||
| 			data: &export.SpanSnapshot{ | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.String("key", keyValue), | ||||
| 					label.Bool("error", true), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.String("key", keyValue), | ||||
| 					attribute.Bool("error", true), | ||||
| 				}, | ||||
| 				StatusCode:    codes.Error, | ||||
| 				StatusMessage: statusMessage, | ||||
| @@ -743,7 +743,7 @@ func Test_toZipkinTags(t *testing.T) { | ||||
| 		{ | ||||
| 			name: "instrLib-noversion", | ||||
| 			data: &export.SpanSnapshot{ | ||||
| 				Attributes: []label.KeyValue{}, | ||||
| 				Attributes: []attribute.KeyValue{}, | ||||
| 				InstrumentationLibrary: instrumentation.Library{ | ||||
| 					Name: instrLibName, | ||||
| 				}, | ||||
| @@ -757,7 +757,7 @@ func Test_toZipkinTags(t *testing.T) { | ||||
| 		{ | ||||
| 			name: "instrLib-with-version", | ||||
| 			data: &export.SpanSnapshot{ | ||||
| 				Attributes: []label.KeyValue{}, | ||||
| 				Attributes: []attribute.KeyValue{}, | ||||
| 				InstrumentationLibrary: instrumentation.Library{ | ||||
| 					Name:    instrLibName, | ||||
| 					Version: instrLibVersion, | ||||
|   | ||||
| @@ -18,11 +18,11 @@ package baggage | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
|  | ||||
| type rawMap map[label.Key]label.Value | ||||
| type keySet map[label.Key]struct{} | ||||
| type rawMap map[attribute.Key]attribute.Value | ||||
| type keySet map[attribute.Key]struct{} | ||||
|  | ||||
| // Map is an immutable storage for correlations. | ||||
| type Map struct { | ||||
| @@ -35,18 +35,18 @@ type MapUpdate struct { | ||||
| 	// DropSingleK contains a single key to be dropped from | ||||
| 	// correlations. Use this to avoid an overhead of a slice | ||||
| 	// allocation if there is only one key to drop. | ||||
| 	DropSingleK label.Key | ||||
| 	DropSingleK attribute.Key | ||||
| 	// DropMultiK contains all the keys to be dropped from | ||||
| 	// correlations. | ||||
| 	DropMultiK []label.Key | ||||
| 	DropMultiK []attribute.Key | ||||
|  | ||||
| 	// SingleKV contains a single key-value pair to be added to | ||||
| 	// correlations. Use this to avoid an overhead of a slice | ||||
| 	// allocation if there is only one key-value pair to add. | ||||
| 	SingleKV label.KeyValue | ||||
| 	SingleKV attribute.KeyValue | ||||
| 	// MultiKV contains all the key-value pairs to be added to | ||||
| 	// correlations. | ||||
| 	MultiKV []label.KeyValue | ||||
| 	MultiKV []attribute.KeyValue | ||||
| } | ||||
|  | ||||
| func newMap(raw rawMap) Map { | ||||
| @@ -104,7 +104,7 @@ func getModificationSets(update MapUpdate) (delSet, addSet keySet) { | ||||
| 		deletionsCount++ | ||||
| 	} | ||||
| 	if deletionsCount > 0 { | ||||
| 		delSet = make(map[label.Key]struct{}, deletionsCount) | ||||
| 		delSet = make(map[attribute.Key]struct{}, deletionsCount) | ||||
| 		for _, k := range update.DropMultiK { | ||||
| 			delSet[k] = struct{}{} | ||||
| 		} | ||||
| @@ -118,7 +118,7 @@ func getModificationSets(update MapUpdate) (delSet, addSet keySet) { | ||||
| 		additionsCount++ | ||||
| 	} | ||||
| 	if additionsCount > 0 { | ||||
| 		addSet = make(map[label.Key]struct{}, additionsCount) | ||||
| 		addSet = make(map[attribute.Key]struct{}, additionsCount) | ||||
| 		for _, k := range update.MultiKV { | ||||
| 			addSet[k.Key] = struct{}{} | ||||
| 		} | ||||
| @@ -149,14 +149,14 @@ func getNewMapSize(m rawMap, delSet, addSet keySet) int { | ||||
|  | ||||
| // Value gets a value from correlations map and returns a boolean | ||||
| // value indicating whether the key exist in the map. | ||||
| func (m Map) Value(k label.Key) (label.Value, bool) { | ||||
| func (m Map) Value(k attribute.Key) (attribute.Value, bool) { | ||||
| 	value, ok := m.m[k] | ||||
| 	return value, ok | ||||
| } | ||||
|  | ||||
| // HasValue returns a boolean value indicating whether the key exist | ||||
| // in the map. | ||||
| func (m Map) HasValue(k label.Key) bool { | ||||
| func (m Map) HasValue(k attribute.Key) bool { | ||||
| 	_, has := m.Value(k) | ||||
| 	return has | ||||
| } | ||||
| @@ -169,9 +169,9 @@ func (m Map) Len() int { | ||||
| // Foreach calls a passed callback once on each key-value pair until | ||||
| // all the key-value pairs of the map were iterated or the callback | ||||
| // returns false, whichever happens first. | ||||
| func (m Map) Foreach(f func(label.KeyValue) bool) { | ||||
| func (m Map) Foreach(f func(attribute.KeyValue) bool) { | ||||
| 	for k, v := range m.m { | ||||
| 		if !f(label.KeyValue{ | ||||
| 		if !f(attribute.KeyValue{ | ||||
| 			Key:   k, | ||||
| 			Value: v, | ||||
| 		}) { | ||||
| @@ -316,7 +316,7 @@ func ContextWithNoCorrelationData(ctx context.Context) context.Context { | ||||
|  | ||||
| // NewContext returns a context with the map from passed context | ||||
| // updated with the passed key-value pairs. | ||||
| func NewContext(ctx context.Context, keyvalues ...label.KeyValue) context.Context { | ||||
| func NewContext(ctx context.Context, keyvalues ...attribute.KeyValue) context.Context { | ||||
| 	return ContextWithMap(ctx, MapFromContext(ctx).Apply(MapUpdate{ | ||||
| 		MultiKV: keyvalues, | ||||
| 	})) | ||||
|   | ||||
| @@ -18,14 +18,14 @@ import ( | ||||
| 	"fmt" | ||||
| 	"testing" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
|  | ||||
| type testCase struct { | ||||
| 	name    string | ||||
| 	value   MapUpdate | ||||
| 	init    []int | ||||
| 	wantKVs []label.KeyValue | ||||
| 	wantKVs []attribute.KeyValue | ||||
| } | ||||
|  | ||||
| func TestMap(t *testing.T) { | ||||
| @@ -46,7 +46,7 @@ func TestMap(t *testing.T) { | ||||
| 			} | ||||
| 		} | ||||
| 		// test Foreach() | ||||
| 		got.Foreach(func(kv label.KeyValue) bool { | ||||
| 		got.Foreach(func(kv attribute.KeyValue) bool { | ||||
| 			for _, want := range testcase.wantKVs { | ||||
| 				if kv == want { | ||||
| 					return false | ||||
| @@ -85,192 +85,192 @@ func getTestCases() []testCase { | ||||
| 	return []testCase{ | ||||
| 		{ | ||||
| 			name: "map with MultiKV", | ||||
| 			value: MapUpdate{MultiKV: []label.KeyValue{ | ||||
| 				label.Int64("key1", 1), | ||||
| 				label.String("key2", "val2")}, | ||||
| 			value: MapUpdate{MultiKV: []attribute.KeyValue{ | ||||
| 				attribute.Int64("key1", 1), | ||||
| 				attribute.String("key2", "val2")}, | ||||
| 			}, | ||||
| 			init: []int{}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.Int64("key1", 1), | ||||
| 				label.String("key2", "val2"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.Int64("key1", 1), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:  "map with SingleKV", | ||||
| 			value: MapUpdate{SingleKV: label.String("key1", "val1")}, | ||||
| 			value: MapUpdate{SingleKV: attribute.String("key1", "val1")}, | ||||
| 			init:  []int{}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "map with both add fields", | ||||
| 			value: MapUpdate{SingleKV: label.Int64("key1", 3), | ||||
| 				MultiKV: []label.KeyValue{ | ||||
| 					label.String("key1", ""), | ||||
| 					label.String("key2", "val2")}, | ||||
| 			value: MapUpdate{SingleKV: attribute.Int64("key1", 3), | ||||
| 				MultiKV: []attribute.KeyValue{ | ||||
| 					attribute.String("key1", ""), | ||||
| 					attribute.String("key2", "val2")}, | ||||
| 			}, | ||||
| 			init: []int{}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", ""), | ||||
| 				label.String("key2", "val2"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", ""), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:    "map with empty MapUpdate", | ||||
| 			value:   MapUpdate{}, | ||||
| 			init:    []int{}, | ||||
| 			wantKVs: []label.KeyValue{}, | ||||
| 			wantKVs: []attribute.KeyValue{}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:    "map with DropSingleK", | ||||
| 			value:   MapUpdate{DropSingleK: label.Key("key1")}, | ||||
| 			value:   MapUpdate{DropSingleK: attribute.Key("key1")}, | ||||
| 			init:    []int{}, | ||||
| 			wantKVs: []label.KeyValue{}, | ||||
| 			wantKVs: []attribute.KeyValue{}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "map with DropMultiK", | ||||
| 			value: MapUpdate{DropMultiK: []label.Key{ | ||||
| 				label.Key("key1"), label.Key("key2"), | ||||
| 			value: MapUpdate{DropMultiK: []attribute.Key{ | ||||
| 				attribute.Key("key1"), attribute.Key("key2"), | ||||
| 			}}, | ||||
| 			init:    []int{}, | ||||
| 			wantKVs: []label.KeyValue{}, | ||||
| 			wantKVs: []attribute.KeyValue{}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "map with both drop fields", | ||||
| 			value: MapUpdate{ | ||||
| 				DropSingleK: label.Key("key1"), | ||||
| 				DropMultiK: []label.Key{ | ||||
| 					label.Key("key1"), | ||||
| 					label.Key("key2"), | ||||
| 				DropSingleK: attribute.Key("key1"), | ||||
| 				DropMultiK: []attribute.Key{ | ||||
| 					attribute.Key("key1"), | ||||
| 					attribute.Key("key2"), | ||||
| 				}, | ||||
| 			}, | ||||
| 			init:    []int{}, | ||||
| 			wantKVs: []label.KeyValue{}, | ||||
| 			wantKVs: []attribute.KeyValue{}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "map with all fields", | ||||
| 			value: MapUpdate{ | ||||
| 				DropSingleK: label.Key("key1"), | ||||
| 				DropMultiK: []label.Key{ | ||||
| 					label.Key("key1"), | ||||
| 					label.Key("key2"), | ||||
| 				DropSingleK: attribute.Key("key1"), | ||||
| 				DropMultiK: []attribute.Key{ | ||||
| 					attribute.Key("key1"), | ||||
| 					attribute.Key("key2"), | ||||
| 				}, | ||||
| 				SingleKV: label.String("key4", "val4"), | ||||
| 				MultiKV: []label.KeyValue{ | ||||
| 					label.String("key1", ""), | ||||
| 					label.String("key2", "val2"), | ||||
| 					label.String("key3", "val3"), | ||||
| 				SingleKV: attribute.String("key4", "val4"), | ||||
| 				MultiKV: []attribute.KeyValue{ | ||||
| 					attribute.String("key1", ""), | ||||
| 					attribute.String("key2", "val2"), | ||||
| 					attribute.String("key3", "val3"), | ||||
| 				}, | ||||
| 			}, | ||||
| 			init: []int{}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", ""), | ||||
| 				label.String("key2", "val2"), | ||||
| 				label.String("key3", "val3"), | ||||
| 				label.String("key4", "val4"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", ""), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 				attribute.String("key3", "val3"), | ||||
| 				attribute.String("key4", "val4"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "Existing map with MultiKV", | ||||
| 			value: MapUpdate{MultiKV: []label.KeyValue{ | ||||
| 				label.Int64("key1", 1), | ||||
| 				label.String("key2", "val2")}, | ||||
| 			value: MapUpdate{MultiKV: []attribute.KeyValue{ | ||||
| 				attribute.Int64("key1", 1), | ||||
| 				attribute.String("key2", "val2")}, | ||||
| 			}, | ||||
| 			init: []int{5}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.Int64("key1", 1), | ||||
| 				label.String("key2", "val2"), | ||||
| 				label.Int("key5", 5), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.Int64("key1", 1), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 				attribute.Int("key5", 5), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:  "Existing map with SingleKV", | ||||
| 			value: MapUpdate{SingleKV: label.String("key1", "val1")}, | ||||
| 			value: MapUpdate{SingleKV: attribute.String("key1", "val1")}, | ||||
| 			init:  []int{5}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.Int("key5", 5), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.Int("key5", 5), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "Existing map with both add fields", | ||||
| 			value: MapUpdate{SingleKV: label.Int64("key1", 3), | ||||
| 				MultiKV: []label.KeyValue{ | ||||
| 					label.String("key1", ""), | ||||
| 					label.String("key2", "val2")}, | ||||
| 			value: MapUpdate{SingleKV: attribute.Int64("key1", 3), | ||||
| 				MultiKV: []attribute.KeyValue{ | ||||
| 					attribute.String("key1", ""), | ||||
| 					attribute.String("key2", "val2")}, | ||||
| 			}, | ||||
| 			init: []int{5}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", ""), | ||||
| 				label.String("key2", "val2"), | ||||
| 				label.Int("key5", 5), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", ""), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 				attribute.Int("key5", 5), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:  "Existing map with empty MapUpdate", | ||||
| 			value: MapUpdate{}, | ||||
| 			init:  []int{5}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.Int("key5", 5), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.Int("key5", 5), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:  "Existing map with DropSingleK", | ||||
| 			value: MapUpdate{DropSingleK: label.Key("key1")}, | ||||
| 			value: MapUpdate{DropSingleK: attribute.Key("key1")}, | ||||
| 			init:  []int{1, 5}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.Int("key5", 5), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.Int("key5", 5), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "Existing map with DropMultiK", | ||||
| 			value: MapUpdate{DropMultiK: []label.Key{ | ||||
| 				label.Key("key1"), label.Key("key2"), | ||||
| 			value: MapUpdate{DropMultiK: []attribute.Key{ | ||||
| 				attribute.Key("key1"), attribute.Key("key2"), | ||||
| 			}}, | ||||
| 			init: []int{1, 5}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.Int("key5", 5), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.Int("key5", 5), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "Existing map with both drop fields", | ||||
| 			value: MapUpdate{ | ||||
| 				DropSingleK: label.Key("key1"), | ||||
| 				DropMultiK: []label.Key{ | ||||
| 					label.Key("key1"), | ||||
| 					label.Key("key2"), | ||||
| 				DropSingleK: attribute.Key("key1"), | ||||
| 				DropMultiK: []attribute.Key{ | ||||
| 					attribute.Key("key1"), | ||||
| 					attribute.Key("key2"), | ||||
| 				}, | ||||
| 			}, | ||||
| 			init: []int{1, 2, 5}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.Int("key5", 5), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.Int("key5", 5), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "Existing map with all the fields", | ||||
| 			value: MapUpdate{ | ||||
| 				DropSingleK: label.Key("key1"), | ||||
| 				DropMultiK: []label.Key{ | ||||
| 					label.Key("key1"), | ||||
| 					label.Key("key2"), | ||||
| 					label.Key("key5"), | ||||
| 					label.Key("key6"), | ||||
| 				DropSingleK: attribute.Key("key1"), | ||||
| 				DropMultiK: []attribute.Key{ | ||||
| 					attribute.Key("key1"), | ||||
| 					attribute.Key("key2"), | ||||
| 					attribute.Key("key5"), | ||||
| 					attribute.Key("key6"), | ||||
| 				}, | ||||
| 				SingleKV: label.String("key4", "val4"), | ||||
| 				MultiKV: []label.KeyValue{ | ||||
| 					label.String("key1", ""), | ||||
| 					label.String("key2", "val2"), | ||||
| 					label.String("key3", "val3"), | ||||
| 				SingleKV: attribute.String("key4", "val4"), | ||||
| 				MultiKV: []attribute.KeyValue{ | ||||
| 					attribute.String("key1", ""), | ||||
| 					attribute.String("key2", "val2"), | ||||
| 					attribute.String("key3", "val3"), | ||||
| 				}, | ||||
| 			}, | ||||
| 			init: []int{5, 6, 7}, | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", ""), | ||||
| 				label.String("key2", "val2"), | ||||
| 				label.String("key3", "val3"), | ||||
| 				label.String("key4", "val4"), | ||||
| 				label.Int("key7", 7), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", ""), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 				attribute.String("key3", "val3"), | ||||
| 				attribute.String("key4", "val4"), | ||||
| 				attribute.Int("key7", 7), | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| @@ -279,7 +279,7 @@ func getTestCases() []testCase { | ||||
| func makeTestMap(ints []int) Map { | ||||
| 	r := make(rawMap, len(ints)) | ||||
| 	for _, v := range ints { | ||||
| 		r[label.Key(fmt.Sprintf("key%d", v))] = label.IntValue(v) | ||||
| 		r[attribute.Key(fmt.Sprintf("key%d", v))] = attribute.IntValue(v) | ||||
| 	} | ||||
| 	return newMap(r) | ||||
| } | ||||
|   | ||||
| @@ -19,8 +19,8 @@ import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/internal/global" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	metricglobal "go.opentelemetry.io/otel/metric/global" | ||||
| ) | ||||
|  | ||||
| @@ -31,7 +31,7 @@ func BenchmarkGlobalInt64CounterAddNoSDK(b *testing.B) { | ||||
| 	global.ResetForTest() | ||||
| 	ctx := context.Background() | ||||
| 	sdk := metricglobal.Meter("test") | ||||
| 	labs := []label.KeyValue{label.String("A", "B")} | ||||
| 	labs := []attribute.KeyValue{attribute.String("A", "B")} | ||||
| 	cnt := Must(sdk).NewInt64Counter("int64.counter") | ||||
|  | ||||
| 	b.ResetTimer() | ||||
|   | ||||
| @@ -20,7 +20,7 @@ import ( | ||||
| 	"sync/atomic" | ||||
| 	"unsafe" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	"go.opentelemetry.io/otel/metric/registry" | ||||
| @@ -109,7 +109,7 @@ type syncHandle struct { | ||||
| 	delegate unsafe.Pointer // (*metric.BoundInstrumentImpl) | ||||
|  | ||||
| 	inst   *syncImpl | ||||
| 	labels []label.KeyValue | ||||
| 	labels []attribute.KeyValue | ||||
|  | ||||
| 	initialize sync.Once | ||||
| } | ||||
| @@ -228,7 +228,7 @@ func (inst *syncImpl) Implementation() interface{} { | ||||
| 	return inst | ||||
| } | ||||
|  | ||||
| func (inst *syncImpl) Bind(labels []label.KeyValue) metric.BoundSyncImpl { | ||||
| func (inst *syncImpl) Bind(labels []attribute.KeyValue) metric.BoundSyncImpl { | ||||
| 	if implPtr := (*metric.SyncImpl)(atomic.LoadPointer(&inst.delegate)); implPtr != nil { | ||||
| 		return (*implPtr).Bind(labels) | ||||
| 	} | ||||
| @@ -300,13 +300,13 @@ func (obs *asyncImpl) setDelegate(d metric.MeterImpl) { | ||||
|  | ||||
| // Metric updates | ||||
|  | ||||
| func (m *meterImpl) RecordBatch(ctx context.Context, labels []label.KeyValue, measurements ...metric.Measurement) { | ||||
| func (m *meterImpl) RecordBatch(ctx context.Context, labels []attribute.KeyValue, measurements ...metric.Measurement) { | ||||
| 	if delegatePtr := (*metric.MeterImpl)(atomic.LoadPointer(&m.delegate)); delegatePtr != nil { | ||||
| 		(*delegatePtr).RecordBatch(ctx, labels, measurements...) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (inst *syncImpl) RecordOne(ctx context.Context, number number.Number, labels []label.KeyValue) { | ||||
| func (inst *syncImpl) RecordOne(ctx context.Context, number number.Number, labels []attribute.KeyValue) { | ||||
| 	if instPtr := (*metric.SyncImpl)(atomic.LoadPointer(&inst.delegate)); instPtr != nil { | ||||
| 		(*instPtr).RecordOne(ctx, number, labels) | ||||
| 	} | ||||
|   | ||||
| @@ -21,8 +21,8 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/internal/global" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	metricglobal "go.opentelemetry.io/otel/metric/global" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| @@ -40,9 +40,9 @@ func TestDirect(t *testing.T) { | ||||
| 	ctx := context.Background() | ||||
| 	meter1 := metricglobal.Meter("test1", metric.WithInstrumentationVersion("semver:v1.0.0")) | ||||
| 	meter2 := metricglobal.Meter("test2") | ||||
| 	labels1 := []label.KeyValue{label.String("A", "B")} | ||||
| 	labels2 := []label.KeyValue{label.String("C", "D")} | ||||
| 	labels3 := []label.KeyValue{label.String("E", "F")} | ||||
| 	labels1 := []attribute.KeyValue{attribute.String("A", "B")} | ||||
| 	labels2 := []attribute.KeyValue{attribute.String("C", "D")} | ||||
| 	labels3 := []attribute.KeyValue{attribute.String("E", "F")} | ||||
|  | ||||
| 	counter := Must(meter1).NewInt64Counter("test.counter") | ||||
| 	counter.Add(ctx, 1, labels1...) | ||||
| @@ -139,7 +139,7 @@ func TestBound(t *testing.T) { | ||||
| 	// vs. the above, to cover all the instruments. | ||||
| 	ctx := context.Background() | ||||
| 	glob := metricglobal.Meter("test") | ||||
| 	labels1 := []label.KeyValue{label.String("A", "B")} | ||||
| 	labels1 := []attribute.KeyValue{attribute.String("A", "B")} | ||||
|  | ||||
| 	counter := Must(glob).NewFloat64Counter("test.counter") | ||||
| 	boundC := counter.Bind(labels1...) | ||||
| @@ -183,7 +183,7 @@ func TestUnbind(t *testing.T) { | ||||
| 	global.ResetForTest() | ||||
|  | ||||
| 	glob := metricglobal.Meter("test") | ||||
| 	labels1 := []label.KeyValue{label.String("A", "B")} | ||||
| 	labels1 := []attribute.KeyValue{attribute.String("A", "B")} | ||||
|  | ||||
| 	counter := Must(glob).NewFloat64Counter("test.counter") | ||||
| 	boundC := counter.Bind(labels1...) | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
| 	"sync" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| ) | ||||
|  | ||||
| @@ -32,7 +32,7 @@ var ErrInvalidAsyncRunner = errors.New("unknown async runner type") | ||||
| // the SDK to provide support for running observer callbacks. | ||||
| type AsyncCollector interface { | ||||
| 	// CollectAsync passes a batch of observations to the MeterImpl. | ||||
| 	CollectAsync(labels []label.KeyValue, observation ...metric.Observation) | ||||
| 	CollectAsync(labels []attribute.KeyValue, observation ...metric.Observation) | ||||
| } | ||||
|  | ||||
| // AsyncInstrumentState manages an ordered set of asynchronous | ||||
|   | ||||
| @@ -17,7 +17,7 @@ package parent | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| @@ -46,8 +46,8 @@ func addLinkIfValid(links []trace.Link, sc trace.SpanContext, kind string) []tra | ||||
| 	} | ||||
| 	return append(links, trace.Link{ | ||||
| 		SpanContext: sc, | ||||
| 		Attributes: []label.KeyValue{ | ||||
| 			label.String("ignored-on-demand", kind), | ||||
| 		Attributes: []attribute.KeyValue{ | ||||
| 			attribute.String("ignored-on-demand", kind), | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
|   | ||||
| @@ -17,7 +17,7 @@ package metric // import "go.opentelemetry.io/otel/metric" | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	"go.opentelemetry.io/otel/unit" | ||||
| ) | ||||
| @@ -42,7 +42,7 @@ type Meter struct { | ||||
| } | ||||
|  | ||||
| // RecordBatch atomically records a batch of measurements. | ||||
| func (m Meter) RecordBatch(ctx context.Context, ls []label.KeyValue, ms ...Measurement) { | ||||
| func (m Meter) RecordBatch(ctx context.Context, ls []attribute.KeyValue, ms ...Measurement) { | ||||
| 	if m.impl == nil { | ||||
| 		return | ||||
| 	} | ||||
|   | ||||
| @@ -20,7 +20,7 @@ import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| ) | ||||
|  | ||||
| @@ -116,25 +116,25 @@ type BatchObserverFunc func(context.Context, BatchObserverResult) | ||||
| // observations for one asynchronous integer metric instrument. | ||||
| type Int64ObserverResult struct { | ||||
| 	instrument AsyncImpl | ||||
| 	function   func([]label.KeyValue, ...Observation) | ||||
| 	function   func([]attribute.KeyValue, ...Observation) | ||||
| } | ||||
|  | ||||
| // Float64ObserverResult is passed to an observer callback to capture | ||||
| // observations for one asynchronous floating point metric instrument. | ||||
| type Float64ObserverResult struct { | ||||
| 	instrument AsyncImpl | ||||
| 	function   func([]label.KeyValue, ...Observation) | ||||
| 	function   func([]attribute.KeyValue, ...Observation) | ||||
| } | ||||
|  | ||||
| // BatchObserverResult is passed to a batch observer callback to | ||||
| // capture observations for multiple asynchronous instruments. | ||||
| type BatchObserverResult struct { | ||||
| 	function func([]label.KeyValue, ...Observation) | ||||
| 	function func([]attribute.KeyValue, ...Observation) | ||||
| } | ||||
|  | ||||
| // Observe captures a single integer value from the associated | ||||
| // instrument callback, with the given labels. | ||||
| func (ir Int64ObserverResult) Observe(value int64, labels ...label.KeyValue) { | ||||
| func (ir Int64ObserverResult) Observe(value int64, labels ...attribute.KeyValue) { | ||||
| 	ir.function(labels, Observation{ | ||||
| 		instrument: ir.instrument, | ||||
| 		number:     number.NewInt64Number(value), | ||||
| @@ -143,7 +143,7 @@ func (ir Int64ObserverResult) Observe(value int64, labels ...label.KeyValue) { | ||||
|  | ||||
| // Observe captures a single floating point value from the associated | ||||
| // instrument callback, with the given labels. | ||||
| func (fr Float64ObserverResult) Observe(value float64, labels ...label.KeyValue) { | ||||
| func (fr Float64ObserverResult) Observe(value float64, labels ...attribute.KeyValue) { | ||||
| 	fr.function(labels, Observation{ | ||||
| 		instrument: fr.instrument, | ||||
| 		number:     number.NewFloat64Number(value), | ||||
| @@ -152,7 +152,7 @@ func (fr Float64ObserverResult) Observe(value float64, labels ...label.KeyValue) | ||||
|  | ||||
| // Observe captures a multiple observations from the associated batch | ||||
| // instrument callback, with the given labels. | ||||
| func (br BatchObserverResult) Observe(labels []label.KeyValue, obs ...Observation) { | ||||
| func (br BatchObserverResult) Observe(labels []attribute.KeyValue, obs ...Observation) { | ||||
| 	br.function(labels, obs...) | ||||
| } | ||||
|  | ||||
| @@ -173,7 +173,7 @@ type AsyncSingleRunner interface { | ||||
| 	// receives one captured observation.  (The function accepts | ||||
| 	// multiple observations so the same implementation can be | ||||
| 	// used for batch runners.) | ||||
| 	Run(ctx context.Context, single AsyncImpl, capture func([]label.KeyValue, ...Observation)) | ||||
| 	Run(ctx context.Context, single AsyncImpl, capture func([]attribute.KeyValue, ...Observation)) | ||||
|  | ||||
| 	AsyncRunner | ||||
| } | ||||
| @@ -183,7 +183,7 @@ type AsyncSingleRunner interface { | ||||
| type AsyncBatchRunner interface { | ||||
| 	// Run accepts a function for capturing observations of | ||||
| 	// multiple instruments. | ||||
| 	Run(ctx context.Context, capture func([]label.KeyValue, ...Observation)) | ||||
| 	Run(ctx context.Context, capture func([]attribute.KeyValue, ...Observation)) | ||||
|  | ||||
| 	AsyncRunner | ||||
| } | ||||
| @@ -217,7 +217,7 @@ func (*Float64ObserverFunc) AnyRunner() {} | ||||
| func (*BatchObserverFunc) AnyRunner() {} | ||||
|  | ||||
| // Run implements AsyncSingleRunner. | ||||
| func (i *Int64ObserverFunc) Run(ctx context.Context, impl AsyncImpl, function func([]label.KeyValue, ...Observation)) { | ||||
| func (i *Int64ObserverFunc) Run(ctx context.Context, impl AsyncImpl, function func([]attribute.KeyValue, ...Observation)) { | ||||
| 	(*i)(ctx, Int64ObserverResult{ | ||||
| 		instrument: impl, | ||||
| 		function:   function, | ||||
| @@ -225,7 +225,7 @@ func (i *Int64ObserverFunc) Run(ctx context.Context, impl AsyncImpl, function fu | ||||
| } | ||||
|  | ||||
| // Run implements AsyncSingleRunner. | ||||
| func (f *Float64ObserverFunc) Run(ctx context.Context, impl AsyncImpl, function func([]label.KeyValue, ...Observation)) { | ||||
| func (f *Float64ObserverFunc) Run(ctx context.Context, impl AsyncImpl, function func([]attribute.KeyValue, ...Observation)) { | ||||
| 	(*f)(ctx, Float64ObserverResult{ | ||||
| 		instrument: impl, | ||||
| 		function:   function, | ||||
| @@ -233,7 +233,7 @@ func (f *Float64ObserverFunc) Run(ctx context.Context, impl AsyncImpl, function | ||||
| } | ||||
|  | ||||
| // Run implements AsyncBatchRunner. | ||||
| func (b *BatchObserverFunc) Run(ctx context.Context, function func([]label.KeyValue, ...Observation)) { | ||||
| func (b *BatchObserverFunc) Run(ctx context.Context, function func([]attribute.KeyValue, ...Observation)) { | ||||
| 	(*b)(ctx, BatchObserverResult{ | ||||
| 		function: function, | ||||
| 	}) | ||||
| @@ -442,7 +442,7 @@ func (s syncInstrument) SyncImpl() SyncImpl { | ||||
| 	return s.instrument | ||||
| } | ||||
|  | ||||
| func (s syncInstrument) bind(labels []label.KeyValue) syncBoundInstrument { | ||||
| func (s syncInstrument) bind(labels []attribute.KeyValue) syncBoundInstrument { | ||||
| 	return newSyncBoundInstrument(s.instrument.Bind(labels)) | ||||
| } | ||||
|  | ||||
| @@ -454,7 +454,7 @@ func (s syncInstrument) int64Measurement(value int64) Measurement { | ||||
| 	return newMeasurement(s.instrument, number.NewInt64Number(value)) | ||||
| } | ||||
|  | ||||
| func (s syncInstrument) directRecord(ctx context.Context, number number.Number, labels []label.KeyValue) { | ||||
| func (s syncInstrument) directRecord(ctx context.Context, number number.Number, labels []attribute.KeyValue) { | ||||
| 	s.instrument.RecordOne(ctx, number, labels) | ||||
| } | ||||
|  | ||||
| @@ -577,14 +577,14 @@ type BoundInt64Counter struct { | ||||
|  | ||||
| // Bind creates a bound instrument for this counter. The labels are | ||||
| // associated with values recorded via subsequent calls to Record. | ||||
| func (c Float64Counter) Bind(labels ...label.KeyValue) (h BoundFloat64Counter) { | ||||
| func (c Float64Counter) Bind(labels ...attribute.KeyValue) (h BoundFloat64Counter) { | ||||
| 	h.syncBoundInstrument = c.bind(labels) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Bind creates a bound instrument for this counter. The labels are | ||||
| // associated with values recorded via subsequent calls to Record. | ||||
| func (c Int64Counter) Bind(labels ...label.KeyValue) (h BoundInt64Counter) { | ||||
| func (c Int64Counter) Bind(labels ...attribute.KeyValue) (h BoundInt64Counter) { | ||||
| 	h.syncBoundInstrument = c.bind(labels) | ||||
| 	return | ||||
| } | ||||
| @@ -603,13 +603,13 @@ func (c Int64Counter) Measurement(value int64) Measurement { | ||||
|  | ||||
| // Add adds the value to the counter's sum. The labels should contain | ||||
| // the keys and values to be associated with this value. | ||||
| func (c Float64Counter) Add(ctx context.Context, value float64, labels ...label.KeyValue) { | ||||
| func (c Float64Counter) Add(ctx context.Context, value float64, labels ...attribute.KeyValue) { | ||||
| 	c.directRecord(ctx, number.NewFloat64Number(value), labels) | ||||
| } | ||||
|  | ||||
| // Add adds the value to the counter's sum. The labels should contain | ||||
| // the keys and values to be associated with this value. | ||||
| func (c Int64Counter) Add(ctx context.Context, value int64, labels ...label.KeyValue) { | ||||
| func (c Int64Counter) Add(ctx context.Context, value int64, labels ...attribute.KeyValue) { | ||||
| 	c.directRecord(ctx, number.NewInt64Number(value), labels) | ||||
| } | ||||
|  | ||||
| @@ -652,14 +652,14 @@ type BoundInt64UpDownCounter struct { | ||||
|  | ||||
| // Bind creates a bound instrument for this counter. The labels are | ||||
| // associated with values recorded via subsequent calls to Record. | ||||
| func (c Float64UpDownCounter) Bind(labels ...label.KeyValue) (h BoundFloat64UpDownCounter) { | ||||
| func (c Float64UpDownCounter) Bind(labels ...attribute.KeyValue) (h BoundFloat64UpDownCounter) { | ||||
| 	h.syncBoundInstrument = c.bind(labels) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Bind creates a bound instrument for this counter. The labels are | ||||
| // associated with values recorded via subsequent calls to Record. | ||||
| func (c Int64UpDownCounter) Bind(labels ...label.KeyValue) (h BoundInt64UpDownCounter) { | ||||
| func (c Int64UpDownCounter) Bind(labels ...attribute.KeyValue) (h BoundInt64UpDownCounter) { | ||||
| 	h.syncBoundInstrument = c.bind(labels) | ||||
| 	return | ||||
| } | ||||
| @@ -678,13 +678,13 @@ func (c Int64UpDownCounter) Measurement(value int64) Measurement { | ||||
|  | ||||
| // Add adds the value to the counter's sum. The labels should contain | ||||
| // the keys and values to be associated with this value. | ||||
| func (c Float64UpDownCounter) Add(ctx context.Context, value float64, labels ...label.KeyValue) { | ||||
| func (c Float64UpDownCounter) Add(ctx context.Context, value float64, labels ...attribute.KeyValue) { | ||||
| 	c.directRecord(ctx, number.NewFloat64Number(value), labels) | ||||
| } | ||||
|  | ||||
| // Add adds the value to the counter's sum. The labels should contain | ||||
| // the keys and values to be associated with this value. | ||||
| func (c Int64UpDownCounter) Add(ctx context.Context, value int64, labels ...label.KeyValue) { | ||||
| func (c Int64UpDownCounter) Add(ctx context.Context, value int64, labels ...attribute.KeyValue) { | ||||
| 	c.directRecord(ctx, number.NewInt64Number(value), labels) | ||||
| } | ||||
|  | ||||
| @@ -726,14 +726,14 @@ type BoundInt64ValueRecorder struct { | ||||
|  | ||||
| // Bind creates a bound instrument for this ValueRecorder. The labels are | ||||
| // associated with values recorded via subsequent calls to Record. | ||||
| func (c Float64ValueRecorder) Bind(labels ...label.KeyValue) (h BoundFloat64ValueRecorder) { | ||||
| func (c Float64ValueRecorder) Bind(labels ...attribute.KeyValue) (h BoundFloat64ValueRecorder) { | ||||
| 	h.syncBoundInstrument = c.bind(labels) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Bind creates a bound instrument for this ValueRecorder. The labels are | ||||
| // associated with values recorded via subsequent calls to Record. | ||||
| func (c Int64ValueRecorder) Bind(labels ...label.KeyValue) (h BoundInt64ValueRecorder) { | ||||
| func (c Int64ValueRecorder) Bind(labels ...attribute.KeyValue) (h BoundInt64ValueRecorder) { | ||||
| 	h.syncBoundInstrument = c.bind(labels) | ||||
| 	return | ||||
| } | ||||
| @@ -753,14 +753,14 @@ func (c Int64ValueRecorder) Measurement(value int64) Measurement { | ||||
| // Record adds a new value to the list of ValueRecorder's records. The | ||||
| // labels should contain the keys and values to be associated with | ||||
| // this value. | ||||
| func (c Float64ValueRecorder) Record(ctx context.Context, value float64, labels ...label.KeyValue) { | ||||
| func (c Float64ValueRecorder) Record(ctx context.Context, value float64, labels ...attribute.KeyValue) { | ||||
| 	c.directRecord(ctx, number.NewFloat64Number(value), labels) | ||||
| } | ||||
|  | ||||
| // Record adds a new value to the ValueRecorder's distribution. The | ||||
| // labels should contain the keys and values to be associated with | ||||
| // this value. | ||||
| func (c Int64ValueRecorder) Record(ctx context.Context, value int64, labels ...label.KeyValue) { | ||||
| func (c Int64ValueRecorder) Record(ctx context.Context, value int64, labels ...attribute.KeyValue) { | ||||
| 	c.directRecord(ctx, number.NewInt64Number(value), labels) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -17,7 +17,7 @@ package metric // import "go.opentelemetry.io/otel/metric" | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| ) | ||||
|  | ||||
| @@ -51,9 +51,9 @@ func (noopBoundInstrument) RecordOne(context.Context, number.Number) { | ||||
| func (noopBoundInstrument) Unbind() { | ||||
| } | ||||
|  | ||||
| func (NoopSync) Bind([]label.KeyValue) BoundSyncImpl { | ||||
| func (NoopSync) Bind([]attribute.KeyValue) BoundSyncImpl { | ||||
| 	return noopBoundInstrument{} | ||||
| } | ||||
|  | ||||
| func (NoopSync) RecordOne(context.Context, number.Number, []label.KeyValue) { | ||||
| func (NoopSync) RecordOne(context.Context, number.Number, []attribute.KeyValue) { | ||||
| } | ||||
|   | ||||
| @@ -17,7 +17,7 @@ package metric // import "go.opentelemetry.io/otel/metric" | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| ) | ||||
|  | ||||
| @@ -25,7 +25,7 @@ import ( | ||||
| // implementation. | ||||
| type MeterImpl interface { | ||||
| 	// RecordBatch atomically records a batch of measurements. | ||||
| 	RecordBatch(ctx context.Context, labels []label.KeyValue, measurement ...Measurement) | ||||
| 	RecordBatch(ctx context.Context, labels []attribute.KeyValue, measurement ...Measurement) | ||||
|  | ||||
| 	// NewSyncInstrument returns a newly constructed | ||||
| 	// synchronous instrument implementation or an error, should | ||||
| @@ -60,10 +60,10 @@ type SyncImpl interface { | ||||
|  | ||||
| 	// Bind creates an implementation-level bound instrument, | ||||
| 	// binding a label set with this instrument implementation. | ||||
| 	Bind(labels []label.KeyValue) BoundSyncImpl | ||||
| 	Bind(labels []attribute.KeyValue) BoundSyncImpl | ||||
|  | ||||
| 	// RecordOne captures a single synchronous metric event. | ||||
| 	RecordOne(ctx context.Context, number number.Number, labels []label.KeyValue) | ||||
| 	RecordOne(ctx context.Context, number number.Number, labels []attribute.KeyValue) | ||||
| } | ||||
|  | ||||
| // BoundSyncImpl is the implementation-level interface to a | ||||
|   | ||||
| @@ -19,7 +19,7 @@ import ( | ||||
| 	"errors" | ||||
| 	"testing" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	"go.opentelemetry.io/otel/oteltest" | ||||
| @@ -119,7 +119,7 @@ func TestPrecomputedSum(t *testing.T) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func checkSyncBatches(ctx context.Context, t *testing.T, labels []label.KeyValue, mock *oteltest.MeterImpl, nkind number.Kind, mkind metric.InstrumentKind, instrument metric.InstrumentImpl, expected ...float64) { | ||||
| func checkSyncBatches(ctx context.Context, t *testing.T, labels []attribute.KeyValue, mock *oteltest.MeterImpl, nkind number.Kind, mkind metric.InstrumentKind, instrument metric.InstrumentImpl, expected ...float64) { | ||||
| 	t.Helper() | ||||
|  | ||||
| 	batchesCount := len(mock.MeasurementBatches) | ||||
| @@ -213,7 +213,7 @@ func TestCounter(t *testing.T) { | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		c := Must(meter).NewFloat64Counter("test.counter.float") | ||||
| 		ctx := context.Background() | ||||
| 		labels := []label.KeyValue{label.String("A", "B")} | ||||
| 		labels := []attribute.KeyValue{attribute.String("A", "B")} | ||||
| 		c.Add(ctx, 1994.1, labels...) | ||||
| 		boundInstrument := c.Bind(labels...) | ||||
| 		boundInstrument.Add(ctx, -742) | ||||
| @@ -226,7 +226,7 @@ func TestCounter(t *testing.T) { | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		c := Must(meter).NewInt64Counter("test.counter.int") | ||||
| 		ctx := context.Background() | ||||
| 		labels := []label.KeyValue{label.String("A", "B"), label.String("C", "D")} | ||||
| 		labels := []attribute.KeyValue{attribute.String("A", "B"), attribute.String("C", "D")} | ||||
| 		c.Add(ctx, 42, labels...) | ||||
| 		boundInstrument := c.Bind(labels...) | ||||
| 		boundInstrument.Add(ctx, 4200) | ||||
| @@ -240,7 +240,7 @@ func TestCounter(t *testing.T) { | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		c := Must(meter).NewInt64UpDownCounter("test.updowncounter.int") | ||||
| 		ctx := context.Background() | ||||
| 		labels := []label.KeyValue{label.String("A", "B"), label.String("C", "D")} | ||||
| 		labels := []attribute.KeyValue{attribute.String("A", "B"), attribute.String("C", "D")} | ||||
| 		c.Add(ctx, 100, labels...) | ||||
| 		boundInstrument := c.Bind(labels...) | ||||
| 		boundInstrument.Add(ctx, -100) | ||||
| @@ -253,7 +253,7 @@ func TestCounter(t *testing.T) { | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		c := Must(meter).NewFloat64UpDownCounter("test.updowncounter.float") | ||||
| 		ctx := context.Background() | ||||
| 		labels := []label.KeyValue{label.String("A", "B"), label.String("C", "D")} | ||||
| 		labels := []attribute.KeyValue{attribute.String("A", "B"), attribute.String("C", "D")} | ||||
| 		c.Add(ctx, 100.1, labels...) | ||||
| 		boundInstrument := c.Bind(labels...) | ||||
| 		boundInstrument.Add(ctx, -76) | ||||
| @@ -269,7 +269,7 @@ func TestValueRecorder(t *testing.T) { | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		m := Must(meter).NewFloat64ValueRecorder("test.valuerecorder.float") | ||||
| 		ctx := context.Background() | ||||
| 		labels := []label.KeyValue{} | ||||
| 		labels := []attribute.KeyValue{} | ||||
| 		m.Record(ctx, 42, labels...) | ||||
| 		boundInstrument := m.Bind(labels...) | ||||
| 		boundInstrument.Record(ctx, 0) | ||||
| @@ -282,7 +282,7 @@ func TestValueRecorder(t *testing.T) { | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		m := Must(meter).NewInt64ValueRecorder("test.valuerecorder.int") | ||||
| 		ctx := context.Background() | ||||
| 		labels := []label.KeyValue{label.Int("I", 1)} | ||||
| 		labels := []attribute.KeyValue{attribute.Int("I", 1)} | ||||
| 		m.Record(ctx, 173, labels...) | ||||
| 		boundInstrument := m.Bind(labels...) | ||||
| 		boundInstrument.Record(ctx, 80) | ||||
| @@ -295,7 +295,7 @@ func TestValueRecorder(t *testing.T) { | ||||
|  | ||||
| func TestObserverInstruments(t *testing.T) { | ||||
| 	t.Run("float valueobserver", func(t *testing.T) { | ||||
| 		labels := []label.KeyValue{label.String("O", "P")} | ||||
| 		labels := []attribute.KeyValue{attribute.String("O", "P")} | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		o := Must(meter).NewFloat64ValueObserver("test.valueobserver.float", func(_ context.Context, result metric.Float64ObserverResult) { | ||||
| 			result.Observe(42.1, labels...) | ||||
| @@ -306,7 +306,7 @@ func TestObserverInstruments(t *testing.T) { | ||||
| 		) | ||||
| 	}) | ||||
| 	t.Run("int valueobserver", func(t *testing.T) { | ||||
| 		labels := []label.KeyValue{} | ||||
| 		labels := []attribute.KeyValue{} | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		o := Must(meter).NewInt64ValueObserver("test.observer.int", func(_ context.Context, result metric.Int64ObserverResult) { | ||||
| 			result.Observe(-142, labels...) | ||||
| @@ -317,7 +317,7 @@ func TestObserverInstruments(t *testing.T) { | ||||
| 		) | ||||
| 	}) | ||||
| 	t.Run("float sumobserver", func(t *testing.T) { | ||||
| 		labels := []label.KeyValue{label.String("O", "P")} | ||||
| 		labels := []attribute.KeyValue{attribute.String("O", "P")} | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		o := Must(meter).NewFloat64SumObserver("test.sumobserver.float", func(_ context.Context, result metric.Float64ObserverResult) { | ||||
| 			result.Observe(42.1, labels...) | ||||
| @@ -328,7 +328,7 @@ func TestObserverInstruments(t *testing.T) { | ||||
| 		) | ||||
| 	}) | ||||
| 	t.Run("int sumobserver", func(t *testing.T) { | ||||
| 		labels := []label.KeyValue{} | ||||
| 		labels := []attribute.KeyValue{} | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		o := Must(meter).NewInt64SumObserver("test.observer.int", func(_ context.Context, result metric.Int64ObserverResult) { | ||||
| 			result.Observe(-142, labels...) | ||||
| @@ -339,7 +339,7 @@ func TestObserverInstruments(t *testing.T) { | ||||
| 		) | ||||
| 	}) | ||||
| 	t.Run("float updownsumobserver", func(t *testing.T) { | ||||
| 		labels := []label.KeyValue{label.String("O", "P")} | ||||
| 		labels := []attribute.KeyValue{attribute.String("O", "P")} | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		o := Must(meter).NewFloat64UpDownSumObserver("test.updownsumobserver.float", func(_ context.Context, result metric.Float64ObserverResult) { | ||||
| 			result.Observe(42.1, labels...) | ||||
| @@ -350,7 +350,7 @@ func TestObserverInstruments(t *testing.T) { | ||||
| 		) | ||||
| 	}) | ||||
| 	t.Run("int updownsumobserver", func(t *testing.T) { | ||||
| 		labels := []label.KeyValue{} | ||||
| 		labels := []attribute.KeyValue{} | ||||
| 		mockSDK, meter := oteltest.NewMeter() | ||||
| 		o := Must(meter).NewInt64UpDownSumObserver("test.observer.int", func(_ context.Context, result metric.Int64ObserverResult) { | ||||
| 			result.Observe(-142, labels...) | ||||
| @@ -368,9 +368,9 @@ func TestBatchObserverInstruments(t *testing.T) { | ||||
| 	var obs1 metric.Int64ValueObserver | ||||
| 	var obs2 metric.Float64ValueObserver | ||||
|  | ||||
| 	labels := []label.KeyValue{ | ||||
| 		label.String("A", "B"), | ||||
| 		label.String("C", "D"), | ||||
| 	labels := []attribute.KeyValue{ | ||||
| 		attribute.String("A", "B"), | ||||
| 		attribute.String("C", "D"), | ||||
| 	} | ||||
|  | ||||
| 	cb := Must(meter).NewBatchObserver( | ||||
| @@ -407,7 +407,7 @@ func TestBatchObserverInstruments(t *testing.T) { | ||||
| 	require.Equal(t, 0, m2.Number.CompareNumber(number.Float64Kind, oteltest.ResolveNumberByKind(t, number.Float64Kind, 42))) | ||||
| } | ||||
|  | ||||
| func checkObserverBatch(t *testing.T, labels []label.KeyValue, mock *oteltest.MeterImpl, nkind number.Kind, mkind metric.InstrumentKind, observer metric.AsyncImpl, expected float64) { | ||||
| func checkObserverBatch(t *testing.T, labels []attribute.KeyValue, mock *oteltest.MeterImpl, nkind number.Kind, mkind metric.InstrumentKind, observer metric.AsyncImpl, expected float64) { | ||||
| 	t.Helper() | ||||
| 	assert.Len(t, mock.MeasurementBatches, 1) | ||||
| 	if len(mock.MeasurementBatches) < 1 { | ||||
| @@ -435,7 +435,7 @@ type testWrappedMeter struct { | ||||
|  | ||||
| var _ metric.MeterImpl = testWrappedMeter{} | ||||
|  | ||||
| func (testWrappedMeter) RecordBatch(context.Context, []label.KeyValue, ...metric.Measurement) { | ||||
| func (testWrappedMeter) RecordBatch(context.Context, []attribute.KeyValue, ...metric.Measurement) { | ||||
| } | ||||
|  | ||||
| func (testWrappedMeter) NewSyncInstrument(_ metric.Descriptor) (metric.SyncImpl, error) { | ||||
|   | ||||
| @@ -19,7 +19,7 @@ import ( | ||||
| 	"fmt" | ||||
| 	"sync" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| ) | ||||
|  | ||||
| @@ -75,7 +75,7 @@ func NewUniqueInstrumentMeterImpl(impl metric.MeterImpl) metric.MeterImpl { | ||||
| } | ||||
|  | ||||
| // RecordBatch implements metric.MeterImpl. | ||||
| func (u *uniqueInstrumentMeterImpl) RecordBatch(ctx context.Context, labels []label.KeyValue, ms ...metric.Measurement) { | ||||
| func (u *uniqueInstrumentMeterImpl) RecordBatch(ctx context.Context, labels []attribute.KeyValue, ms ...metric.Measurement) { | ||||
| 	u.impl.RecordBatch(ctx, labels, ms...) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -17,12 +17,12 @@ package oteltest // import "go.opentelemetry.io/otel/oteltest" | ||||
| import ( | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
|  | ||||
| // Event encapsulates the properties of calls to AddEvent. | ||||
| type Event struct { | ||||
| 	Timestamp  time.Time | ||||
| 	Name       string | ||||
| 	Attributes map[label.Key]label.Value | ||||
| 	Attributes map[attribute.Key]attribute.Value | ||||
| } | ||||
|   | ||||
| @@ -20,9 +20,9 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/internal/matchers" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| @@ -200,7 +200,7 @@ func (h *Harness) testSpan(tracerFactory func() trace.Tracer) { | ||||
| 			span.SetName("new name") | ||||
| 		}, | ||||
| 		"#SetAttributes": func(span trace.Span) { | ||||
| 			span.SetAttributes(label.String("key1", "value"), label.Int("key2", 123)) | ||||
| 			span.SetAttributes(attribute.String("key1", "value"), attribute.Int("key2", 123)) | ||||
| 		}, | ||||
| 	} | ||||
| 	var mechanisms = map[string]func() trace.Span{ | ||||
|   | ||||
| @@ -19,8 +19,8 @@ import ( | ||||
| 	"sync" | ||||
| 	"testing" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	internalmetric "go.opentelemetry.io/otel/internal/metric" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	"go.opentelemetry.io/otel/metric/registry" | ||||
| @@ -29,14 +29,14 @@ import ( | ||||
| type ( | ||||
| 	Handle struct { | ||||
| 		Instrument *Sync | ||||
| 		Labels     []label.KeyValue | ||||
| 		Labels     []attribute.KeyValue | ||||
| 	} | ||||
|  | ||||
| 	Batch struct { | ||||
| 		// Measurement needs to be aligned for 64-bit atomic operations. | ||||
| 		Measurements []Measurement | ||||
| 		Ctx          context.Context | ||||
| 		Labels       []label.KeyValue | ||||
| 		Labels       []attribute.KeyValue | ||||
| 		LibraryName  string | ||||
| 	} | ||||
|  | ||||
| @@ -90,14 +90,14 @@ func (s *Sync) Implementation() interface{} { | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| func (s *Sync) Bind(labels []label.KeyValue) metric.BoundSyncImpl { | ||||
| func (s *Sync) Bind(labels []attribute.KeyValue) metric.BoundSyncImpl { | ||||
| 	return &Handle{ | ||||
| 		Instrument: s, | ||||
| 		Labels:     labels, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *Sync) RecordOne(ctx context.Context, number number.Number, labels []label.KeyValue) { | ||||
| func (s *Sync) RecordOne(ctx context.Context, number number.Number, labels []attribute.KeyValue) { | ||||
| 	s.meter.doRecordSingle(ctx, labels, s, number) | ||||
| } | ||||
|  | ||||
| @@ -108,7 +108,7 @@ func (h *Handle) RecordOne(ctx context.Context, number number.Number) { | ||||
| func (h *Handle) Unbind() { | ||||
| } | ||||
|  | ||||
| func (m *MeterImpl) doRecordSingle(ctx context.Context, labels []label.KeyValue, instrument metric.InstrumentImpl, number number.Number) { | ||||
| func (m *MeterImpl) doRecordSingle(ctx context.Context, labels []attribute.KeyValue, instrument metric.InstrumentImpl, number number.Number) { | ||||
| 	m.collect(ctx, labels, []Measurement{{ | ||||
| 		Instrument: instrument, | ||||
| 		Number:     number, | ||||
| @@ -154,7 +154,7 @@ func (m *MeterImpl) NewAsyncInstrument(descriptor metric.Descriptor, runner metr | ||||
| 	return a, nil | ||||
| } | ||||
|  | ||||
| func (m *MeterImpl) RecordBatch(ctx context.Context, labels []label.KeyValue, measurements ...metric.Measurement) { | ||||
| func (m *MeterImpl) RecordBatch(ctx context.Context, labels []attribute.KeyValue, measurements ...metric.Measurement) { | ||||
| 	mm := make([]Measurement, len(measurements)) | ||||
| 	for i := 0; i < len(measurements); i++ { | ||||
| 		m := measurements[i] | ||||
| @@ -166,7 +166,7 @@ func (m *MeterImpl) RecordBatch(ctx context.Context, labels []label.KeyValue, me | ||||
| 	m.collect(ctx, labels, mm) | ||||
| } | ||||
|  | ||||
| func (m *MeterImpl) CollectAsync(labels []label.KeyValue, obs ...metric.Observation) { | ||||
| func (m *MeterImpl) CollectAsync(labels []attribute.KeyValue, obs ...metric.Observation) { | ||||
| 	mm := make([]Measurement, len(obs)) | ||||
| 	for i := 0; i < len(obs); i++ { | ||||
| 		o := obs[i] | ||||
| @@ -178,7 +178,7 @@ func (m *MeterImpl) CollectAsync(labels []label.KeyValue, obs ...metric.Observat | ||||
| 	m.collect(context.Background(), labels, mm) | ||||
| } | ||||
|  | ||||
| func (m *MeterImpl) collect(ctx context.Context, labels []label.KeyValue, measurements []Measurement) { | ||||
| func (m *MeterImpl) collect(ctx context.Context, labels []attribute.KeyValue, measurements []Measurement) { | ||||
| 	m.lock.Lock() | ||||
| 	defer m.lock.Unlock() | ||||
|  | ||||
| @@ -199,13 +199,13 @@ type Measured struct { | ||||
| 	Name                   string | ||||
| 	InstrumentationName    string | ||||
| 	InstrumentationVersion string | ||||
| 	Labels                 map[label.Key]label.Value | ||||
| 	Labels                 map[attribute.Key]attribute.Value | ||||
| 	Number                 number.Number | ||||
| } | ||||
|  | ||||
| // LabelsToMap converts label set to keyValue map, to be easily used in tests | ||||
| func LabelsToMap(kvs ...label.KeyValue) map[label.Key]label.Value { | ||||
| 	m := map[label.Key]label.Value{} | ||||
| func LabelsToMap(kvs ...attribute.KeyValue) map[attribute.Key]attribute.Value { | ||||
| 	m := map[attribute.Key]attribute.Value{} | ||||
| 	for _, label := range kvs { | ||||
| 		m[label.Key] = label.Value | ||||
| 	} | ||||
|   | ||||
| @@ -20,14 +20,14 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	errorTypeKey    = label.Key("error.type") | ||||
| 	errorMessageKey = label.Key("error.message") | ||||
| 	errorTypeKey    = attribute.Key("error.type") | ||||
| 	errorMessageKey = attribute.Key("error.message") | ||||
| 	errorEventName  = "error" | ||||
| ) | ||||
|  | ||||
| @@ -45,7 +45,7 @@ type Span struct { | ||||
| 	endTime       time.Time | ||||
| 	statusCode    codes.Code | ||||
| 	statusMessage string | ||||
| 	attributes    map[label.Key]label.Value | ||||
| 	attributes    map[attribute.Key]attribute.Value | ||||
| 	events        []Event | ||||
| 	links         []trace.Link | ||||
| 	spanKind      trace.SpanKind | ||||
| @@ -111,9 +111,9 @@ func (s *Span) AddEvent(name string, o ...trace.EventOption) { | ||||
|  | ||||
| 	c := trace.NewEventConfig(o...) | ||||
|  | ||||
| 	var attributes map[label.Key]label.Value | ||||
| 	var attributes map[attribute.Key]attribute.Value | ||||
| 	if l := len(c.Attributes); l > 0 { | ||||
| 		attributes = make(map[label.Key]label.Value, l) | ||||
| 		attributes = make(map[attribute.Key]attribute.Value, l) | ||||
| 		for _, attr := range c.Attributes { | ||||
| 			attributes[attr.Key] = attr.Value | ||||
| 		} | ||||
| @@ -162,7 +162,7 @@ func (s *Span) SetName(name string) { | ||||
| } | ||||
|  | ||||
| // SetAttributes sets attrs as attributes of s. | ||||
| func (s *Span) SetAttributes(attrs ...label.KeyValue) { | ||||
| func (s *Span) SetAttributes(attrs ...attribute.KeyValue) { | ||||
| 	s.lock.Lock() | ||||
| 	defer s.lock.Unlock() | ||||
|  | ||||
| @@ -187,11 +187,11 @@ func (s *Span) ParentSpanID() trace.SpanID { return s.parentSpanID } | ||||
| // Attributes returns the attributes set on s, either at or after creation | ||||
| // time. If the same attribute key was set multiple times, the last call will | ||||
| // be used. Attributes cannot be changed after End has been called on s. | ||||
| func (s *Span) Attributes() map[label.Key]label.Value { | ||||
| func (s *Span) Attributes() map[attribute.Key]attribute.Value { | ||||
| 	s.lock.RLock() | ||||
| 	defer s.lock.RUnlock() | ||||
|  | ||||
| 	attributes := make(map[label.Key]label.Value) | ||||
| 	attributes := make(map[attribute.Key]attribute.Value) | ||||
|  | ||||
| 	for k, v := range s.attributes { | ||||
| 		attributes[k] = v | ||||
|   | ||||
| @@ -22,10 +22,10 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	ottest "go.opentelemetry.io/otel/internal/internaltest" | ||||
| 	"go.opentelemetry.io/otel/internal/matchers" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/oteltest" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
| @@ -161,9 +161,9 @@ func TestSpan(t *testing.T) { | ||||
| 				expectedEvents := []oteltest.Event{{ | ||||
| 					Timestamp: testTime, | ||||
| 					Name:      "error", | ||||
| 					Attributes: map[label.Key]label.Value{ | ||||
| 						label.Key("error.type"):    label.StringValue(s.typ), | ||||
| 						label.Key("error.message"): label.StringValue(s.msg), | ||||
| 					Attributes: map[attribute.Key]attribute.Value{ | ||||
| 						attribute.Key("error.type"):    attribute.StringValue(s.typ), | ||||
| 						attribute.Key("error.message"): attribute.StringValue(s.msg), | ||||
| 					}, | ||||
| 				}} | ||||
| 				e.Expect(subject.Events()).ToEqual(expectedEvents) | ||||
| @@ -191,9 +191,9 @@ func TestSpan(t *testing.T) { | ||||
| 			expectedEvents := []oteltest.Event{{ | ||||
| 				Timestamp: testTime, | ||||
| 				Name:      "error", | ||||
| 				Attributes: map[label.Key]label.Value{ | ||||
| 					label.Key("error.type"):    label.StringValue("go.opentelemetry.io/otel/internal/internaltest.TestError"), | ||||
| 					label.Key("error.message"): label.StringValue(errMsg), | ||||
| 				Attributes: map[attribute.Key]attribute.Value{ | ||||
| 					attribute.Key("error.type"):    attribute.StringValue("go.opentelemetry.io/otel/internal/internaltest.TestError"), | ||||
| 					attribute.Key("error.message"): attribute.StringValue(errMsg), | ||||
| 				}, | ||||
| 			}} | ||||
| 			e.Expect(subject.Events()).ToEqual(expectedEvents) | ||||
| @@ -330,7 +330,7 @@ func TestSpan(t *testing.T) { | ||||
| 			subject, ok := span.(*oteltest.Span) | ||||
| 			e.Expect(ok).ToBeTrue() | ||||
|  | ||||
| 			e.Expect(subject.Attributes()).ToEqual(map[label.Key]label.Value{}) | ||||
| 			e.Expect(subject.Attributes()).ToEqual(map[attribute.Key]attribute.Value{}) | ||||
| 		}) | ||||
|  | ||||
| 		t.Run("returns the most recently set attributes", func(t *testing.T) { | ||||
| @@ -344,9 +344,9 @@ func TestSpan(t *testing.T) { | ||||
| 			subject, ok := span.(*oteltest.Span) | ||||
| 			e.Expect(ok).ToBeTrue() | ||||
|  | ||||
| 			attr1 := label.String("key1", "value1") | ||||
| 			attr2 := label.String("key2", "value2") | ||||
| 			attr3 := label.String("key3", "value3") | ||||
| 			attr1 := attribute.String("key1", "value1") | ||||
| 			attr2 := attribute.String("key2", "value2") | ||||
| 			attr3 := attribute.String("key3", "value3") | ||||
| 			unexpectedAttr := attr2.Key.String("unexpected") | ||||
|  | ||||
| 			subject.SetAttributes(attr1, unexpectedAttr, attr3) | ||||
| @@ -370,7 +370,7 @@ func TestSpan(t *testing.T) { | ||||
| 			subject, ok := span.(*oteltest.Span) | ||||
| 			e.Expect(ok).ToBeTrue() | ||||
|  | ||||
| 			expectedAttr := label.String("key", "value") | ||||
| 			expectedAttr := attribute.String("key", "value") | ||||
| 			subject.SetAttributes(expectedAttr) | ||||
| 			subject.End() | ||||
|  | ||||
| @@ -400,7 +400,7 @@ func TestSpan(t *testing.T) { | ||||
| 			go func() { | ||||
| 				defer wg.Done() | ||||
|  | ||||
| 				subject.SetAttributes(label.String("key", "value")) | ||||
| 				subject.SetAttributes(attribute.String("key", "value")) | ||||
| 			}() | ||||
|  | ||||
| 			go func() { | ||||
| @@ -458,9 +458,9 @@ func TestSpan(t *testing.T) { | ||||
| 			e.Expect(ok).ToBeTrue() | ||||
|  | ||||
| 			event1Name := "event1" | ||||
| 			event1Attributes := []label.KeyValue{ | ||||
| 				label.String("event1Attr1", "foo"), | ||||
| 				label.String("event1Attr2", "bar"), | ||||
| 			event1Attributes := []attribute.KeyValue{ | ||||
| 				attribute.String("event1Attr1", "foo"), | ||||
| 				attribute.String("event1Attr2", "bar"), | ||||
| 			} | ||||
|  | ||||
| 			event1Start := time.Now() | ||||
| @@ -469,8 +469,8 @@ func TestSpan(t *testing.T) { | ||||
|  | ||||
| 			event2Timestamp := time.Now().AddDate(5, 0, 0) | ||||
| 			event2Name := "event1" | ||||
| 			event2Attributes := []label.KeyValue{ | ||||
| 				label.String("event2Attr", "abc"), | ||||
| 			event2Attributes := []attribute.KeyValue{ | ||||
| 				attribute.String("event2Attr", "abc"), | ||||
| 			} | ||||
|  | ||||
| 			subject.AddEvent(event2Name, trace.WithTimestamp(event2Timestamp), trace.WithAttributes(event2Attributes...)) | ||||
|   | ||||
| @@ -18,7 +18,7 @@ import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| @@ -46,7 +46,7 @@ func (t *Tracer) Start(ctx context.Context, name string, opts ...trace.SpanOptio | ||||
| 	span := &Span{ | ||||
| 		tracer:     t, | ||||
| 		startTime:  startTime, | ||||
| 		attributes: make(map[label.Key]label.Value), | ||||
| 		attributes: make(map[attribute.Key]attribute.Value), | ||||
| 		links:      []trace.Link{}, | ||||
| 		spanKind:   c.SpanKind, | ||||
| 	} | ||||
| @@ -54,17 +54,17 @@ func (t *Tracer) Start(ctx context.Context, name string, opts ...trace.SpanOptio | ||||
| 	if c.NewRoot { | ||||
| 		span.spanContext = trace.SpanContext{} | ||||
|  | ||||
| 		iodKey := label.Key("ignored-on-demand") | ||||
| 		iodKey := attribute.Key("ignored-on-demand") | ||||
| 		if lsc := trace.SpanContextFromContext(ctx); lsc.IsValid() { | ||||
| 			span.links = append(span.links, trace.Link{ | ||||
| 				SpanContext: lsc, | ||||
| 				Attributes:  []label.KeyValue{iodKey.String("current")}, | ||||
| 				Attributes:  []attribute.KeyValue{iodKey.String("current")}, | ||||
| 			}) | ||||
| 		} | ||||
| 		if rsc := trace.RemoteSpanContextFromContext(ctx); rsc.IsValid() { | ||||
| 			span.links = append(span.links, trace.Link{ | ||||
| 				SpanContext: rsc, | ||||
| 				Attributes:  []label.KeyValue{iodKey.String("remote")}, | ||||
| 				Attributes:  []attribute.KeyValue{iodKey.String("remote")}, | ||||
| 			}) | ||||
| 		} | ||||
| 	} else { | ||||
|   | ||||
| @@ -22,8 +22,8 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/internal/matchers" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/oteltest" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
| @@ -67,8 +67,8 @@ func TestTracer(t *testing.T) { | ||||
|  | ||||
| 			e := matchers.NewExpecter(t) | ||||
|  | ||||
| 			attr1 := label.String("a", "1") | ||||
| 			attr2 := label.String("b", "2") | ||||
| 			attr1 := attribute.String("a", "1") | ||||
| 			attr2 := attribute.String("b", "2") | ||||
|  | ||||
| 			subject := tp.Tracer(t.Name()) | ||||
| 			_, span := subject.Start(context.Background(), "test", trace.WithAttributes(attr1, attr2)) | ||||
| @@ -200,14 +200,14 @@ func TestTracer(t *testing.T) { | ||||
| 			expectedLinks := []trace.Link{ | ||||
| 				{ | ||||
| 					SpanContext: parentSpanContext, | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.String("ignored-on-demand", "current"), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.String("ignored-on-demand", "current"), | ||||
| 					}, | ||||
| 				}, | ||||
| 				{ | ||||
| 					SpanContext: remoteParentSpanContext, | ||||
| 					Attributes: []label.KeyValue{ | ||||
| 						label.String("ignored-on-demand", "remote"), | ||||
| 					Attributes: []attribute.KeyValue{ | ||||
| 						attribute.String("ignored-on-demand", "remote"), | ||||
| 					}, | ||||
| 				}, | ||||
| 			} | ||||
| @@ -225,16 +225,16 @@ func TestTracer(t *testing.T) { | ||||
| 			_, span := subject.Start(context.Background(), "link1") | ||||
| 			link1 := trace.Link{ | ||||
| 				SpanContext: span.SpanContext(), | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.String("a", "1"), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.String("a", "1"), | ||||
| 				}, | ||||
| 			} | ||||
|  | ||||
| 			_, span = subject.Start(context.Background(), "link2") | ||||
| 			link2 := trace.Link{ | ||||
| 				SpanContext: span.SpanContext(), | ||||
| 				Attributes: []label.KeyValue{ | ||||
| 					label.String("b", "2"), | ||||
| 				Attributes: []attribute.KeyValue{ | ||||
| 					attribute.String("b", "2"), | ||||
| 				}, | ||||
| 			} | ||||
|  | ||||
|   | ||||
| @@ -19,8 +19,8 @@ import ( | ||||
| 	"net/url" | ||||
| 	"strings" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/internal/baggage" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| ) | ||||
|  | ||||
| const baggageHeader = "baggage" | ||||
| @@ -38,7 +38,7 @@ func (b Baggage) Inject(ctx context.Context, carrier TextMapCarrier) { | ||||
| 	baggageMap := baggage.MapFromContext(ctx) | ||||
| 	firstIter := true | ||||
| 	var headerValueBuilder strings.Builder | ||||
| 	baggageMap.Foreach(func(kv label.KeyValue) bool { | ||||
| 	baggageMap.Foreach(func(kv attribute.KeyValue) bool { | ||||
| 		if !firstIter { | ||||
| 			headerValueBuilder.WriteRune(',') | ||||
| 		} | ||||
| @@ -62,7 +62,7 @@ func (b Baggage) Extract(parent context.Context, carrier TextMapCarrier) context | ||||
| 	} | ||||
|  | ||||
| 	baggageValues := strings.Split(bVal, ",") | ||||
| 	keyValues := make([]label.KeyValue, 0, len(baggageValues)) | ||||
| 	keyValues := make([]attribute.KeyValue, 0, len(baggageValues)) | ||||
| 	for _, baggageValue := range baggageValues { | ||||
| 		valueAndProps := strings.Split(baggageValue, ";") | ||||
| 		if len(valueAndProps) < 1 { | ||||
| @@ -92,7 +92,7 @@ func (b Baggage) Extract(parent context.Context, carrier TextMapCarrier) context | ||||
| 			trimmedValueWithProps.WriteString(prop) | ||||
| 		} | ||||
|  | ||||
| 		keyValues = append(keyValues, label.String(trimmedName, trimmedValueWithProps.String())) | ||||
| 		keyValues = append(keyValues, attribute.String(trimmedName, trimmedValueWithProps.String())) | ||||
| 	} | ||||
|  | ||||
| 	if len(keyValues) > 0 { | ||||
|   | ||||
| @@ -22,8 +22,8 @@ import ( | ||||
|  | ||||
| 	"github.com/google/go-cmp/cmp" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/internal/baggage" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/propagation" | ||||
| ) | ||||
|  | ||||
| @@ -32,54 +32,54 @@ func TestExtractValidBaggageFromHTTPReq(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		name    string | ||||
| 		header  string | ||||
| 		wantKVs []label.KeyValue | ||||
| 		wantKVs []attribute.KeyValue | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:   "valid w3cHeader", | ||||
| 			header: "key1=val1,key2=val2", | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.String("key2", "val2"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "valid w3cHeader with spaces", | ||||
| 			header: "key1 =   val1,  key2 =val2   ", | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.String("key2", "val2"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "valid w3cHeader with properties", | ||||
| 			header: "key1=val1,key2=val2;prop=1", | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.String("key2", "val2;prop=1"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.String("key2", "val2;prop=1"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "valid header with url-escaped comma", | ||||
| 			header: "key1=val1,key2=val2%2Cval3", | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.String("key2", "val2,val3"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.String("key2", "val2,val3"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "valid header with an invalid header", | ||||
| 			header: "key1=val1,key2=val2,a,val3", | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.String("key2", "val2"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "valid header with no value", | ||||
| 			header: "key1=,key2=val2", | ||||
| 			wantKVs: []label.KeyValue{ | ||||
| 				label.String("key1", ""), | ||||
| 				label.String("key2", "val2"), | ||||
| 			wantKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", ""), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| @@ -101,9 +101,9 @@ func TestExtractValidBaggageFromHTTPReq(t *testing.T) { | ||||
| 				) | ||||
| 			} | ||||
| 			totalDiff := "" | ||||
| 			wantBaggage.Foreach(func(keyValue label.KeyValue) bool { | ||||
| 			wantBaggage.Foreach(func(keyValue attribute.KeyValue) bool { | ||||
| 				val, _ := gotBaggage.Value(keyValue.Key) | ||||
| 				diff := cmp.Diff(keyValue, label.KeyValue{Key: keyValue.Key, Value: val}, cmp.AllowUnexported(label.Value{})) | ||||
| 				diff := cmp.Diff(keyValue, attribute.KeyValue{Key: keyValue.Key, Value: val}, cmp.AllowUnexported(attribute.Value{})) | ||||
| 				if diff != "" { | ||||
| 					totalDiff += diff + "\n" | ||||
| 				} | ||||
| @@ -121,7 +121,7 @@ func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		name   string | ||||
| 		header string | ||||
| 		hasKVs []label.KeyValue | ||||
| 		hasKVs []attribute.KeyValue | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:   "no key values", | ||||
| @@ -130,17 +130,17 @@ func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { | ||||
| 		{ | ||||
| 			name:   "invalid header with existing context", | ||||
| 			header: "header2", | ||||
| 			hasKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.String("key2", "val2"), | ||||
| 			hasKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:   "empty header value", | ||||
| 			header: "", | ||||
| 			hasKVs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.String("key2", "val2"), | ||||
| 			hasKVs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| @@ -162,9 +162,9 @@ func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { | ||||
| 				) | ||||
| 			} | ||||
| 			totalDiff := "" | ||||
| 			wantBaggage.Foreach(func(keyValue label.KeyValue) bool { | ||||
| 			wantBaggage.Foreach(func(keyValue attribute.KeyValue) bool { | ||||
| 				val, _ := gotBaggage.Value(keyValue.Key) | ||||
| 				diff := cmp.Diff(keyValue, label.KeyValue{Key: keyValue.Key, Value: val}, cmp.AllowUnexported(label.Value{})) | ||||
| 				diff := cmp.Diff(keyValue, attribute.KeyValue{Key: keyValue.Key, Value: val}, cmp.AllowUnexported(attribute.Value{})) | ||||
| 				if diff != "" { | ||||
| 					totalDiff += diff + "\n" | ||||
| 				} | ||||
| @@ -178,33 +178,33 @@ func TestInjectBaggageToHTTPReq(t *testing.T) { | ||||
| 	propagator := propagation.Baggage{} | ||||
| 	tests := []struct { | ||||
| 		name         string | ||||
| 		kvs          []label.KeyValue | ||||
| 		kvs          []attribute.KeyValue | ||||
| 		wantInHeader []string | ||||
| 		wantedLen    int | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "two simple values", | ||||
| 			kvs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1"), | ||||
| 				label.String("key2", "val2"), | ||||
| 			kvs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1"), | ||||
| 				attribute.String("key2", "val2"), | ||||
| 			}, | ||||
| 			wantInHeader: []string{"key1=val1", "key2=val2"}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "two values with escaped chars", | ||||
| 			kvs: []label.KeyValue{ | ||||
| 				label.String("key1", "val1,val2"), | ||||
| 				label.String("key2", "val3=4"), | ||||
| 			kvs: []attribute.KeyValue{ | ||||
| 				attribute.String("key1", "val1,val2"), | ||||
| 				attribute.String("key2", "val3=4"), | ||||
| 			}, | ||||
| 			wantInHeader: []string{"key1=val1%2Cval2", "key2=val3%3D4"}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "values of non-string types", | ||||
| 			kvs: []label.KeyValue{ | ||||
| 				label.Bool("key1", true), | ||||
| 				label.Int("key2", 123), | ||||
| 				label.Int64("key3", 123), | ||||
| 				label.Float64("key4", 123.567), | ||||
| 			kvs: []attribute.KeyValue{ | ||||
| 				attribute.Bool("key1", true), | ||||
| 				attribute.Int("key2", 123), | ||||
| 				attribute.Int64("key3", 123), | ||||
| 				attribute.Float64("key4", 123.567), | ||||
| 			}, | ||||
| 			wantInHeader: []string{ | ||||
| 				"key1=true", | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| ) | ||||
|  | ||||
| @@ -151,14 +151,14 @@ func parseTraceState(in string) trace.TraceState { | ||||
| 		return trace.TraceState{} | ||||
| 	} | ||||
|  | ||||
| 	kvs := []label.KeyValue{} | ||||
| 	kvs := []attribute.KeyValue{} | ||||
| 	for _, entry := range strings.Split(in, ",") { | ||||
| 		parts := strings.SplitN(entry, "=", 2) | ||||
| 		if len(parts) != 2 { | ||||
| 			// Parse failure, abort! | ||||
| 			return trace.TraceState{} | ||||
| 		} | ||||
| 		kvs = append(kvs, label.String(parts[0], parts[1])) | ||||
| 		kvs = append(kvs, attribute.String(parts[0], parts[1])) | ||||
| 	} | ||||
|  | ||||
| 	// Ignoring error here as "failure to parse tracestate MUST NOT | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
|  | ||||
| 	"github.com/google/go-cmp/cmp" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/oteltest" | ||||
| 	"go.opentelemetry.io/otel/propagation" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
| @@ -280,7 +280,7 @@ func TestTraceStatePropagation(t *testing.T) { | ||||
| 	prop := propagation.TraceContext{} | ||||
| 	stateHeader := "tracestate" | ||||
| 	parentHeader := "traceparent" | ||||
| 	state, err := trace.TraceStateFromKeyValues(label.String("key1", "value1"), label.String("key2", "value2")) | ||||
| 	state, err := trace.TraceStateFromKeyValues(attribute.String("key1", "value1"), attribute.String("key2", "value2")) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("Unable to construct expected TraceState: %s", err.Error()) | ||||
| 	} | ||||
| @@ -341,7 +341,7 @@ func TestTraceStatePropagation(t *testing.T) { | ||||
| 			if diff := cmp.Diff( | ||||
| 				trace.RemoteSpanContextFromContext(ctx), | ||||
| 				tt.wantSc, | ||||
| 				cmp.AllowUnexported(label.Value{}), | ||||
| 				cmp.AllowUnexported(attribute.Value{}), | ||||
| 				cmp.AllowUnexported(trace.TraceState{}), | ||||
| 			); diff != "" { | ||||
| 				t.Errorf("Extracted tracestate: -got +want %s", diff) | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	"go.opentelemetry.io/otel/sdk/export/metric/aggregation" | ||||
| @@ -267,7 +267,7 @@ type CheckpointSet interface { | ||||
| // steps. | ||||
| type Metadata struct { | ||||
| 	descriptor *metric.Descriptor | ||||
| 	labels     *label.Set | ||||
| 	labels     *attribute.Set | ||||
| 	resource   *resource.Resource | ||||
| } | ||||
|  | ||||
| @@ -295,7 +295,7 @@ func (m Metadata) Descriptor() *metric.Descriptor { | ||||
|  | ||||
| // Labels describes the labels associated with the instrument and the | ||||
| // aggregated data. | ||||
| func (m Metadata) Labels() *label.Set { | ||||
| func (m Metadata) Labels() *attribute.Set { | ||||
| 	return m.labels | ||||
| } | ||||
|  | ||||
| @@ -308,7 +308,7 @@ func (m Metadata) Resource() *resource.Resource { | ||||
| // Accumulations to send to Processors. The Descriptor, Labels, Resource, | ||||
| // and Aggregator represent aggregate metric events received over a single | ||||
| // collection period. | ||||
| func NewAccumulation(descriptor *metric.Descriptor, labels *label.Set, resource *resource.Resource, aggregator Aggregator) Accumulation { | ||||
| func NewAccumulation(descriptor *metric.Descriptor, labels *attribute.Set, resource *resource.Resource, aggregator Aggregator) Accumulation { | ||||
| 	return Accumulation{ | ||||
| 		Metadata: Metadata{ | ||||
| 			descriptor: descriptor, | ||||
| @@ -328,7 +328,7 @@ func (r Accumulation) Aggregator() Aggregator { | ||||
| // NewRecord allows Processor implementations to construct export | ||||
| // records.  The Descriptor, Labels, and Aggregator represent | ||||
| // aggregate metric events received over a single collection period. | ||||
| func NewRecord(descriptor *metric.Descriptor, labels *label.Set, resource *resource.Resource, aggregation aggregation.Aggregation, start, end time.Time) Record { | ||||
| func NewRecord(descriptor *metric.Descriptor, labels *attribute.Set, resource *resource.Resource, aggregation aggregation.Aggregation, start, end time.Time) Record { | ||||
| 	return Record{ | ||||
| 		Metadata: Metadata{ | ||||
| 			descriptor: descriptor, | ||||
|   | ||||
| @@ -17,18 +17,18 @@ package metric | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| ) | ||||
|  | ||||
| var testSlice = []label.KeyValue{ | ||||
| 	label.String("bar", "baz"), | ||||
| 	label.Int("foo", 42), | ||||
| var testSlice = []attribute.KeyValue{ | ||||
| 	attribute.String("bar", "baz"), | ||||
| 	attribute.Int("foo", 42), | ||||
| } | ||||
|  | ||||
| func newIter(slice []label.KeyValue) label.Iterator { | ||||
| 	labels := label.NewSet(slice...) | ||||
| func newIter(slice []attribute.KeyValue) attribute.Iterator { | ||||
| 	labels := attribute.NewSet(slice...) | ||||
| 	return labels.Iter() | ||||
| } | ||||
|  | ||||
| @@ -37,17 +37,17 @@ func TestLabelIterator(t *testing.T) { | ||||
| 	require.Equal(t, 2, iter.Len()) | ||||
|  | ||||
| 	require.True(t, iter.Next()) | ||||
| 	require.Equal(t, label.String("bar", "baz"), iter.Label()) | ||||
| 	require.Equal(t, attribute.String("bar", "baz"), iter.Label()) | ||||
| 	idx, kv := iter.IndexedLabel() | ||||
| 	require.Equal(t, 0, idx) | ||||
| 	require.Equal(t, label.String("bar", "baz"), kv) | ||||
| 	require.Equal(t, attribute.String("bar", "baz"), kv) | ||||
| 	require.Equal(t, 2, iter.Len()) | ||||
|  | ||||
| 	require.True(t, iter.Next()) | ||||
| 	require.Equal(t, label.Int("foo", 42), iter.Label()) | ||||
| 	require.Equal(t, attribute.Int("foo", 42), iter.Label()) | ||||
| 	idx, kv = iter.IndexedLabel() | ||||
| 	require.Equal(t, 1, idx) | ||||
| 	require.Equal(t, label.Int("foo", 42), kv) | ||||
| 	require.Equal(t, attribute.Int("foo", 42), kv) | ||||
| 	require.Equal(t, 2, iter.Len()) | ||||
|  | ||||
| 	require.False(t, iter.Next()) | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -31,7 +31,7 @@ import ( | ||||
|  | ||||
| type mapkey struct { | ||||
| 	desc     *metric.Descriptor | ||||
| 	distinct label.Distinct | ||||
| 	distinct attribute.Distinct | ||||
| } | ||||
|  | ||||
| // CheckpointSet is useful for testing Exporters. | ||||
| @@ -92,8 +92,8 @@ func (p *CheckpointSet) Reset() { | ||||
| // | ||||
| // If there is an existing record with the same descriptor and labels, | ||||
| // the stored aggregator will be returned and should be merged. | ||||
| func (p *CheckpointSet) Add(desc *metric.Descriptor, newAgg export.Aggregator, labels ...label.KeyValue) (agg export.Aggregator, added bool) { | ||||
| 	elabels := label.NewSet(labels...) | ||||
| func (p *CheckpointSet) Add(desc *metric.Descriptor, newAgg export.Aggregator, labels ...attribute.KeyValue) (agg export.Aggregator, added bool) { | ||||
| 	elabels := attribute.NewSet(labels...) | ||||
|  | ||||
| 	key := mapkey{ | ||||
| 		desc:     desc, | ||||
|   | ||||
| @@ -18,8 +18,8 @@ import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/codes" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/trace" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/sdk/instrumentation" | ||||
| @@ -62,7 +62,7 @@ type SpanSnapshot struct { | ||||
| 	// The wall clock time of EndTime will be adjusted to always be offset | ||||
| 	// from StartTime by the duration of the span. | ||||
| 	EndTime                  time.Time | ||||
| 	Attributes               []label.KeyValue | ||||
| 	Attributes               []attribute.KeyValue | ||||
| 	MessageEvents            []trace.Event | ||||
| 	Links                    []trace.Link | ||||
| 	StatusCode               codes.Code | ||||
|   | ||||
| @@ -20,7 +20,7 @@ import ( | ||||
| 	"math/rand" | ||||
| 	"testing" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/global" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -59,8 +59,8 @@ func (f *benchFixture) meterMust() metric.MeterMust { | ||||
| 	return metric.Must(f.meter) | ||||
| } | ||||
|  | ||||
| func makeManyLabels(n int) [][]label.KeyValue { | ||||
| 	r := make([][]label.KeyValue, n) | ||||
| func makeManyLabels(n int) [][]attribute.KeyValue { | ||||
| 	r := make([][]attribute.KeyValue, n) | ||||
|  | ||||
| 	for i := 0; i < n; i++ { | ||||
| 		r[i] = makeLabels(1) | ||||
| @@ -69,9 +69,9 @@ func makeManyLabels(n int) [][]label.KeyValue { | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| func makeLabels(n int) []label.KeyValue { | ||||
| func makeLabels(n int) []attribute.KeyValue { | ||||
| 	used := map[string]bool{} | ||||
| 	l := make([]label.KeyValue, n) | ||||
| 	l := make([]attribute.KeyValue, n) | ||||
| 	for i := 0; i < n; i++ { | ||||
| 		var k string | ||||
| 		for { | ||||
| @@ -81,7 +81,7 @@ func makeLabels(n int) []label.KeyValue { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		l[i] = label.String(k, fmt.Sprint("v", rand.Intn(1000000000))) | ||||
| 		l[i] = attribute.String(k, fmt.Sprint("v", rand.Intn(1000000000))) | ||||
| 	} | ||||
| 	return l | ||||
| } | ||||
| @@ -120,7 +120,7 @@ func BenchmarkInt64CounterAddWithLabels_16(b *testing.B) { | ||||
| } | ||||
|  | ||||
| // Note: performance does not depend on label set size for the | ||||
| // benchmarks below--all are benchmarked for a single label. | ||||
| // benchmarks below--all are benchmarked for a single attribute. | ||||
|  | ||||
| func BenchmarkAcquireNewHandle(b *testing.B) { | ||||
| 	fix := newFixture(b) | ||||
| @@ -168,10 +168,10 @@ func BenchmarkAcquireReleaseExistingHandle(b *testing.B) { | ||||
|  | ||||
| // Iterators | ||||
|  | ||||
| var benchmarkIteratorVar label.KeyValue | ||||
| var benchmarkIteratorVar attribute.KeyValue | ||||
|  | ||||
| func benchmarkIterator(b *testing.B, n int) { | ||||
| 	labels := label.NewSet(makeLabels(n)...) | ||||
| 	labels := attribute.NewSet(makeLabels(n)...) | ||||
| 	b.ResetTimer() | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		iter := labels.Iter() | ||||
| @@ -217,7 +217,7 @@ func BenchmarkGlobalInt64CounterAddWithSDK(b *testing.B) { | ||||
| 	sdk := global.Meter("test") | ||||
| 	global.SetMeterProvider(fix) | ||||
|  | ||||
| 	labs := []label.KeyValue{label.String("A", "B")} | ||||
| 	labs := []attribute.KeyValue{attribute.String("A", "B")} | ||||
| 	cnt := Must(sdk).NewInt64Counter("int64.sum") | ||||
|  | ||||
| 	b.ResetTimer() | ||||
| @@ -520,7 +520,7 @@ func BenchmarkRepeatedDirectCalls(b *testing.B) { | ||||
| 	fix := newFixture(b) | ||||
|  | ||||
| 	c := fix.meterMust().NewInt64Counter("int64.sum") | ||||
| 	k := label.String("bench", "true") | ||||
| 	k := attribute.String("bench", "true") | ||||
|  | ||||
| 	b.ResetTimer() | ||||
|  | ||||
|   | ||||
| @@ -19,12 +19,12 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| ) | ||||
|  | ||||
| func TestWithResource(t *testing.T) { | ||||
| 	r := resource.NewWithAttributes(label.String("A", "a")) | ||||
| 	r := resource.NewWithAttributes(attribute.String("A", "a")) | ||||
|  | ||||
| 	c := &Config{} | ||||
| 	WithResource(r).Apply(c) | ||||
|   | ||||
| @@ -23,7 +23,7 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| 	"go.opentelemetry.io/otel/sdk/export/metric/aggregation" | ||||
| @@ -35,7 +35,7 @@ import ( | ||||
| ) | ||||
|  | ||||
| func getMap(t *testing.T, cont *controller.Controller) map[string]float64 { | ||||
| 	out := processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	out := processortest.NewOutput(attribute.DefaultEncoder()) | ||||
|  | ||||
| 	require.NoError(t, cont.ForEach( | ||||
| 		export.CumulativeExportKindSelector(), | ||||
| @@ -70,16 +70,16 @@ func TestControllerUsesResource(t *testing.T) { | ||||
| 		{ | ||||
| 			name:    "uses default if no resource option", | ||||
| 			options: nil, | ||||
| 			wanted:  resource.Default().Encoded(label.DefaultEncoder())}, | ||||
| 			wanted:  resource.Default().Encoded(attribute.DefaultEncoder())}, | ||||
| 		{ | ||||
| 			name:    "explicit resource", | ||||
| 			options: []controller.Option{controller.WithResource(resource.NewWithAttributes(label.String("R", "S")))}, | ||||
| 			options: []controller.Option{controller.WithResource(resource.NewWithAttributes(attribute.String("R", "S")))}, | ||||
| 			wanted:  "R=S"}, | ||||
| 		{ | ||||
| 			name: "last resource wins", | ||||
| 			options: []controller.Option{ | ||||
| 				controller.WithResource(resource.Default()), | ||||
| 				controller.WithResource(resource.NewWithAttributes(label.String("R", "S"))), | ||||
| 				controller.WithResource(resource.NewWithAttributes(attribute.String("R", "S"))), | ||||
| 			}, | ||||
| 			wanted: "R=S", | ||||
| 		}, | ||||
| @@ -128,7 +128,7 @@ func TestStartNoExporter(t *testing.T) { | ||||
| 		func(ctx context.Context, result metric.Int64ObserverResult) { | ||||
| 			calls++ | ||||
| 			checkTestContext(t, ctx) | ||||
| 			result.Observe(calls, label.String("A", "B")) | ||||
| 			result.Observe(calls, attribute.String("A", "B")) | ||||
| 		}, | ||||
| 	) | ||||
|  | ||||
| @@ -251,7 +251,7 @@ func newBlockingExporter() *blockingExporter { | ||||
| 	return &blockingExporter{ | ||||
| 		exporter: processortest.NewExporter( | ||||
| 			export.CumulativeExportKindSelector(), | ||||
| 			label.DefaultEncoder(), | ||||
| 			attribute.DefaultEncoder(), | ||||
| 		), | ||||
| 	} | ||||
| } | ||||
| @@ -332,7 +332,7 @@ func TestExportTimeout(t *testing.T) { | ||||
| func TestCollectAfterStopThenStartAgain(t *testing.T) { | ||||
| 	exp := processortest.NewExporter( | ||||
| 		export.CumulativeExportKindSelector(), | ||||
| 		label.DefaultEncoder(), | ||||
| 		attribute.DefaultEncoder(), | ||||
| 	) | ||||
| 	cont := controller.New( | ||||
| 		processor.New( | ||||
|   | ||||
| @@ -22,7 +22,7 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| 	controller "go.opentelemetry.io/otel/sdk/metric/controller/basic" | ||||
| @@ -47,20 +47,20 @@ func TestPullNoCollect(t *testing.T) { | ||||
| 	meter := puller.MeterProvider().Meter("nocache") | ||||
| 	counter := metric.Must(meter).NewInt64Counter("counter.sum") | ||||
|  | ||||
| 	counter.Add(ctx, 10, label.String("A", "B")) | ||||
| 	counter.Add(ctx, 10, attribute.String("A", "B")) | ||||
|  | ||||
| 	require.NoError(t, puller.Collect(ctx)) | ||||
| 	records := processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	records := processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 	require.NoError(t, puller.ForEach(export.CumulativeExportKindSelector(), records.AddRecord)) | ||||
|  | ||||
| 	require.EqualValues(t, map[string]float64{ | ||||
| 		"counter.sum/A=B/": 10, | ||||
| 	}, records.Map()) | ||||
|  | ||||
| 	counter.Add(ctx, 10, label.String("A", "B")) | ||||
| 	counter.Add(ctx, 10, attribute.String("A", "B")) | ||||
|  | ||||
| 	require.NoError(t, puller.Collect(ctx)) | ||||
| 	records = processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	records = processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 	require.NoError(t, puller.ForEach(export.CumulativeExportKindSelector(), records.AddRecord)) | ||||
|  | ||||
| 	require.EqualValues(t, map[string]float64{ | ||||
| @@ -85,21 +85,21 @@ func TestPullWithCollect(t *testing.T) { | ||||
| 	meter := puller.MeterProvider().Meter("nocache") | ||||
| 	counter := metric.Must(meter).NewInt64Counter("counter.sum") | ||||
|  | ||||
| 	counter.Add(ctx, 10, label.String("A", "B")) | ||||
| 	counter.Add(ctx, 10, attribute.String("A", "B")) | ||||
|  | ||||
| 	require.NoError(t, puller.Collect(ctx)) | ||||
| 	records := processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	records := processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 	require.NoError(t, puller.ForEach(export.CumulativeExportKindSelector(), records.AddRecord)) | ||||
|  | ||||
| 	require.EqualValues(t, map[string]float64{ | ||||
| 		"counter.sum/A=B/": 10, | ||||
| 	}, records.Map()) | ||||
|  | ||||
| 	counter.Add(ctx, 10, label.String("A", "B")) | ||||
| 	counter.Add(ctx, 10, attribute.String("A", "B")) | ||||
|  | ||||
| 	// Cached value! | ||||
| 	require.NoError(t, puller.Collect(ctx)) | ||||
| 	records = processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	records = processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 	require.NoError(t, puller.ForEach(export.CumulativeExportKindSelector(), records.AddRecord)) | ||||
|  | ||||
| 	require.EqualValues(t, map[string]float64{ | ||||
| @@ -111,7 +111,7 @@ func TestPullWithCollect(t *testing.T) { | ||||
|  | ||||
| 	// Re-computed value! | ||||
| 	require.NoError(t, puller.Collect(ctx)) | ||||
| 	records = processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	records = processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 	require.NoError(t, puller.ForEach(export.CumulativeExportKindSelector(), records.AddRecord)) | ||||
|  | ||||
| 	require.EqualValues(t, map[string]float64{ | ||||
|   | ||||
| @@ -26,7 +26,7 @@ import ( | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| 	"go.opentelemetry.io/otel/sdk/export/metric/aggregation" | ||||
| @@ -37,7 +37,7 @@ import ( | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| ) | ||||
|  | ||||
| var testResource = resource.NewWithAttributes(label.String("R", "V")) | ||||
| var testResource = resource.NewWithAttributes(attribute.String("R", "V")) | ||||
|  | ||||
| type handler struct { | ||||
| 	sync.Mutex | ||||
| @@ -68,7 +68,7 @@ func init() { | ||||
| func newExporter() *processortest.Exporter { | ||||
| 	return processortest.NewExporter( | ||||
| 		export.StatelessExportKindSelector(), | ||||
| 		label.DefaultEncoder(), | ||||
| 		attribute.DefaultEncoder(), | ||||
| 	) | ||||
| } | ||||
|  | ||||
| @@ -76,7 +76,7 @@ func newCheckpointer() export.Checkpointer { | ||||
| 	return processortest.Checkpointer( | ||||
| 		processortest.NewProcessor( | ||||
| 			processortest.AggregatorSelector(), | ||||
| 			label.DefaultEncoder(), | ||||
| 			attribute.DefaultEncoder(), | ||||
| 		), | ||||
| 	) | ||||
| } | ||||
| @@ -205,7 +205,7 @@ func TestPushExportError(t *testing.T) { | ||||
| 			require.NoError(t, p.Start(ctx)) | ||||
| 			runtime.Gosched() | ||||
|  | ||||
| 			counter1.Add(ctx, 3, label.String("X", "Y")) | ||||
| 			counter1.Add(ctx, 3, attribute.String("X", "Y")) | ||||
| 			counter2.Add(ctx, 5) | ||||
|  | ||||
| 			require.Equal(t, 0, exporter.ExportCount()) | ||||
|   | ||||
| @@ -24,7 +24,7 @@ import ( | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -35,7 +35,7 @@ import ( | ||||
| ) | ||||
|  | ||||
| var Must = metric.Must | ||||
| var testResource = resource.NewWithAttributes(label.String("R", "V")) | ||||
| var testResource = resource.NewWithAttributes(attribute.String("R", "V")) | ||||
|  | ||||
| type handler struct { | ||||
| 	sync.Mutex | ||||
| @@ -209,19 +209,19 @@ func TestSDKLabelsDeduplication(t *testing.T) { | ||||
| 		keySets = 2 | ||||
| 		repeats = 3 | ||||
| 	) | ||||
| 	var keysA []label.Key | ||||
| 	var keysB []label.Key | ||||
| 	var keysA []attribute.Key | ||||
| 	var keysB []attribute.Key | ||||
|  | ||||
| 	for i := 0; i < maxKeys; i++ { | ||||
| 		keysA = append(keysA, label.Key(fmt.Sprintf("A%03d", i))) | ||||
| 		keysB = append(keysB, label.Key(fmt.Sprintf("B%03d", i))) | ||||
| 		keysA = append(keysA, attribute.Key(fmt.Sprintf("A%03d", i))) | ||||
| 		keysB = append(keysB, attribute.Key(fmt.Sprintf("B%03d", i))) | ||||
| 	} | ||||
|  | ||||
| 	var allExpect [][]label.KeyValue | ||||
| 	var allExpect [][]attribute.KeyValue | ||||
| 	for numKeys := 0; numKeys < maxKeys; numKeys++ { | ||||
|  | ||||
| 		var kvsA []label.KeyValue | ||||
| 		var kvsB []label.KeyValue | ||||
| 		var kvsA []attribute.KeyValue | ||||
| 		var kvsB []attribute.KeyValue | ||||
| 		for r := 0; r < repeats; r++ { | ||||
| 			for i := 0; i < numKeys; i++ { | ||||
| 				kvsA = append(kvsA, keysA[i].Int(r)) | ||||
| @@ -229,8 +229,8 @@ func TestSDKLabelsDeduplication(t *testing.T) { | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		var expectA []label.KeyValue | ||||
| 		var expectB []label.KeyValue | ||||
| 		var expectA []attribute.KeyValue | ||||
| 		var expectB []attribute.KeyValue | ||||
| 		for i := 0; i < numKeys; i++ { | ||||
| 			expectA = append(expectA, keysA[i].Int(repeats-1)) | ||||
| 			expectB = append(expectB, keysB[i].Int(repeats-1)) | ||||
| @@ -251,7 +251,7 @@ func TestSDKLabelsDeduplication(t *testing.T) { | ||||
|  | ||||
| 	sdk.Collect(ctx) | ||||
|  | ||||
| 	var actual [][]label.KeyValue | ||||
| 	var actual [][]attribute.KeyValue | ||||
| 	for _, rec := range processor.accumulations { | ||||
| 		sum, _ := rec.Aggregator().(aggregation.Sum).Sum() | ||||
| 		require.Equal(t, sum, number.NewInt64Number(2)) | ||||
| @@ -263,32 +263,32 @@ func TestSDKLabelsDeduplication(t *testing.T) { | ||||
| 	require.ElementsMatch(t, allExpect, actual) | ||||
| } | ||||
|  | ||||
| func newSetIter(kvs ...label.KeyValue) label.Iterator { | ||||
| 	labels := label.NewSet(kvs...) | ||||
| func newSetIter(kvs ...attribute.KeyValue) attribute.Iterator { | ||||
| 	labels := attribute.NewSet(kvs...) | ||||
| 	return labels.Iter() | ||||
| } | ||||
|  | ||||
| func TestDefaultLabelEncoder(t *testing.T) { | ||||
| 	encoder := label.DefaultEncoder() | ||||
| 	encoder := attribute.DefaultEncoder() | ||||
|  | ||||
| 	encoded := encoder.Encode(newSetIter(label.String("A", "B"), label.String("C", "D"))) | ||||
| 	encoded := encoder.Encode(newSetIter(attribute.String("A", "B"), attribute.String("C", "D"))) | ||||
| 	require.Equal(t, `A=B,C=D`, encoded) | ||||
|  | ||||
| 	encoded = encoder.Encode(newSetIter(label.String("A", "B,c=d"), label.String(`C\`, "D"))) | ||||
| 	encoded = encoder.Encode(newSetIter(attribute.String("A", "B,c=d"), attribute.String(`C\`, "D"))) | ||||
| 	require.Equal(t, `A=B\,c\=d,C\\=D`, encoded) | ||||
|  | ||||
| 	encoded = encoder.Encode(newSetIter(label.String(`\`, `=`), label.String(`,`, `\`))) | ||||
| 	encoded = encoder.Encode(newSetIter(attribute.String(`\`, `=`), attribute.String(`,`, `\`))) | ||||
| 	require.Equal(t, `\,=\\,\\=\=`, encoded) | ||||
|  | ||||
| 	// Note: the label encoder does not sort or de-dup values, | ||||
| 	// that is done in Labels(...). | ||||
| 	encoded = encoder.Encode(newSetIter( | ||||
| 		label.Int("I", 1), | ||||
| 		label.Int64("I64", 1), | ||||
| 		label.Float64("F64", 1), | ||||
| 		label.Float64("F64", 1), | ||||
| 		label.String("S", "1"), | ||||
| 		label.Bool("B", true), | ||||
| 		attribute.Int("I", 1), | ||||
| 		attribute.Int64("I64", 1), | ||||
| 		attribute.Float64("F64", 1), | ||||
| 		attribute.Float64("F64", 1), | ||||
| 		attribute.String("S", "1"), | ||||
| 		attribute.Bool("B", true), | ||||
| 	)) | ||||
| 	require.Equal(t, "B=true,F64=1,I=1,I64=1,S=1", encoded) | ||||
| } | ||||
| @@ -299,42 +299,42 @@ func TestObserverCollection(t *testing.T) { | ||||
| 	mult := 1 | ||||
|  | ||||
| 	_ = Must(meter).NewFloat64ValueObserver("float.valueobserver.lastvalue", func(_ context.Context, result metric.Float64ObserverResult) { | ||||
| 		result.Observe(float64(mult), label.String("A", "B")) | ||||
| 		result.Observe(float64(mult), attribute.String("A", "B")) | ||||
| 		// last value wins | ||||
| 		result.Observe(float64(-mult), label.String("A", "B")) | ||||
| 		result.Observe(float64(-mult), label.String("C", "D")) | ||||
| 		result.Observe(float64(-mult), attribute.String("A", "B")) | ||||
| 		result.Observe(float64(-mult), attribute.String("C", "D")) | ||||
| 	}) | ||||
| 	_ = Must(meter).NewInt64ValueObserver("int.valueobserver.lastvalue", func(_ context.Context, result metric.Int64ObserverResult) { | ||||
| 		result.Observe(int64(-mult), label.String("A", "B")) | ||||
| 		result.Observe(int64(-mult), attribute.String("A", "B")) | ||||
| 		result.Observe(int64(mult)) | ||||
| 		// last value wins | ||||
| 		result.Observe(int64(mult), label.String("A", "B")) | ||||
| 		result.Observe(int64(mult), attribute.String("A", "B")) | ||||
| 		result.Observe(int64(mult)) | ||||
| 	}) | ||||
|  | ||||
| 	_ = Must(meter).NewFloat64SumObserver("float.sumobserver.sum", func(_ context.Context, result metric.Float64ObserverResult) { | ||||
| 		result.Observe(float64(mult), label.String("A", "B")) | ||||
| 		result.Observe(float64(2*mult), label.String("A", "B")) | ||||
| 		result.Observe(float64(mult), label.String("C", "D")) | ||||
| 		result.Observe(float64(mult), attribute.String("A", "B")) | ||||
| 		result.Observe(float64(2*mult), attribute.String("A", "B")) | ||||
| 		result.Observe(float64(mult), attribute.String("C", "D")) | ||||
| 	}) | ||||
| 	_ = Must(meter).NewInt64SumObserver("int.sumobserver.sum", func(_ context.Context, result metric.Int64ObserverResult) { | ||||
| 		result.Observe(int64(2*mult), label.String("A", "B")) | ||||
| 		result.Observe(int64(2*mult), attribute.String("A", "B")) | ||||
| 		result.Observe(int64(mult)) | ||||
| 		// last value wins | ||||
| 		result.Observe(int64(mult), label.String("A", "B")) | ||||
| 		result.Observe(int64(mult), attribute.String("A", "B")) | ||||
| 		result.Observe(int64(mult)) | ||||
| 	}) | ||||
|  | ||||
| 	_ = Must(meter).NewFloat64UpDownSumObserver("float.updownsumobserver.sum", func(_ context.Context, result metric.Float64ObserverResult) { | ||||
| 		result.Observe(float64(mult), label.String("A", "B")) | ||||
| 		result.Observe(float64(-2*mult), label.String("A", "B")) | ||||
| 		result.Observe(float64(mult), label.String("C", "D")) | ||||
| 		result.Observe(float64(mult), attribute.String("A", "B")) | ||||
| 		result.Observe(float64(-2*mult), attribute.String("A", "B")) | ||||
| 		result.Observe(float64(mult), attribute.String("C", "D")) | ||||
| 	}) | ||||
| 	_ = Must(meter).NewInt64UpDownSumObserver("int.updownsumobserver.sum", func(_ context.Context, result metric.Int64ObserverResult) { | ||||
| 		result.Observe(int64(2*mult), label.String("A", "B")) | ||||
| 		result.Observe(int64(2*mult), attribute.String("A", "B")) | ||||
| 		result.Observe(int64(mult)) | ||||
| 		// last value wins | ||||
| 		result.Observe(int64(mult), label.String("A", "B")) | ||||
| 		result.Observe(int64(mult), attribute.String("A", "B")) | ||||
| 		result.Observe(int64(-mult)) | ||||
| 	}) | ||||
|  | ||||
| @@ -347,7 +347,7 @@ func TestObserverCollection(t *testing.T) { | ||||
| 		collected := sdk.Collect(ctx) | ||||
| 		require.Equal(t, collected, len(processor.accumulations)) | ||||
|  | ||||
| 		out := processortest.NewOutput(label.DefaultEncoder()) | ||||
| 		out := processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 		for _, rec := range processor.accumulations { | ||||
| 			require.NoError(t, out.AddAccumulation(rec)) | ||||
| 		} | ||||
| @@ -377,13 +377,13 @@ func TestSumObserverInputRange(t *testing.T) { | ||||
|  | ||||
| 	// TODO: these tests are testing for negative values, not for _descending values_. Fix. | ||||
| 	_ = Must(meter).NewFloat64SumObserver("float.sumobserver.sum", func(_ context.Context, result metric.Float64ObserverResult) { | ||||
| 		result.Observe(-2, label.String("A", "B")) | ||||
| 		result.Observe(-2, attribute.String("A", "B")) | ||||
| 		require.Equal(t, aggregation.ErrNegativeInput, testHandler.Flush()) | ||||
| 		result.Observe(-1, label.String("C", "D")) | ||||
| 		result.Observe(-1, attribute.String("C", "D")) | ||||
| 		require.Equal(t, aggregation.ErrNegativeInput, testHandler.Flush()) | ||||
| 	}) | ||||
| 	_ = Must(meter).NewInt64SumObserver("int.sumobserver.sum", func(_ context.Context, result metric.Int64ObserverResult) { | ||||
| 		result.Observe(-1, label.String("A", "B")) | ||||
| 		result.Observe(-1, attribute.String("A", "B")) | ||||
| 		require.Equal(t, aggregation.ErrNegativeInput, testHandler.Flush()) | ||||
| 		result.Observe(-1) | ||||
| 		require.Equal(t, aggregation.ErrNegativeInput, testHandler.Flush()) | ||||
| @@ -412,8 +412,8 @@ func TestObserverBatch(t *testing.T) { | ||||
| 	var batch = Must(meter).NewBatchObserver( | ||||
| 		func(_ context.Context, result metric.BatchObserverResult) { | ||||
| 			result.Observe( | ||||
| 				[]label.KeyValue{ | ||||
| 					label.String("A", "B"), | ||||
| 				[]attribute.KeyValue{ | ||||
| 					attribute.String("A", "B"), | ||||
| 				}, | ||||
| 				floatValueObs.Observation(1), | ||||
| 				floatValueObs.Observation(-1), | ||||
| @@ -425,8 +425,8 @@ func TestObserverBatch(t *testing.T) { | ||||
| 				intUpDownSumObs.Observation(-100), | ||||
| 			) | ||||
| 			result.Observe( | ||||
| 				[]label.KeyValue{ | ||||
| 					label.String("C", "D"), | ||||
| 				[]attribute.KeyValue{ | ||||
| 					attribute.String("C", "D"), | ||||
| 				}, | ||||
| 				floatValueObs.Observation(-1), | ||||
| 				floatSumObs.Observation(-1), | ||||
| @@ -452,7 +452,7 @@ func TestObserverBatch(t *testing.T) { | ||||
|  | ||||
| 	require.Equal(t, collected, len(processor.accumulations)) | ||||
|  | ||||
| 	out := processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	out := processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 	for _, rec := range processor.accumulations { | ||||
| 		require.NoError(t, out.AddAccumulation(rec)) | ||||
| 	} | ||||
| @@ -485,9 +485,9 @@ func TestRecordBatch(t *testing.T) { | ||||
|  | ||||
| 	sdk.RecordBatch( | ||||
| 		ctx, | ||||
| 		[]label.KeyValue{ | ||||
| 			label.String("A", "B"), | ||||
| 			label.String("C", "D"), | ||||
| 		[]attribute.KeyValue{ | ||||
| 			attribute.String("A", "B"), | ||||
| 			attribute.String("C", "D"), | ||||
| 		}, | ||||
| 		counter1.Measurement(1), | ||||
| 		counter2.Measurement(2), | ||||
| @@ -497,7 +497,7 @@ func TestRecordBatch(t *testing.T) { | ||||
|  | ||||
| 	sdk.Collect(ctx) | ||||
|  | ||||
| 	out := processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	out := processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 	for _, rec := range processor.accumulations { | ||||
| 		require.NoError(t, out.AddAccumulation(rec)) | ||||
| 	} | ||||
| @@ -517,8 +517,8 @@ func TestRecordPersistence(t *testing.T) { | ||||
| 	meter, sdk, processor := newSDK(t) | ||||
|  | ||||
| 	c := Must(meter).NewFloat64Counter("name.sum") | ||||
| 	b := c.Bind(label.String("bound", "true")) | ||||
| 	uk := label.String("bound", "false") | ||||
| 	b := c.Bind(attribute.String("bound", "true")) | ||||
| 	uk := attribute.String("bound", "false") | ||||
|  | ||||
| 	for i := 0; i < 100; i++ { | ||||
| 		c.Add(ctx, 1, uk) | ||||
| @@ -579,7 +579,7 @@ func TestSyncInAsync(t *testing.T) { | ||||
|  | ||||
| 	sdk.Collect(ctx) | ||||
|  | ||||
| 	out := processortest.NewOutput(label.DefaultEncoder()) | ||||
| 	out := processortest.NewOutput(attribute.DefaultEncoder()) | ||||
| 	for _, rec := range processor.accumulations { | ||||
| 		require.NoError(t, out.AddAccumulation(rec)) | ||||
| 	} | ||||
|   | ||||
| @@ -20,7 +20,7 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| 	"go.opentelemetry.io/otel/sdk/export/metric/aggregation" | ||||
| @@ -48,13 +48,13 @@ type ( | ||||
| 		// instead of the descriptor pointer.  See | ||||
| 		// https://github.com/open-telemetry/opentelemetry-go/issues/862. | ||||
| 		descriptor *metric.Descriptor | ||||
| 		distinct   label.Distinct | ||||
| 		resource   label.Distinct | ||||
| 		distinct   attribute.Distinct | ||||
| 		resource   attribute.Distinct | ||||
| 	} | ||||
|  | ||||
| 	stateValue struct { | ||||
| 		// labels corresponds to the stateKey.distinct field. | ||||
| 		labels *label.Set | ||||
| 		labels *attribute.Set | ||||
|  | ||||
| 		// resource corresponds to the stateKey.resource field. | ||||
| 		resource *resource.Resource | ||||
|   | ||||
| @@ -24,7 +24,7 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -103,8 +103,8 @@ func asNumber(nkind number.Kind, value int64) number.Number { | ||||
| 	return number.NewFloat64Number(float64(value)) | ||||
| } | ||||
|  | ||||
| func updateFor(t *testing.T, desc *metric.Descriptor, selector export.AggregatorSelector, res *resource.Resource, value int64, labs ...label.KeyValue) export.Accumulation { | ||||
| 	ls := label.NewSet(labs...) | ||||
| func updateFor(t *testing.T, desc *metric.Descriptor, selector export.AggregatorSelector, res *resource.Resource, value int64, labs ...attribute.KeyValue) export.Accumulation { | ||||
| 	ls := attribute.NewSet(labs...) | ||||
| 	var agg export.Aggregator | ||||
| 	selector.AggregatorFor(desc, &agg) | ||||
| 	require.NoError(t, agg.Update(context.Background(), asNumber(desc.NumberKind(), value), desc)) | ||||
| @@ -122,10 +122,10 @@ func testProcessor( | ||||
| 	// Note: this selector uses the instrument name to dictate | ||||
| 	// aggregation kind. | ||||
| 	selector := processorTest.AggregatorSelector() | ||||
| 	res := resource.NewWithAttributes(label.String("R", "V")) | ||||
| 	res := resource.NewWithAttributes(attribute.String("R", "V")) | ||||
|  | ||||
| 	labs1 := []label.KeyValue{label.String("L1", "V")} | ||||
| 	labs2 := []label.KeyValue{label.String("L2", "V")} | ||||
| 	labs1 := []attribute.KeyValue{attribute.String("L1", "V")} | ||||
| 	labs2 := []attribute.KeyValue{attribute.String("L2", "V")} | ||||
|  | ||||
| 	testBody := func(t *testing.T, hasMemory bool, nAccum, nCheckpoint int) { | ||||
| 		processor := basic.New(selector, export.ConstantExportKindSelector(ekind), basic.WithMemory(hasMemory)) | ||||
| @@ -183,7 +183,7 @@ func testProcessor( | ||||
| 				} | ||||
|  | ||||
| 				// Test the final checkpoint state. | ||||
| 				records1 := processorTest.NewOutput(label.DefaultEncoder()) | ||||
| 				records1 := processorTest.NewOutput(attribute.DefaultEncoder()) | ||||
| 				err = checkpointSet.ForEach(export.ConstantExportKindSelector(ekind), records1.AddRecord) | ||||
|  | ||||
| 				// Test for an allowed error: | ||||
| @@ -297,7 +297,7 @@ func TestBasicInconsistent(t *testing.T) { | ||||
| 	b = basic.New(processorTest.AggregatorSelector(), export.StatelessExportKindSelector()) | ||||
|  | ||||
| 	desc := metric.NewDescriptor("inst", metric.CounterInstrumentKind, number.Int64Kind) | ||||
| 	accum := export.NewAccumulation(&desc, label.EmptySet(), resource.Empty(), metrictest.NoopAggregator{}) | ||||
| 	accum := export.NewAccumulation(&desc, attribute.EmptySet(), resource.Empty(), metrictest.NoopAggregator{}) | ||||
| 	require.Equal(t, basic.ErrInconsistentState, b.Process(accum)) | ||||
|  | ||||
| 	// Test invalid kind: | ||||
| @@ -320,7 +320,7 @@ func TestBasicTimestamps(t *testing.T) { | ||||
| 	afterNew := time.Now() | ||||
|  | ||||
| 	desc := metric.NewDescriptor("inst", metric.CounterInstrumentKind, number.Int64Kind) | ||||
| 	accum := export.NewAccumulation(&desc, label.EmptySet(), resource.Empty(), metrictest.NoopAggregator{}) | ||||
| 	accum := export.NewAccumulation(&desc, attribute.EmptySet(), resource.Empty(), metrictest.NoopAggregator{}) | ||||
|  | ||||
| 	b.StartCollection() | ||||
| 	_ = b.Process(accum) | ||||
| @@ -362,7 +362,7 @@ func TestBasicTimestamps(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func TestStatefulNoMemoryCumulative(t *testing.T) { | ||||
| 	res := resource.NewWithAttributes(label.String("R", "V")) | ||||
| 	res := resource.NewWithAttributes(attribute.String("R", "V")) | ||||
| 	ekindSel := export.CumulativeExportKindSelector() | ||||
|  | ||||
| 	desc := metric.NewDescriptor("inst.sum", metric.CounterInstrumentKind, number.Int64Kind) | ||||
| @@ -377,17 +377,17 @@ func TestStatefulNoMemoryCumulative(t *testing.T) { | ||||
| 		require.NoError(t, processor.FinishCollection()) | ||||
|  | ||||
| 		// Verify zero elements | ||||
| 		records := processorTest.NewOutput(label.DefaultEncoder()) | ||||
| 		records := processorTest.NewOutput(attribute.DefaultEncoder()) | ||||
| 		require.NoError(t, checkpointSet.ForEach(ekindSel, records.AddRecord)) | ||||
| 		require.EqualValues(t, map[string]float64{}, records.Map()) | ||||
|  | ||||
| 		// Add 10 | ||||
| 		processor.StartCollection() | ||||
| 		_ = processor.Process(updateFor(t, &desc, selector, res, 10, label.String("A", "B"))) | ||||
| 		_ = processor.Process(updateFor(t, &desc, selector, res, 10, attribute.String("A", "B"))) | ||||
| 		require.NoError(t, processor.FinishCollection()) | ||||
|  | ||||
| 		// Verify one element | ||||
| 		records = processorTest.NewOutput(label.DefaultEncoder()) | ||||
| 		records = processorTest.NewOutput(attribute.DefaultEncoder()) | ||||
| 		require.NoError(t, checkpointSet.ForEach(ekindSel, records.AddRecord)) | ||||
| 		require.EqualValues(t, map[string]float64{ | ||||
| 			"inst.sum/A=B/R=V": float64(i * 10), | ||||
| @@ -396,7 +396,7 @@ func TestStatefulNoMemoryCumulative(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func TestStatefulNoMemoryDelta(t *testing.T) { | ||||
| 	res := resource.NewWithAttributes(label.String("R", "V")) | ||||
| 	res := resource.NewWithAttributes(attribute.String("R", "V")) | ||||
| 	ekindSel := export.DeltaExportKindSelector() | ||||
|  | ||||
| 	desc := metric.NewDescriptor("inst.sum", metric.SumObserverInstrumentKind, number.Int64Kind) | ||||
| @@ -411,17 +411,17 @@ func TestStatefulNoMemoryDelta(t *testing.T) { | ||||
| 		require.NoError(t, processor.FinishCollection()) | ||||
|  | ||||
| 		// Verify zero elements | ||||
| 		records := processorTest.NewOutput(label.DefaultEncoder()) | ||||
| 		records := processorTest.NewOutput(attribute.DefaultEncoder()) | ||||
| 		require.NoError(t, checkpointSet.ForEach(ekindSel, records.AddRecord)) | ||||
| 		require.EqualValues(t, map[string]float64{}, records.Map()) | ||||
|  | ||||
| 		// Add 10 | ||||
| 		processor.StartCollection() | ||||
| 		_ = processor.Process(updateFor(t, &desc, selector, res, int64(i*10), label.String("A", "B"))) | ||||
| 		_ = processor.Process(updateFor(t, &desc, selector, res, int64(i*10), attribute.String("A", "B"))) | ||||
| 		require.NoError(t, processor.FinishCollection()) | ||||
|  | ||||
| 		// Verify one element | ||||
| 		records = processorTest.NewOutput(label.DefaultEncoder()) | ||||
| 		records = processorTest.NewOutput(attribute.DefaultEncoder()) | ||||
| 		require.NoError(t, checkpointSet.ForEach(ekindSel, records.AddRecord)) | ||||
| 		require.EqualValues(t, map[string]float64{ | ||||
| 			"inst.sum/A=B/R=V": 10, | ||||
| @@ -435,7 +435,7 @@ func TestMultiObserverSum(t *testing.T) { | ||||
| 		export.DeltaExportKindSelector(), | ||||
| 	} { | ||||
|  | ||||
| 		res := resource.NewWithAttributes(label.String("R", "V")) | ||||
| 		res := resource.NewWithAttributes(attribute.String("R", "V")) | ||||
| 		desc := metric.NewDescriptor("observe.sum", metric.SumObserverInstrumentKind, number.Int64Kind) | ||||
| 		selector := processorTest.AggregatorSelector() | ||||
|  | ||||
| @@ -445,9 +445,9 @@ func TestMultiObserverSum(t *testing.T) { | ||||
| 		for i := 1; i < 3; i++ { | ||||
| 			// Add i*10*3 times | ||||
| 			processor.StartCollection() | ||||
| 			_ = processor.Process(updateFor(t, &desc, selector, res, int64(i*10), label.String("A", "B"))) | ||||
| 			_ = processor.Process(updateFor(t, &desc, selector, res, int64(i*10), label.String("A", "B"))) | ||||
| 			_ = processor.Process(updateFor(t, &desc, selector, res, int64(i*10), label.String("A", "B"))) | ||||
| 			_ = processor.Process(updateFor(t, &desc, selector, res, int64(i*10), attribute.String("A", "B"))) | ||||
| 			_ = processor.Process(updateFor(t, &desc, selector, res, int64(i*10), attribute.String("A", "B"))) | ||||
| 			_ = processor.Process(updateFor(t, &desc, selector, res, int64(i*10), attribute.String("A", "B"))) | ||||
| 			require.NoError(t, processor.FinishCollection()) | ||||
|  | ||||
| 			// Multiplier is 1 for deltas, otherwise i. | ||||
| @@ -457,7 +457,7 @@ func TestMultiObserverSum(t *testing.T) { | ||||
| 			} | ||||
|  | ||||
| 			// Verify one element | ||||
| 			records := processorTest.NewOutput(label.DefaultEncoder()) | ||||
| 			records := processorTest.NewOutput(attribute.DefaultEncoder()) | ||||
| 			require.NoError(t, checkpointSet.ForEach(ekindSel, records.AddRecord)) | ||||
| 			require.EqualValues(t, map[string]float64{ | ||||
| 				"observe.sum/A=B/R=V": float64(3 * 10 * multiplier), | ||||
| @@ -494,7 +494,7 @@ func TestSumObserverEndToEnd(t *testing.T) { | ||||
| 		accum.Collect(ctx) | ||||
| 		require.NoError(t, proc.FinishCollection()) | ||||
|  | ||||
| 		exporter := processortest.NewExporter(eselector, label.DefaultEncoder()) | ||||
| 		exporter := processortest.NewExporter(eselector, attribute.DefaultEncoder()) | ||||
| 		require.NoError(t, exporter.Export(ctx, data)) | ||||
|  | ||||
| 		require.EqualValues(t, map[string]float64{ | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -40,14 +40,14 @@ type ( | ||||
| 	// attributes. | ||||
| 	mapKey struct { | ||||
| 		desc     *metric.Descriptor | ||||
| 		labels   label.Distinct | ||||
| 		resource label.Distinct | ||||
| 		labels   attribute.Distinct | ||||
| 		resource attribute.Distinct | ||||
| 	} | ||||
|  | ||||
| 	// mapValue is value stored in a processor used to produce a | ||||
| 	// CheckpointSet. | ||||
| 	mapValue struct { | ||||
| 		labels     *label.Set | ||||
| 		labels     *attribute.Set | ||||
| 		resource   *resource.Resource | ||||
| 		aggregator export.Aggregator | ||||
| 	} | ||||
| @@ -55,7 +55,7 @@ type ( | ||||
| 	// Output implements export.CheckpointSet. | ||||
| 	Output struct { | ||||
| 		m            map[mapKey]mapValue | ||||
| 		labelEncoder label.Encoder | ||||
| 		labelEncoder attribute.Encoder | ||||
| 		sync.RWMutex | ||||
| 	} | ||||
|  | ||||
| @@ -101,7 +101,7 @@ type ( | ||||
| // | ||||
| // Where in the example A=1,B=2 is the encoded labels and R=V is the | ||||
| // encoded resource value. | ||||
| func NewProcessor(selector export.AggregatorSelector, encoder label.Encoder) *Processor { | ||||
| func NewProcessor(selector export.AggregatorSelector, encoder attribute.Encoder) *Processor { | ||||
| 	return &Processor{ | ||||
| 		AggregatorSelector: selector, | ||||
| 		output:             NewOutput(encoder), | ||||
| @@ -202,7 +202,7 @@ func (testAggregatorSelector) AggregatorFor(desc *metric.Descriptor, aggPtrs ... | ||||
| // (from an Accumulator) or an expected set of Records (from a | ||||
| // Processor).  If testing with an Accumulator, it may be simpler to | ||||
| // use the test Processor in this package. | ||||
| func NewOutput(labelEncoder label.Encoder) *Output { | ||||
| func NewOutput(labelEncoder attribute.Encoder) *Output { | ||||
| 	return &Output{ | ||||
| 		m:            make(map[mapKey]mapValue), | ||||
| 		labelEncoder: labelEncoder, | ||||
| @@ -318,7 +318,7 @@ func (o *Output) AddAccumulation(acc export.Accumulation) error { | ||||
| // | ||||
| // Where in the example A=1,B=2 is the encoded labels and R=V is the | ||||
| // encoded resource value. | ||||
| func NewExporter(selector export.ExportKindSelector, encoder label.Encoder) *Exporter { | ||||
| func NewExporter(selector export.ExportKindSelector, encoder attribute.Encoder) *Exporter { | ||||
| 	return &Exporter{ | ||||
| 		ExportKindSelector: selector, | ||||
| 		output:             NewOutput(encoder), | ||||
|   | ||||
| @@ -20,7 +20,7 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| 	metricsdk "go.opentelemetry.io/otel/sdk/metric" | ||||
| @@ -32,7 +32,7 @@ func generateTestData(proc export.Processor) { | ||||
| 	ctx := context.Background() | ||||
| 	accum := metricsdk.NewAccumulator( | ||||
| 		proc, | ||||
| 		resource.NewWithAttributes(label.String("R", "V")), | ||||
| 		resource.NewWithAttributes(attribute.String("R", "V")), | ||||
| 	) | ||||
| 	meter := metric.WrapMeterImpl(accum, "testing") | ||||
|  | ||||
| @@ -40,13 +40,13 @@ func generateTestData(proc export.Processor) { | ||||
|  | ||||
| 	_ = metric.Must(meter).NewInt64SumObserver("observer.sum", | ||||
| 		func(_ context.Context, result metric.Int64ObserverResult) { | ||||
| 			result.Observe(10, label.String("K1", "V1")) | ||||
| 			result.Observe(11, label.String("K1", "V2")) | ||||
| 			result.Observe(10, attribute.String("K1", "V1")) | ||||
| 			result.Observe(11, attribute.String("K1", "V2")) | ||||
| 		}, | ||||
| 	) | ||||
|  | ||||
| 	counter.Add(ctx, 100, label.String("K1", "V1")) | ||||
| 	counter.Add(ctx, 101, label.String("K1", "V2")) | ||||
| 	counter.Add(ctx, 100, attribute.String("K1", "V1")) | ||||
| 	counter.Add(ctx, 101, attribute.String("K1", "V2")) | ||||
|  | ||||
| 	accum.Collect(ctx) | ||||
| } | ||||
| @@ -56,7 +56,7 @@ func TestProcessorTesting(t *testing.T) { | ||||
| 	// generate Accumulations. | ||||
| 	testProc := processorTest.NewProcessor( | ||||
| 		processorTest.AggregatorSelector(), | ||||
| 		label.DefaultEncoder(), | ||||
| 		attribute.DefaultEncoder(), | ||||
| 	) | ||||
| 	checkpointer := processorTest.Checkpointer(testProc) | ||||
|  | ||||
| @@ -75,7 +75,7 @@ func TestProcessorTesting(t *testing.T) { | ||||
| 	// Export the data and validate it again. | ||||
| 	exporter := processorTest.NewExporter( | ||||
| 		export.StatelessExportKindSelector(), | ||||
| 		label.DefaultEncoder(), | ||||
| 		attribute.DefaultEncoder(), | ||||
| 	) | ||||
|  | ||||
| 	err := exporter.Export(context.Background(), checkpointer.CheckpointSet()) | ||||
|   | ||||
| @@ -20,7 +20,7 @@ may be introduced in subsequent minor version releases as we work to track the | ||||
| evolving OpenTelemetry specification and user feedback. | ||||
|  | ||||
| The metrics Processor component this package implements applies a | ||||
| `label.Filter` to each processed `export.Accumulation` to remove labels before | ||||
| `attribute.Filter` to each processed `export.Accumulation` to remove labels before | ||||
| passing the result to another Processor.  This Processor can be used to reduce | ||||
| inherent dimensionality in the data, as a way to control the cost of | ||||
| collecting high cardinality metric data. | ||||
| @@ -33,7 +33,7 @@ type someFilter struct{ | ||||
|         // ... | ||||
| } | ||||
|  | ||||
| func (someFilter) LabelFilterFor(_ *metric.Descriptor) label.Filter { | ||||
| func (someFilter) LabelFilterFor(_ *metric.Descriptor) attribute.Filter { | ||||
|         return func(label kv.KeyValue) bool { | ||||
|                 // return true to keep this label, false to drop this label | ||||
|                 // ... | ||||
|   | ||||
| @@ -15,7 +15,7 @@ | ||||
| package reducer // import "go.opentelemetry.io/otel/sdk/metric/processor/reducer" | ||||
|  | ||||
| import ( | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| ) | ||||
| @@ -31,7 +31,7 @@ type ( | ||||
| 	// LabelFilterSelector is the interface used to configure a | ||||
| 	// specific Filter to an instrument. | ||||
| 	LabelFilterSelector interface { | ||||
| 		LabelFilterFor(descriptor *metric.Descriptor) label.Filter | ||||
| 		LabelFilterFor(descriptor *metric.Descriptor) attribute.Filter | ||||
| 	} | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -20,7 +20,7 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| 	metricsdk "go.opentelemetry.io/otel/sdk/metric" | ||||
| @@ -31,22 +31,22 @@ import ( | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	kvs1 = []label.KeyValue{ | ||||
| 		label.Int("A", 1), | ||||
| 		label.Int("B", 2), | ||||
| 		label.Int("C", 3), | ||||
| 	kvs1 = []attribute.KeyValue{ | ||||
| 		attribute.Int("A", 1), | ||||
| 		attribute.Int("B", 2), | ||||
| 		attribute.Int("C", 3), | ||||
| 	} | ||||
| 	kvs2 = []label.KeyValue{ | ||||
| 		label.Int("A", 1), | ||||
| 		label.Int("B", 0), | ||||
| 		label.Int("C", 3), | ||||
| 	kvs2 = []attribute.KeyValue{ | ||||
| 		attribute.Int("A", 1), | ||||
| 		attribute.Int("B", 0), | ||||
| 		attribute.Int("C", 3), | ||||
| 	} | ||||
| ) | ||||
|  | ||||
| type testFilter struct{} | ||||
|  | ||||
| func (testFilter) LabelFilterFor(_ *metric.Descriptor) label.Filter { | ||||
| 	return func(label label.KeyValue) bool { | ||||
| func (testFilter) LabelFilterFor(_ *metric.Descriptor) attribute.Filter { | ||||
| 	return func(label attribute.KeyValue) bool { | ||||
| 		return label.Key == "A" || label.Key == "C" | ||||
| 	} | ||||
| } | ||||
| @@ -71,11 +71,11 @@ func generateData(impl metric.MeterImpl) { | ||||
| func TestFilterProcessor(t *testing.T) { | ||||
| 	testProc := processorTest.NewProcessor( | ||||
| 		processorTest.AggregatorSelector(), | ||||
| 		label.DefaultEncoder(), | ||||
| 		attribute.DefaultEncoder(), | ||||
| 	) | ||||
| 	accum := metricsdk.NewAccumulator( | ||||
| 		reducer.New(testFilter{}, processorTest.Checkpointer(testProc)), | ||||
| 		resource.NewWithAttributes(label.String("R", "V")), | ||||
| 		resource.NewWithAttributes(attribute.String("R", "V")), | ||||
| 	) | ||||
| 	generateData(accum) | ||||
|  | ||||
| @@ -92,9 +92,9 @@ func TestFilterBasicProcessor(t *testing.T) { | ||||
| 	basicProc := basic.New(processorTest.AggregatorSelector(), export.CumulativeExportKindSelector()) | ||||
| 	accum := metricsdk.NewAccumulator( | ||||
| 		reducer.New(testFilter{}, basicProc), | ||||
| 		resource.NewWithAttributes(label.String("R", "V")), | ||||
| 		resource.NewWithAttributes(attribute.String("R", "V")), | ||||
| 	) | ||||
| 	exporter := processorTest.NewExporter(basicProc, label.DefaultEncoder()) | ||||
| 	exporter := processorTest.NewExporter(basicProc, attribute.DefaultEncoder()) | ||||
|  | ||||
| 	generateData(accum) | ||||
|  | ||||
|   | ||||
| @@ -22,8 +22,8 @@ import ( | ||||
| 	"sync/atomic" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	internal "go.opentelemetry.io/otel/internal/metric" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -63,7 +63,7 @@ type ( | ||||
| 		// asyncSortSlice has a single purpose - as a temporary | ||||
| 		// place for sorting during labels creation to avoid | ||||
| 		// allocation.  It is cleared after use. | ||||
| 		asyncSortSlice label.Sortable | ||||
| 		asyncSortSlice attribute.Sortable | ||||
|  | ||||
| 		// resource is applied to all records in this Accumulator. | ||||
| 		resource *resource.Resource | ||||
| @@ -77,7 +77,7 @@ type ( | ||||
| 	// its InstrumentID and the encoded form of its labels. | ||||
| 	mapkey struct { | ||||
| 		descriptor *metric.Descriptor | ||||
| 		ordered    label.Distinct | ||||
| 		ordered    attribute.Distinct | ||||
| 	} | ||||
|  | ||||
| 	// record maintains the state of one metric instrument.  Due | ||||
| @@ -99,18 +99,18 @@ type ( | ||||
| 		// storage is the stored label set for this record, | ||||
| 		// except in cases where a label set is shared due to | ||||
| 		// batch recording. | ||||
| 		storage label.Set | ||||
| 		storage attribute.Set | ||||
|  | ||||
| 		// labels is the processed label set for this record. | ||||
| 		// this may refer to the `storage` field in another | ||||
| 		// record if this label set is shared resulting from | ||||
| 		// `RecordBatch`. | ||||
| 		labels *label.Set | ||||
| 		labels *attribute.Set | ||||
|  | ||||
| 		// sortSlice has a single purpose - as a temporary | ||||
| 		// place for sorting during labels creation to avoid | ||||
| 		// allocation. | ||||
| 		sortSlice label.Sortable | ||||
| 		sortSlice attribute.Sortable | ||||
|  | ||||
| 		// inst is a pointer to the corresponding instrument. | ||||
| 		inst *syncInstrument | ||||
| @@ -131,12 +131,12 @@ type ( | ||||
| 		instrument | ||||
| 		// recorders maps ordered labels to the pair of | ||||
| 		// labelset and recorder | ||||
| 		recorders map[label.Distinct]*labeledRecorder | ||||
| 		recorders map[attribute.Distinct]*labeledRecorder | ||||
| 	} | ||||
|  | ||||
| 	labeledRecorder struct { | ||||
| 		observedEpoch int64 | ||||
| 		labels        *label.Set | ||||
| 		labels        *attribute.Set | ||||
| 		observed      export.Aggregator | ||||
| 	} | ||||
| ) | ||||
| @@ -162,7 +162,7 @@ func (s *syncInstrument) Implementation() interface{} { | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| func (a *asyncInstrument) observe(num number.Number, labels *label.Set) { | ||||
| func (a *asyncInstrument) observe(num number.Number, labels *attribute.Set) { | ||||
| 	if err := aggregator.RangeTest(num, &a.descriptor); err != nil { | ||||
| 		otel.Handle(err) | ||||
| 		return | ||||
| @@ -179,7 +179,7 @@ func (a *asyncInstrument) observe(num number.Number, labels *label.Set) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (a *asyncInstrument) getRecorder(labels *label.Set) export.Aggregator { | ||||
| func (a *asyncInstrument) getRecorder(labels *attribute.Set) export.Aggregator { | ||||
| 	lrec, ok := a.recorders[labels.Equivalent()] | ||||
| 	if ok { | ||||
| 		// Note: SynchronizedMove(nil) can't return an error | ||||
| @@ -191,7 +191,7 @@ func (a *asyncInstrument) getRecorder(labels *label.Set) export.Aggregator { | ||||
| 	var rec export.Aggregator | ||||
| 	a.meter.processor.AggregatorFor(&a.descriptor, &rec) | ||||
| 	if a.recorders == nil { | ||||
| 		a.recorders = make(map[label.Distinct]*labeledRecorder) | ||||
| 		a.recorders = make(map[attribute.Distinct]*labeledRecorder) | ||||
| 	} | ||||
| 	// This may store nil recorder in the map, thus disabling the | ||||
| 	// asyncInstrument for the labelset for good. This is intentional, | ||||
| @@ -209,16 +209,16 @@ func (a *asyncInstrument) getRecorder(labels *label.Set) export.Aggregator { | ||||
| // support re-use of the orderedLabels computed by a previous | ||||
| // measurement in the same batch.   This performs two allocations | ||||
| // in the common case. | ||||
| func (s *syncInstrument) acquireHandle(kvs []label.KeyValue, labelPtr *label.Set) *record { | ||||
| func (s *syncInstrument) acquireHandle(kvs []attribute.KeyValue, labelPtr *attribute.Set) *record { | ||||
| 	var rec *record | ||||
| 	var equiv label.Distinct | ||||
| 	var equiv attribute.Distinct | ||||
|  | ||||
| 	if labelPtr == nil { | ||||
| 		// This memory allocation may not be used, but it's | ||||
| 		// needed for the `sortSlice` field, to avoid an | ||||
| 		// allocation while sorting. | ||||
| 		rec = &record{} | ||||
| 		rec.storage = label.NewSetWithSortable(kvs, &rec.sortSlice) | ||||
| 		rec.storage = attribute.NewSetWithSortable(kvs, &rec.sortSlice) | ||||
| 		rec.labels = &rec.storage | ||||
| 		equiv = rec.storage.Equivalent() | ||||
| 	} else { | ||||
| @@ -282,11 +282,11 @@ func (s *syncInstrument) acquireHandle(kvs []label.KeyValue, labelPtr *label.Set | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *syncInstrument) Bind(kvs []label.KeyValue) metric.BoundSyncImpl { | ||||
| func (s *syncInstrument) Bind(kvs []attribute.KeyValue) metric.BoundSyncImpl { | ||||
| 	return s.acquireHandle(kvs, nil) | ||||
| } | ||||
|  | ||||
| func (s *syncInstrument) RecordOne(ctx context.Context, num number.Number, kvs []label.KeyValue) { | ||||
| func (s *syncInstrument) RecordOne(ctx context.Context, num number.Number, kvs []attribute.KeyValue) { | ||||
| 	h := s.acquireHandle(kvs, nil) | ||||
| 	defer h.Unbind() | ||||
| 	h.RecordOne(ctx, num) | ||||
| @@ -396,8 +396,8 @@ func (m *Accumulator) collectSyncInstruments() int { | ||||
| } | ||||
|  | ||||
| // CollectAsync implements internal.AsyncCollector. | ||||
| func (m *Accumulator) CollectAsync(kv []label.KeyValue, obs ...metric.Observation) { | ||||
| 	labels := label.NewSetWithSortable(kv, &m.asyncSortSlice) | ||||
| func (m *Accumulator) CollectAsync(kv []attribute.KeyValue, obs ...metric.Observation) { | ||||
| 	labels := attribute.NewSetWithSortable(kv, &m.asyncSortSlice) | ||||
|  | ||||
| 	for _, ob := range obs { | ||||
| 		if a := m.fromAsync(ob.AsyncImpl()); a != nil { | ||||
| @@ -472,12 +472,12 @@ func (m *Accumulator) checkpointAsync(a *asyncInstrument) int { | ||||
| } | ||||
|  | ||||
| // RecordBatch enters a batch of metric events. | ||||
| func (m *Accumulator) RecordBatch(ctx context.Context, kvs []label.KeyValue, measurements ...metric.Measurement) { | ||||
| func (m *Accumulator) RecordBatch(ctx context.Context, kvs []attribute.KeyValue, measurements ...metric.Measurement) { | ||||
| 	// Labels will be computed the first time acquireHandle is | ||||
| 	// called.  Subsequent calls to acquireHandle will re-use the | ||||
| 	// previously computed value instead of recomputing the | ||||
| 	// ordered labels. | ||||
| 	var labelsPtr *label.Set | ||||
| 	var labelsPtr *attribute.Set | ||||
| 	for i, meas := range measurements { | ||||
| 		s := m.fromSync(meas.SyncImpl()) | ||||
| 		if s == nil { | ||||
|   | ||||
| @@ -31,7 +31,7 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/metric" | ||||
| 	"go.opentelemetry.io/otel/metric/number" | ||||
| 	export "go.opentelemetry.io/otel/sdk/export/metric" | ||||
| @@ -75,7 +75,7 @@ type ( | ||||
| 	testImpl struct { | ||||
| 		newInstrument  func(meter metric.Meter, name string) SyncImpler | ||||
| 		getUpdateValue func() number.Number | ||||
| 		operate        func(interface{}, context.Context, number.Number, []label.KeyValue) | ||||
| 		operate        func(interface{}, context.Context, number.Number, []attribute.KeyValue) | ||||
| 		newStore       func() interface{} | ||||
|  | ||||
| 		// storeCollect and storeExpect are the same for | ||||
| @@ -105,7 +105,7 @@ func concurrency() int { | ||||
| 	return concurrencyPerCPU * runtime.NumCPU() | ||||
| } | ||||
|  | ||||
| func canonicalizeLabels(ls []label.KeyValue) string { | ||||
| func canonicalizeLabels(ls []attribute.KeyValue) string { | ||||
| 	copy := append(ls[0:0:0], ls...) | ||||
| 	sort.SliceStable(copy, func(i, j int) bool { | ||||
| 		return copy[i].Key < copy[j].Key | ||||
| @@ -128,9 +128,9 @@ func getPeriod() time.Duration { | ||||
| 	return time.Duration(dur) | ||||
| } | ||||
|  | ||||
| func (f *testFixture) someLabels() []label.KeyValue { | ||||
| func (f *testFixture) someLabels() []attribute.KeyValue { | ||||
| 	n := 1 + rand.Intn(3) | ||||
| 	l := make([]label.KeyValue, n) | ||||
| 	l := make([]attribute.KeyValue, n) | ||||
|  | ||||
| 	for { | ||||
| 		oused := map[string]bool{} | ||||
| @@ -143,7 +143,7 @@ func (f *testFixture) someLabels() []label.KeyValue { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			l[i] = label.String(k, fmt.Sprint("v", rand.Intn(1000000000))) | ||||
| 			l[i] = attribute.String(k, fmt.Sprint("v", rand.Intn(1000000000))) | ||||
| 		} | ||||
| 		lc := canonicalizeLabels(l) | ||||
| 		f.lock.Lock() | ||||
| @@ -351,7 +351,7 @@ func intCounterTestImpl() testImpl { | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		operate: func(inst interface{}, ctx context.Context, value number.Number, labels []label.KeyValue) { | ||||
| 		operate: func(inst interface{}, ctx context.Context, value number.Number, labels []attribute.KeyValue) { | ||||
| 			counter := inst.(metric.Int64Counter) | ||||
| 			counter.Add(ctx, value.AsInt64(), labels...) | ||||
| 		}, | ||||
| @@ -389,7 +389,7 @@ func floatCounterTestImpl() testImpl { | ||||
| 				} | ||||
| 			} | ||||
| 		}, | ||||
| 		operate: func(inst interface{}, ctx context.Context, value number.Number, labels []label.KeyValue) { | ||||
| 		operate: func(inst interface{}, ctx context.Context, value number.Number, labels []attribute.KeyValue) { | ||||
| 			counter := inst.(metric.Float64Counter) | ||||
| 			counter.Add(ctx, value.AsFloat64(), labels...) | ||||
| 		}, | ||||
| @@ -425,7 +425,7 @@ func intLastValueTestImpl() testImpl { | ||||
| 			r1 := rand.Int63() | ||||
| 			return number.NewInt64Number(rand.Int63() - r1) | ||||
| 		}, | ||||
| 		operate: func(inst interface{}, ctx context.Context, value number.Number, labels []label.KeyValue) { | ||||
| 		operate: func(inst interface{}, ctx context.Context, value number.Number, labels []attribute.KeyValue) { | ||||
| 			valuerecorder := inst.(metric.Int64ValueRecorder) | ||||
| 			valuerecorder.Record(ctx, value.AsInt64(), labels...) | ||||
| 		}, | ||||
| @@ -466,7 +466,7 @@ func floatLastValueTestImpl() testImpl { | ||||
| 		getUpdateValue: func() number.Number { | ||||
| 			return number.NewFloat64Number((-0.5 + rand.Float64()) * 100000) | ||||
| 		}, | ||||
| 		operate: func(inst interface{}, ctx context.Context, value number.Number, labels []label.KeyValue) { | ||||
| 		operate: func(inst interface{}, ctx context.Context, value number.Number, labels []attribute.KeyValue) { | ||||
| 			valuerecorder := inst.(metric.Float64ValueRecorder) | ||||
| 			valuerecorder.Record(ctx, value.AsFloat64(), labels...) | ||||
| 		}, | ||||
|   | ||||
| @@ -19,7 +19,7 @@ import ( | ||||
| 	"math/rand" | ||||
| 	"testing" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| ) | ||||
|  | ||||
| @@ -27,8 +27,8 @@ const conflict = 0.5 | ||||
|  | ||||
| func makeLabels(n int) (_, _ *resource.Resource) { | ||||
| 	used := map[string]bool{} | ||||
| 	l1 := make([]label.KeyValue, n) | ||||
| 	l2 := make([]label.KeyValue, n) | ||||
| 	l1 := make([]attribute.KeyValue, n) | ||||
| 	l2 := make([]attribute.KeyValue, n) | ||||
| 	for i := 0; i < n; i++ { | ||||
| 		var k string | ||||
| 		for { | ||||
| @@ -38,12 +38,12 @@ func makeLabels(n int) (_, _ *resource.Resource) { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		l1[i] = label.String(k, fmt.Sprint("v", rand.Intn(1000000000))) | ||||
| 		l1[i] = attribute.String(k, fmt.Sprint("v", rand.Intn(1000000000))) | ||||
|  | ||||
| 		if rand.Float64() < conflict { | ||||
| 			l2[i] = l1[i] | ||||
| 		} else { | ||||
| 			l2[i] = label.String(k, fmt.Sprint("v", rand.Intn(1000000000))) | ||||
| 			l2[i] = attribute.String(k, fmt.Sprint("v", rand.Intn(1000000000))) | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import ( | ||||
| 	"path/filepath" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel" | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/semconv" | ||||
| ) | ||||
|  | ||||
| @@ -41,7 +41,7 @@ type ( | ||||
| 	Host struct{} | ||||
|  | ||||
| 	stringDetector struct { | ||||
| 		K label.Key | ||||
| 		K attribute.Key | ||||
| 		F func() (string, error) | ||||
| 	} | ||||
|  | ||||
| @@ -71,7 +71,7 @@ func (Host) Detect(ctx context.Context) (*Resource, error) { | ||||
|  | ||||
| // StringDetector returns a Detector that will produce a *Resource | ||||
| // containing the string as a value corresponding to k. | ||||
| func StringDetector(k label.Key, f func() (string, error)) Detector { | ||||
| func StringDetector(k attribute.Key, f func() (string, error)) Detector { | ||||
| 	return stringDetector{K: k, F: f} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -22,13 +22,13 @@ import ( | ||||
|  | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"go.opentelemetry.io/otel/label" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| 	"go.opentelemetry.io/otel/sdk/resource" | ||||
| ) | ||||
|  | ||||
| func TestBuiltinStringDetector(t *testing.T) { | ||||
| 	E := fmt.Errorf("no K") | ||||
| 	res, err := resource.StringDetector(label.Key("K"), func() (string, error) { | ||||
| 	res, err := resource.StringDetector(attribute.Key("K"), func() (string, error) { | ||||
| 		return "", E | ||||
| 	}).Detect(context.Background()) | ||||
| 	require.True(t, errors.Is(err, E)) | ||||
| @@ -40,8 +40,8 @@ func TestBuiltinStringConfig(t *testing.T) { | ||||
| 	res, err := resource.New( | ||||
| 		context.Background(), | ||||
| 		resource.WithoutBuiltin(), | ||||
| 		resource.WithAttributes(label.String("A", "B")), | ||||
| 		resource.WithDetectors(resource.StringDetector(label.Key("K"), func() (string, error) { | ||||
| 		resource.WithAttributes(attribute.String("A", "B")), | ||||
| 		resource.WithDetectors(resource.StringDetector(attribute.Key("K"), func() (string, error) { | ||||
| 			return "", fmt.Errorf("K-IS-MISSING") | ||||
| 		})), | ||||
| 	) | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user