You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2026-06-03 18:35:08 +02:00
cf2a4a180f
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [mvdan.cc/gofumpt](https://redirect.github.com/mvdan/gofumpt) | `v0.9.2` → `v0.10.0` |  |  | --- ### Release Notes <details> <summary>mvdan/gofumpt (mvdan.cc/gofumpt)</summary> ### [`v0.10.0`](https://redirect.github.com/mvdan/gofumpt/blob/HEAD/CHANGELOG.md#v0100---2026-05-04) [Compare Source](https://redirect.github.com/mvdan/gofumpt/compare/v0.9.2...v0.10.0) This release is based on Go 1.26's gofmt, and requires Go 1.25 or later. A new rule is introduced to drop unnecessary parentheses around expressions where the inner expression is unambiguous on its own, such as `f((3))`. Parentheses are kept where they are useful, such as on binary expressions. See [#​44](https://redirect.github.com/mvdan/gofumpt/issues/44). A new rule is introduced to require multi-line function calls to match the opening and closing parenthesis in terms of the use of newlines. See [#​74](https://redirect.github.com/mvdan/gofumpt/issues/74). The `-extra` flag now accepts a comma-separated list of rule names to enable individual extra rules, rather than enabling all of them at once. See [#​339](https://redirect.github.com/mvdan/gofumpt/issues/339). The following changes are included as well: - Avoid crashing on `go.mod` files without a `module` directive - [#​350](https://redirect.github.com/mvdan/gofumpt/issues/350) - Avoid failing when an ignored directory cannot be read - [#​351](https://redirect.github.com/mvdan/gofumpt/issues/351) - Avoid prefixing more kinds of commented-out Go code with spaces - [#​230](https://redirect.github.com/mvdan/gofumpt/issues/230) - Avoid prefixing a shebang comment with a space - [#​237](https://redirect.github.com/mvdan/gofumpt/issues/237) - Narrow the newlines on assignments rule to ignore complex cases - [#​354](https://redirect.github.com/mvdan/gofumpt/issues/354) - Fix three bugs which caused a second gofumpt run to make changes - [#​132](https://redirect.github.com/mvdan/gofumpt/issues/132), [#​345](https://redirect.github.com/mvdan/gofumpt/issues/345) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/open-telemetry/opentelemetry-go). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJTa2lwIENoYW5nZWxvZyIsImRlcGVuZGVuY2llcyJdfQ==--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Tyler Yahn <codingalias@gmail.com>
297 lines
5.6 KiB
Go
297 lines
5.6 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package log_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/log"
|
|
)
|
|
|
|
// Store results in a file scope var to ensure compiler does not optimize the
|
|
// test away.
|
|
var (
|
|
outV log.Value
|
|
outKV log.KeyValue
|
|
|
|
outBool bool
|
|
outFloat64 float64
|
|
outInt64 int64
|
|
outMap []log.KeyValue
|
|
outSlice []log.Value
|
|
outStr string
|
|
)
|
|
|
|
func BenchmarkBool(b *testing.B) {
|
|
const k, v = "bool", true
|
|
|
|
b.Run("Value", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outV = log.BoolValue(v)
|
|
}
|
|
})
|
|
b.Run("KeyValue", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outKV = log.Bool(k, v)
|
|
}
|
|
})
|
|
|
|
kv := log.Bool(k, v)
|
|
b.Run("AsBool", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outBool = kv.Value.AsBool()
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkFloat64(b *testing.B) {
|
|
const k, v = "float64", 3.0
|
|
|
|
b.Run("Value", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outV = log.Float64Value(v)
|
|
}
|
|
})
|
|
b.Run("KeyValue", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outKV = log.Float64(k, v)
|
|
}
|
|
})
|
|
|
|
kv := log.Float64(k, v)
|
|
b.Run("AsFloat64", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outFloat64 = kv.Value.AsFloat64()
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkInt(b *testing.B) {
|
|
const k, v = "int", 32
|
|
|
|
b.Run("Value", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outV = log.IntValue(v)
|
|
}
|
|
})
|
|
b.Run("KeyValue", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outKV = log.Int(k, v)
|
|
}
|
|
})
|
|
|
|
kv := log.Int(k, v)
|
|
b.Run("AsInt64", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outInt64 = kv.Value.AsInt64()
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkInt64(b *testing.B) {
|
|
const k, v = "int64", int64(32)
|
|
|
|
b.Run("Value", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outV = log.Int64Value(v)
|
|
}
|
|
})
|
|
b.Run("KeyValue", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outKV = log.Int64(k, v)
|
|
}
|
|
})
|
|
|
|
kv := log.Int64(k, v)
|
|
b.Run("AsInt64", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outInt64 = kv.Value.AsInt64()
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkMap(b *testing.B) {
|
|
const k = "map"
|
|
v := []log.KeyValue{log.Bool("b", true), log.Int("i", 1)}
|
|
|
|
b.Run("Value", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outV = log.MapValue(v...)
|
|
}
|
|
})
|
|
b.Run("KeyValue", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outKV = log.Map(k, v...)
|
|
}
|
|
})
|
|
|
|
kv := log.Map(k, v...)
|
|
b.Run("AsMap", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outMap = kv.Value.AsMap()
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkSlice(b *testing.B) {
|
|
const k = "slice"
|
|
v := []log.Value{log.BoolValue(true), log.IntValue(1)}
|
|
|
|
b.Run("Value", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outV = log.SliceValue(v...)
|
|
}
|
|
})
|
|
b.Run("KeyValue", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outKV = log.Slice(k, v...)
|
|
}
|
|
})
|
|
|
|
kv := log.Slice(k, v...)
|
|
b.Run("AsSlice", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outSlice = kv.Value.AsSlice()
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkString(b *testing.B) {
|
|
const k, v = "str", "value"
|
|
|
|
b.Run("Value", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outV = log.StringValue(v)
|
|
}
|
|
})
|
|
b.Run("KeyValue", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outKV = log.String(k, v)
|
|
}
|
|
})
|
|
|
|
kv := log.String(k, v)
|
|
b.Run("AsString", func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
outStr = kv.Value.AsString()
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkValueEqual(b *testing.B) {
|
|
vals := []log.Value{
|
|
{},
|
|
log.Int64Value(1),
|
|
log.Int64Value(2),
|
|
log.Float64Value(3.5),
|
|
log.Float64Value(3.7),
|
|
log.BoolValue(true),
|
|
log.BoolValue(false),
|
|
log.StringValue("hi"),
|
|
log.StringValue("bye"),
|
|
log.BytesValue([]byte{1, 3, 5}),
|
|
log.SliceValue(log.StringValue("foo")),
|
|
log.SliceValue(log.IntValue(3), log.StringValue("foo")),
|
|
log.MapValue(log.Bool("b", true), log.Int("i", 3)),
|
|
log.MapValue(
|
|
log.Slice("l", log.IntValue(3), log.StringValue("foo")),
|
|
log.Bytes("b", []byte{3, 5, 7}),
|
|
log.Empty("e"),
|
|
),
|
|
}
|
|
for _, v1 := range vals {
|
|
for _, v2 := range vals {
|
|
b.Run(v1.String()+" with "+v2.String(), func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for i := 0; i < b.N; i++ {
|
|
_ = v1.Equal(v2)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkKeyValueFromAttribute(b *testing.B) {
|
|
testCases := []struct {
|
|
desc string
|
|
kv attribute.KeyValue
|
|
}{
|
|
{
|
|
desc: "Empty",
|
|
kv: attribute.KeyValue{},
|
|
},
|
|
{
|
|
desc: "Bool",
|
|
kv: attribute.Bool("k", true),
|
|
},
|
|
{
|
|
desc: "BoolSlice",
|
|
kv: attribute.BoolSlice("k", []bool{true, false}),
|
|
},
|
|
{
|
|
desc: "Int64",
|
|
kv: attribute.Int64("k", 13),
|
|
},
|
|
{
|
|
desc: "Int64Slice",
|
|
kv: attribute.Int64Slice("k", []int64{12, 34}),
|
|
},
|
|
{
|
|
desc: "Float64",
|
|
kv: attribute.Float64("k", 3.14),
|
|
},
|
|
{
|
|
desc: "Float64Slice",
|
|
kv: attribute.Float64Slice("k", []float64{3.14, 2.72}),
|
|
},
|
|
{
|
|
desc: "String",
|
|
kv: attribute.String("k", "foo"),
|
|
},
|
|
{
|
|
desc: "StringSlice",
|
|
kv: attribute.StringSlice("k", []string{"foo", "bar"}),
|
|
},
|
|
{
|
|
desc: "Slice",
|
|
kv: attribute.Slice(
|
|
"k",
|
|
attribute.BoolValue(true),
|
|
attribute.StringValue("foo"),
|
|
attribute.SliceValue(attribute.IntValue(7)),
|
|
),
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
b.Run(tc.desc, func(b *testing.B) {
|
|
b.ReportAllocs()
|
|
for range b.N {
|
|
outKV = log.KeyValueFromAttribute(tc.kv)
|
|
}
|
|
})
|
|
}
|
|
}
|