Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ The next release will require at least [Go 1.26].

### Fixed

- Ensure metric helpers in `go.opentelemetry.io/otel/semconv/v1.32.0`, `go.opentelemetry.io/otel/semconv/v1.33.0`, and `go.opentelemetry.io/otel/semconv/v1.34.0` record measurements only once when no attributes are provided. (#8849)
- Name span events created from OpenTracing logs after the `event` log field, falling back to `log`, instead of always using an empty name in `go.opentelemetry.io/otel/bridge/opentracing`. (#8648)
- Count exception attributes omitted due to the attribute count limit as dropped in `go.opentelemetry.io/otel/sdk/log`. (#8796)
- Encode `NaN` and infinite double attribute values as strings in OTLP/HTTP JSON requests from `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#8775)
Expand Down
61 changes: 61 additions & 0 deletions internal/tools/semconvkit/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ package main

import (
"bytes"
"go/ast"
"go/parser"
"go/token"
"os"
"path/filepath"
"strings"
Expand Down Expand Up @@ -94,6 +97,64 @@ func TestNoInvalidObservableHistogramTypes(t *testing.T) {
}
}

func TestGeneratedMetricHelpersReturnAfterEmptyAttrs(t *testing.T) {
t.Parallel()

semconvDir := filepath.Join("..", "..", "..", "semconv")
fset := token.NewFileSet()

err := filepath.WalkDir(semconvDir, func(path string, d os.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() ||
filepath.Base(path) != "metric.go" ||
!strings.HasSuffix(filepath.Base(filepath.Dir(path)), "conv") {
return nil
}

file, err := parser.ParseFile(fset, path, nil, 0)
if err != nil {
return err
}

ast.Inspect(file, func(node ast.Node) bool {
Comment thread
MrAlias marked this conversation as resolved.
Outdated
ifStmt, ok := node.(*ast.IfStmt)
if !ok {
return true
}

condition, ok := ifStmt.Cond.(*ast.BinaryExpr)
if !ok || condition.Op != token.EQL {
return true
}
call, ok := condition.X.(*ast.CallExpr)
zero, zeroOK := condition.Y.(*ast.BasicLit)
if !ok || !zeroOK || zero.Kind != token.INT || zero.Value != "0" || len(call.Args) != 1 {
return true
}
fn, ok := call.Fun.(*ast.Ident)
arg, argOK := call.Args[0].(*ast.Ident)
if !ok || !argOK || fn.Name != "len" || arg.Name != "attrs" {
return true
}

if len(ifStmt.Body.List) == 0 {
t.Errorf("%s:%d: empty attrs fast path has no body", path, fset.Position(ifStmt.Pos()).Line)
return true
}
if _, ok := ifStmt.Body.List[len(ifStmt.Body.List)-1].(*ast.ReturnStmt); !ok {
t.Errorf("%s:%d: empty attrs fast path does not return", path, fset.Position(ifStmt.Pos()).Line)
}
return true
})
return nil
})
if err != nil {
t.Fatalf("WalkDir(%q) error = %v", semconvDir, err)
}
}

func writeGoFile(t *testing.T, dir, _, src string) {
t.Helper()

Expand Down
1 change: 1 addition & 0 deletions semconv/v1.32.0/containerconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions semconv/v1.32.0/goconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions semconv/v1.32.0/k8sconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions semconv/v1.32.0/processconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions semconv/v1.32.0/rpcconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions semconv/v1.32.0/systemconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions semconv/v1.33.0/containerconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions semconv/v1.33.0/goconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions semconv/v1.33.0/k8sconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions semconv/v1.33.0/processconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions semconv/v1.33.0/rpcconv/metric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading