1
0
mirror of https://github.com/golang/go synced 2024-11-18 11:04:42 -07:00

internal/telemetry: convert attributes using the key type

This uses the strongly typed key to get the value rather than
type switching on the value itself.

Change-Id: I8f72d1d9cac0191b0565c14d8a1108459ee6df36
Reviewed-on: https://go-review.googlesource.com/c/tools/+/225379
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
Ian Cottrell 2020-03-24 23:03:59 -04:00
parent 1249273038
commit 1386b938c6

View File

@ -234,43 +234,47 @@ func convertAttributes(it event.TagIterator) *wire.Attributes {
attributes := make(map[string]wire.Attribute)
for ; it.Valid(); it.Advance() {
tag := it.Tag()
attributes[tag.Key.Name()] = convertAttribute(tag.Value)
attributes[tag.Key.Name()] = convertAttribute(tag)
}
return &wire.Attributes{AttributeMap: attributes}
}
func convertAttribute(v interface{}) wire.Attribute {
switch v := v.(type) {
case int8:
return wire.IntAttribute{IntValue: int64(v)}
case int16:
return wire.IntAttribute{IntValue: int64(v)}
case int32:
return wire.IntAttribute{IntValue: int64(v)}
case int64:
return wire.IntAttribute{IntValue: v}
case int:
return wire.IntAttribute{IntValue: int64(v)}
case uint8:
return wire.IntAttribute{IntValue: int64(v)}
case uint16:
return wire.IntAttribute{IntValue: int64(v)}
case uint32:
return wire.IntAttribute{IntValue: int64(v)}
case uint64:
return wire.IntAttribute{IntValue: int64(v)}
case uint:
return wire.IntAttribute{IntValue: int64(v)}
case float32:
return wire.DoubleAttribute{DoubleValue: float64(v)}
case float64:
return wire.DoubleAttribute{DoubleValue: v}
case bool:
return wire.BoolAttribute{BoolValue: v}
case string:
return wire.StringAttribute{StringValue: toTruncatableString(v)}
func convertAttribute(tag event.Tag) wire.Attribute {
switch key := tag.Key.(type) {
case *event.IntKey:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.Int8Key:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.Int16Key:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.Int32Key:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.Int64Key:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.UIntKey:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.UInt8Key:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.UInt16Key:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.UInt32Key:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.UInt64Key:
return wire.IntAttribute{IntValue: int64(key.From(tag))}
case *event.Float32Key:
return wire.DoubleAttribute{DoubleValue: float64(key.From(tag))}
case *event.Float64Key:
return wire.DoubleAttribute{DoubleValue: key.From(tag)}
case *event.BooleanKey:
return wire.BoolAttribute{BoolValue: key.From(tag)}
case *event.StringKey:
return wire.StringAttribute{StringValue: toTruncatableString(key.From(tag))}
case *event.ErrorKey:
return wire.StringAttribute{StringValue: toTruncatableString(key.From(tag).Error())}
case *event.ValueKey:
return wire.StringAttribute{StringValue: toTruncatableString(fmt.Sprint(key.From(tag)))}
default:
return wire.StringAttribute{StringValue: toTruncatableString(fmt.Sprint(v))}
return wire.StringAttribute{StringValue: toTruncatableString(fmt.Sprintf("%T", key))}
}
}