build(deps): bump the otel group with 8 updates
Bumps the otel group with 8 updates: | Package | From | To | | --- | --- | --- | | [go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc](https://github.com/open-telemetry/opentelemetry-go-contrib) | `0.53.0` | `0.54.0` | | [go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp](https://github.com/open-telemetry/opentelemetry-go-contrib) | `0.53.0` | `0.54.0` | | [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go) | `1.28.0` | `1.29.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace](https://github.com/open-telemetry/opentelemetry-go) | `1.28.0` | `1.29.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go) | `1.28.0` | `1.29.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp](https://github.com/open-telemetry/opentelemetry-go) | `1.28.0` | `1.29.0` | | [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) | `1.28.0` | `1.29.0` | | [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go) | `1.28.0` | `1.29.0` | Updates `go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc` from 0.53.0 to 0.54.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.53.0...zpages/v0.54.0) Updates `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp` from 0.53.0 to 0.54.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.53.0...zpages/v0.54.0) Updates `go.opentelemetry.io/otel` from 1.28.0 to 1.29.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...v1.29.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace` from 1.28.0 to 1.29.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...v1.29.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` from 1.28.0 to 1.29.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...v1.29.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` from 1.28.0 to 1.29.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...v1.29.0) Updates `go.opentelemetry.io/otel/sdk` from 1.28.0 to 1.29.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...v1.29.0) Updates `go.opentelemetry.io/otel/trace` from 1.28.0 to 1.29.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...v1.29.0) --- updated-dependencies: - dependency-name: go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc dependency-type: direct:production update-type: version-update:semver-minor dependency-group: otel - dependency-name: go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp dependency-type: direct:production update-type: version-update:semver-minor dependency-group: otel - dependency-name: go.opentelemetry.io/otel dependency-type: direct:production update-type: version-update:semver-minor dependency-group: otel - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace dependency-type: direct:production update-type: version-update:semver-minor dependency-group: otel - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc dependency-type: direct:production update-type: version-update:semver-minor dependency-group: otel - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp dependency-type: direct:production update-type: version-update:semver-minor dependency-group: otel - dependency-name: go.opentelemetry.io/otel/sdk dependency-type: direct:production update-type: version-update:semver-minor dependency-group: otel - dependency-name: go.opentelemetry.io/otel/trace dependency-type: direct:production update-type: version-update:semver-minor dependency-group: otel ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
parent
26d6fd0c3f
commit
f4529ace1b
34
go.mod
34
go.mod
@ -61,18 +61,18 @@ require (
|
|||||||
github.com/urfave/cli/v2 v2.27.4
|
github.com/urfave/cli/v2 v2.27.4
|
||||||
github.com/vishvananda/netlink v1.3.0
|
github.com/vishvananda/netlink v1.3.0
|
||||||
go.etcd.io/bbolt v1.3.11
|
go.etcd.io/bbolt v1.3.11
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0
|
||||||
go.opentelemetry.io/otel v1.28.0
|
go.opentelemetry.io/otel v1.29.0
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0
|
||||||
go.opentelemetry.io/otel/sdk v1.28.0
|
go.opentelemetry.io/otel/sdk v1.29.0
|
||||||
go.opentelemetry.io/otel/trace v1.28.0
|
go.opentelemetry.io/otel/trace v1.29.0
|
||||||
golang.org/x/mod v0.20.0
|
golang.org/x/mod v0.20.0
|
||||||
golang.org/x/sync v0.8.0
|
golang.org/x/sync v0.8.0
|
||||||
golang.org/x/sys v0.24.0
|
golang.org/x/sys v0.24.0
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd
|
||||||
google.golang.org/grpc v1.65.0
|
google.golang.org/grpc v1.65.0
|
||||||
google.golang.org/protobuf v1.34.2
|
google.golang.org/protobuf v1.34.2
|
||||||
k8s.io/apimachinery v0.31.0
|
k8s.io/apimachinery v0.31.0
|
||||||
@ -105,7 +105,7 @@ require (
|
|||||||
github.com/google/gofuzz v1.2.0 // indirect
|
github.com/google/gofuzz v1.2.0 // indirect
|
||||||
github.com/gorilla/websocket v1.5.0 // indirect
|
github.com/gorilla/websocket v1.5.0 // indirect
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect
|
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/mdlayher/socket v0.4.1 // indirect
|
github.com/mdlayher/socket v0.4.1 // indirect
|
||||||
@ -128,16 +128,16 @@ require (
|
|||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
||||||
go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 // indirect
|
go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 // indirect
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.28.0 // indirect
|
go.opentelemetry.io/otel/metric v1.29.0 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
|
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
|
||||||
golang.org/x/crypto v0.25.0 // indirect
|
golang.org/x/crypto v0.26.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect
|
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect
|
||||||
golang.org/x/net v0.27.0 // indirect
|
golang.org/x/net v0.28.0 // indirect
|
||||||
golang.org/x/oauth2 v0.21.0 // indirect
|
golang.org/x/oauth2 v0.22.0 // indirect
|
||||||
golang.org/x/term v0.22.0 // indirect
|
golang.org/x/term v0.23.0 // indirect
|
||||||
golang.org/x/text v0.16.0 // indirect
|
golang.org/x/text v0.17.0 // indirect
|
||||||
golang.org/x/time v0.3.0 // indirect
|
golang.org/x/time v0.3.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd // indirect
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
68
go.sum
68
go.sum
@ -169,8 +169,8 @@ github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpS
|
|||||||
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU=
|
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk=
|
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk=
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI=
|
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k=
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
||||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
@ -335,24 +335,24 @@ go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwf
|
|||||||
go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
|
go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk=
|
||||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
|
||||||
go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo=
|
go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw=
|
||||||
go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4=
|
go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 h1:nSiV3s7wiCam610XcLbYOmMfJxB9gO4uK3Xgv5gmTgg=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0/go.mod h1:hKn/e/Nmd19/x1gvIHwtOwVWM+VhuITSWip3JUDghj0=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 h1:j9+03ymgYhPKmeXGk5Zu+cIZOlVzd9Zv7QIiyItjFBU=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 h1:JAv0Jwtl01UFiyWZEMiJZBiTlv5A50zNs8lsthXqIio=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0/go.mod h1:Y5+XiUG4Emn1hTfciPzGPJaSI+RpDts6BnCIir0SLqk=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0/go.mod h1:QNKLmUEAq2QUbPQUfvw4fmv0bgbK7UlOSFCnXyfvSNc=
|
||||||
go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q=
|
go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc=
|
||||||
go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s=
|
go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8=
|
||||||
go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE=
|
go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo=
|
||||||
go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg=
|
go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok=
|
||||||
go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g=
|
go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4=
|
||||||
go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI=
|
go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
|
||||||
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
|
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
|
||||||
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
|
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
|
||||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
@ -361,8 +361,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf
|
|||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
|
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
||||||
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
|
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4=
|
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4=
|
||||||
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
|
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
|
||||||
@ -384,11 +384,11 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
|
|||||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
|
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
|
||||||
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
|
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
|
golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
|
||||||
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -412,12 +412,12 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|||||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
||||||
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
|
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
|
||||||
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
|
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
|
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
||||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||||
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
|
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
|
||||||
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@ -439,10 +439,10 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
|
|||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd h1:BBOTEWLuuEGQy9n1y9MhVJ9Qt0BDu21X8qZs71/uPZo=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd h1:6TEm2ZxXoQmFWFlt1vNxvVOa1Q0dXFQD1m/rYjXmS0E=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
|
2
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel
generated
vendored
2
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/BUILD.bazel
generated
vendored
@ -73,7 +73,7 @@ go_test(
|
|||||||
"@org_golang_google_genproto_googleapis_api//httpbody",
|
"@org_golang_google_genproto_googleapis_api//httpbody",
|
||||||
"@org_golang_google_genproto_googleapis_rpc//errdetails",
|
"@org_golang_google_genproto_googleapis_rpc//errdetails",
|
||||||
"@org_golang_google_genproto_googleapis_rpc//status",
|
"@org_golang_google_genproto_googleapis_rpc//status",
|
||||||
"@org_golang_google_grpc//:go_default_library",
|
"@org_golang_google_grpc//:grpc",
|
||||||
"@org_golang_google_grpc//codes",
|
"@org_golang_google_grpc//codes",
|
||||||
"@org_golang_google_grpc//health/grpc_health_v1",
|
"@org_golang_google_grpc//health/grpc_health_v1",
|
||||||
"@org_golang_google_grpc//metadata",
|
"@org_golang_google_grpc//metadata",
|
||||||
|
11
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go
generated
vendored
11
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/context.go
generated
vendored
@ -49,6 +49,7 @@ var malformedHTTPHeaders = map[string]struct{}{
|
|||||||
type (
|
type (
|
||||||
rpcMethodKey struct{}
|
rpcMethodKey struct{}
|
||||||
httpPathPatternKey struct{}
|
httpPathPatternKey struct{}
|
||||||
|
httpPatternKey struct{}
|
||||||
|
|
||||||
AnnotateContextOption func(ctx context.Context) context.Context
|
AnnotateContextOption func(ctx context.Context) context.Context
|
||||||
)
|
)
|
||||||
@ -404,3 +405,13 @@ func HTTPPathPattern(ctx context.Context) (string, bool) {
|
|||||||
func withHTTPPathPattern(ctx context.Context, httpPathPattern string) context.Context {
|
func withHTTPPathPattern(ctx context.Context, httpPathPattern string) context.Context {
|
||||||
return context.WithValue(ctx, httpPathPatternKey{}, httpPathPattern)
|
return context.WithValue(ctx, httpPathPatternKey{}, httpPathPattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HTTPPattern returns the HTTP path pattern struct relating to the HTTP handler, if one exists.
|
||||||
|
func HTTPPattern(ctx context.Context) (Pattern, bool) {
|
||||||
|
v, ok := ctx.Value(httpPatternKey{}).(Pattern)
|
||||||
|
return v, ok
|
||||||
|
}
|
||||||
|
|
||||||
|
func withHTTPPattern(ctx context.Context, httpPattern Pattern) context.Context {
|
||||||
|
return context.WithValue(ctx, httpPatternKey{}, httpPattern)
|
||||||
|
}
|
||||||
|
16
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/errors.go
generated
vendored
16
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/errors.go
generated
vendored
@ -93,6 +93,7 @@ func HTTPError(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.R
|
|||||||
func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) {
|
func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marshaler, w http.ResponseWriter, r *http.Request, err error) {
|
||||||
// return Internal when Marshal failed
|
// return Internal when Marshal failed
|
||||||
const fallback = `{"code": 13, "message": "failed to marshal error message"}`
|
const fallback = `{"code": 13, "message": "failed to marshal error message"}`
|
||||||
|
const fallbackRewriter = `{"code": 13, "message": "failed to rewrite error message"}`
|
||||||
|
|
||||||
var customStatus *HTTPStatusError
|
var customStatus *HTTPStatusError
|
||||||
if errors.As(err, &customStatus) {
|
if errors.As(err, &customStatus) {
|
||||||
@ -100,19 +101,28 @@ func DefaultHTTPErrorHandler(ctx context.Context, mux *ServeMux, marshaler Marsh
|
|||||||
}
|
}
|
||||||
|
|
||||||
s := status.Convert(err)
|
s := status.Convert(err)
|
||||||
pb := s.Proto()
|
|
||||||
|
|
||||||
w.Header().Del("Trailer")
|
w.Header().Del("Trailer")
|
||||||
w.Header().Del("Transfer-Encoding")
|
w.Header().Del("Transfer-Encoding")
|
||||||
|
|
||||||
contentType := marshaler.ContentType(pb)
|
respRw, err := mux.forwardResponseRewriter(ctx, s.Proto())
|
||||||
|
if err != nil {
|
||||||
|
grpclog.Errorf("Failed to rewrite error message %q: %v", s, err)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
if _, err := io.WriteString(w, fallbackRewriter); err != nil {
|
||||||
|
grpclog.Errorf("Failed to write response: %v", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
contentType := marshaler.ContentType(respRw)
|
||||||
w.Header().Set("Content-Type", contentType)
|
w.Header().Set("Content-Type", contentType)
|
||||||
|
|
||||||
if s.Code() == codes.Unauthenticated {
|
if s.Code() == codes.Unauthenticated {
|
||||||
w.Header().Set("WWW-Authenticate", s.Message())
|
w.Header().Set("WWW-Authenticate", s.Message())
|
||||||
}
|
}
|
||||||
|
|
||||||
buf, merr := marshaler.Marshal(pb)
|
buf, merr := marshaler.Marshal(respRw)
|
||||||
if merr != nil {
|
if merr != nil {
|
||||||
grpclog.Errorf("Failed to marshal error message %q: %v", s, merr)
|
grpclog.Errorf("Failed to marshal error message %q: %v", s, merr)
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
32
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/handler.go
generated
vendored
32
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/handler.go
generated
vendored
@ -3,6 +3,7 @@ package runtime
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/textproto"
|
"net/textproto"
|
||||||
@ -55,20 +56,27 @@ func ForwardResponseStream(ctx context.Context, mux *ServeMux, marshaler Marshal
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
respRw, err := mux.forwardResponseRewriter(ctx, resp)
|
||||||
|
if err != nil {
|
||||||
|
grpclog.Errorf("Rewrite error: %v", err)
|
||||||
|
handleForwardResponseStreamError(ctx, wroteHeader, marshaler, w, req, mux, err, delimiter)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if !wroteHeader {
|
if !wroteHeader {
|
||||||
w.Header().Set("Content-Type", marshaler.ContentType(resp))
|
w.Header().Set("Content-Type", marshaler.ContentType(respRw))
|
||||||
}
|
}
|
||||||
|
|
||||||
var buf []byte
|
var buf []byte
|
||||||
httpBody, isHTTPBody := resp.(*httpbody.HttpBody)
|
httpBody, isHTTPBody := respRw.(*httpbody.HttpBody)
|
||||||
switch {
|
switch {
|
||||||
case resp == nil:
|
case respRw == nil:
|
||||||
buf, err = marshaler.Marshal(errorChunk(status.New(codes.Internal, "empty response")))
|
buf, err = marshaler.Marshal(errorChunk(status.New(codes.Internal, "empty response")))
|
||||||
case isHTTPBody:
|
case isHTTPBody:
|
||||||
buf = httpBody.GetData()
|
buf = httpBody.GetData()
|
||||||
default:
|
default:
|
||||||
result := map[string]interface{}{"result": resp}
|
result := map[string]interface{}{"result": respRw}
|
||||||
if rb, ok := resp.(responseBody); ok {
|
if rb, ok := respRw.(responseBody); ok {
|
||||||
result["result"] = rb.XXX_ResponseBody()
|
result["result"] = rb.XXX_ResponseBody()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,12 +172,17 @@ func ForwardResponseMessage(ctx context.Context, mux *ServeMux, marshaler Marsha
|
|||||||
HTTPError(ctx, mux, marshaler, w, req, err)
|
HTTPError(ctx, mux, marshaler, w, req, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
respRw, err := mux.forwardResponseRewriter(ctx, resp)
|
||||||
|
if err != nil {
|
||||||
|
grpclog.Errorf("Rewrite error: %v", err)
|
||||||
|
HTTPError(ctx, mux, marshaler, w, req, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
var buf []byte
|
var buf []byte
|
||||||
var err error
|
if rb, ok := respRw.(responseBody); ok {
|
||||||
if rb, ok := resp.(responseBody); ok {
|
|
||||||
buf, err = marshaler.Marshal(rb.XXX_ResponseBody())
|
buf, err = marshaler.Marshal(rb.XXX_ResponseBody())
|
||||||
} else {
|
} else {
|
||||||
buf, err = marshaler.Marshal(resp)
|
buf, err = marshaler.Marshal(respRw)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
grpclog.Errorf("Marshal error: %v", err)
|
grpclog.Errorf("Marshal error: %v", err)
|
||||||
@ -201,8 +214,7 @@ func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, re
|
|||||||
}
|
}
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
if err := opt(ctx, w, resp); err != nil {
|
if err := opt(ctx, w, resp); err != nil {
|
||||||
grpclog.Errorf("Error handling ForwardResponseOptions: %v", err)
|
return fmt.Errorf("error handling ForwardResponseOptions: %w", err)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
69
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go
generated
vendored
69
vendor/github.com/grpc-ecosystem/grpc-gateway/v2/runtime/mux.go
generated
vendored
@ -48,12 +48,19 @@ var encodedPathSplitter = regexp.MustCompile("(/|%2F)")
|
|||||||
// A HandlerFunc handles a specific pair of path pattern and HTTP method.
|
// A HandlerFunc handles a specific pair of path pattern and HTTP method.
|
||||||
type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string)
|
type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string)
|
||||||
|
|
||||||
|
// A Middleware handler wraps another HandlerFunc to do some pre- and/or post-processing of the request. This is used as an alternative to gRPC interceptors when using the direct-to-implementation
|
||||||
|
// registration methods. It is generally recommended to use gRPC client or server interceptors instead
|
||||||
|
// where possible.
|
||||||
|
type Middleware func(HandlerFunc) HandlerFunc
|
||||||
|
|
||||||
// ServeMux is a request multiplexer for grpc-gateway.
|
// ServeMux is a request multiplexer for grpc-gateway.
|
||||||
// It matches http requests to patterns and invokes the corresponding handler.
|
// It matches http requests to patterns and invokes the corresponding handler.
|
||||||
type ServeMux struct {
|
type ServeMux struct {
|
||||||
// handlers maps HTTP method to a list of handlers.
|
// handlers maps HTTP method to a list of handlers.
|
||||||
handlers map[string][]handler
|
handlers map[string][]handler
|
||||||
|
middlewares []Middleware
|
||||||
forwardResponseOptions []func(context.Context, http.ResponseWriter, proto.Message) error
|
forwardResponseOptions []func(context.Context, http.ResponseWriter, proto.Message) error
|
||||||
|
forwardResponseRewriter ForwardResponseRewriter
|
||||||
marshalers marshalerRegistry
|
marshalers marshalerRegistry
|
||||||
incomingHeaderMatcher HeaderMatcherFunc
|
incomingHeaderMatcher HeaderMatcherFunc
|
||||||
outgoingHeaderMatcher HeaderMatcherFunc
|
outgoingHeaderMatcher HeaderMatcherFunc
|
||||||
@ -69,6 +76,24 @@ type ServeMux struct {
|
|||||||
// ServeMuxOption is an option that can be given to a ServeMux on construction.
|
// ServeMuxOption is an option that can be given to a ServeMux on construction.
|
||||||
type ServeMuxOption func(*ServeMux)
|
type ServeMuxOption func(*ServeMux)
|
||||||
|
|
||||||
|
// ForwardResponseRewriter is the signature of a function that is capable of rewriting messages
|
||||||
|
// before they are forwarded in a unary, stream, or error response.
|
||||||
|
type ForwardResponseRewriter func(ctx context.Context, response proto.Message) (any, error)
|
||||||
|
|
||||||
|
// WithForwardResponseRewriter returns a ServeMuxOption that allows for implementers to insert logic
|
||||||
|
// that can rewrite the final response before it is forwarded.
|
||||||
|
//
|
||||||
|
// The response rewriter function is called during unary message forwarding, stream message
|
||||||
|
// forwarding and when errors are being forwarded.
|
||||||
|
//
|
||||||
|
// NOTE: Using this option will likely make what is generated by `protoc-gen-openapiv2` incorrect.
|
||||||
|
// Since this option involves making runtime changes to the response shape or type.
|
||||||
|
func WithForwardResponseRewriter(fwdResponseRewriter ForwardResponseRewriter) ServeMuxOption {
|
||||||
|
return func(sm *ServeMux) {
|
||||||
|
sm.forwardResponseRewriter = fwdResponseRewriter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// WithForwardResponseOption returns a ServeMuxOption representing the forwardResponseOption.
|
// WithForwardResponseOption returns a ServeMuxOption representing the forwardResponseOption.
|
||||||
//
|
//
|
||||||
// forwardResponseOption is an option that will be called on the relevant context.Context,
|
// forwardResponseOption is an option that will be called on the relevant context.Context,
|
||||||
@ -89,6 +114,15 @@ func WithUnescapingMode(mode UnescapingMode) ServeMuxOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithMiddlewares sets server middleware for all handlers. This is useful as an alternative to gRPC
|
||||||
|
// interceptors when using the direct-to-implementation registration methods and cannot rely
|
||||||
|
// on gRPC interceptors. It's recommended to use gRPC interceptors instead if possible.
|
||||||
|
func WithMiddlewares(middlewares ...Middleware) ServeMuxOption {
|
||||||
|
return func(serveMux *ServeMux) {
|
||||||
|
serveMux.middlewares = append(serveMux.middlewares, middlewares...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SetQueryParameterParser sets the query parameter parser, used to populate message from query parameters.
|
// SetQueryParameterParser sets the query parameter parser, used to populate message from query parameters.
|
||||||
// Configuring this will mean the generated OpenAPI output is no longer correct, and it should be
|
// Configuring this will mean the generated OpenAPI output is no longer correct, and it should be
|
||||||
// done with careful consideration.
|
// done with careful consideration.
|
||||||
@ -277,13 +311,14 @@ func WithHealthzEndpoint(healthCheckClient grpc_health_v1.HealthClient) ServeMux
|
|||||||
// NewServeMux returns a new ServeMux whose internal mapping is empty.
|
// NewServeMux returns a new ServeMux whose internal mapping is empty.
|
||||||
func NewServeMux(opts ...ServeMuxOption) *ServeMux {
|
func NewServeMux(opts ...ServeMuxOption) *ServeMux {
|
||||||
serveMux := &ServeMux{
|
serveMux := &ServeMux{
|
||||||
handlers: make(map[string][]handler),
|
handlers: make(map[string][]handler),
|
||||||
forwardResponseOptions: make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0),
|
forwardResponseOptions: make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0),
|
||||||
marshalers: makeMarshalerMIMERegistry(),
|
forwardResponseRewriter: func(ctx context.Context, response proto.Message) (any, error) { return response, nil },
|
||||||
errorHandler: DefaultHTTPErrorHandler,
|
marshalers: makeMarshalerMIMERegistry(),
|
||||||
streamErrorHandler: DefaultStreamErrorHandler,
|
errorHandler: DefaultHTTPErrorHandler,
|
||||||
routingErrorHandler: DefaultRoutingErrorHandler,
|
streamErrorHandler: DefaultStreamErrorHandler,
|
||||||
unescapingMode: UnescapingModeDefault,
|
routingErrorHandler: DefaultRoutingErrorHandler,
|
||||||
|
unescapingMode: UnescapingModeDefault,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
@ -305,6 +340,9 @@ func NewServeMux(opts ...ServeMuxOption) *ServeMux {
|
|||||||
|
|
||||||
// Handle associates "h" to the pair of HTTP method and path pattern.
|
// Handle associates "h" to the pair of HTTP method and path pattern.
|
||||||
func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) {
|
func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) {
|
||||||
|
if len(s.middlewares) > 0 {
|
||||||
|
h = chainMiddlewares(s.middlewares)(h)
|
||||||
|
}
|
||||||
s.handlers[meth] = append([]handler{{pat: pat, h: h}}, s.handlers[meth]...)
|
s.handlers[meth] = append([]handler{{pat: pat, h: h}}, s.handlers[meth]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,7 +443,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
h.h(w, r, pathParams)
|
s.handleHandler(h, w, r, pathParams)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,7 +496,7 @@ func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr)
|
s.errorHandler(ctx, s, outboundMarshaler, w, r, sterr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
h.h(w, r, pathParams)
|
s.handleHandler(h, w, r, pathParams)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_, outboundMarshaler := MarshalerForRequest(s, r)
|
_, outboundMarshaler := MarshalerForRequest(s, r)
|
||||||
@ -484,3 +522,16 @@ type handler struct {
|
|||||||
pat Pattern
|
pat Pattern
|
||||||
h HandlerFunc
|
h HandlerFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *ServeMux) handleHandler(h handler, w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
|
||||||
|
h.h(w, r.WithContext(withHTTPPattern(r.Context(), h.pat)), pathParams)
|
||||||
|
}
|
||||||
|
|
||||||
|
func chainMiddlewares(mws []Middleware) Middleware {
|
||||||
|
return func(next HandlerFunc) HandlerFunc {
|
||||||
|
for i := len(mws); i > 0; i-- {
|
||||||
|
next = mws[i-1](next)
|
||||||
|
}
|
||||||
|
return next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -42,6 +42,8 @@ type config struct {
|
|||||||
TracerProvider trace.TracerProvider
|
TracerProvider trace.TracerProvider
|
||||||
MeterProvider metric.MeterProvider
|
MeterProvider metric.MeterProvider
|
||||||
SpanStartOptions []trace.SpanStartOption
|
SpanStartOptions []trace.SpanStartOption
|
||||||
|
SpanAttributes []attribute.KeyValue
|
||||||
|
MetricAttributes []attribute.KeyValue
|
||||||
|
|
||||||
ReceivedEvent bool
|
ReceivedEvent bool
|
||||||
SentEvent bool
|
SentEvent bool
|
||||||
@ -257,3 +259,29 @@ func (o spanStartOption) apply(c *config) {
|
|||||||
func WithSpanOptions(opts ...trace.SpanStartOption) Option {
|
func WithSpanOptions(opts ...trace.SpanStartOption) Option {
|
||||||
return spanStartOption{opts}
|
return spanStartOption{opts}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type spanAttributesOption struct{ a []attribute.KeyValue }
|
||||||
|
|
||||||
|
func (o spanAttributesOption) apply(c *config) {
|
||||||
|
if o.a != nil {
|
||||||
|
c.SpanAttributes = o.a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithSpanAttributes returns an Option to add custom attributes to the spans.
|
||||||
|
func WithSpanAttributes(a ...attribute.KeyValue) Option {
|
||||||
|
return spanAttributesOption{a: a}
|
||||||
|
}
|
||||||
|
|
||||||
|
type metricAttributesOption struct{ a []attribute.KeyValue }
|
||||||
|
|
||||||
|
func (o metricAttributesOption) apply(c *config) {
|
||||||
|
if o.a != nil {
|
||||||
|
c.MetricAttributes = o.a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMetricAttributes returns an Option to add custom attributes to the metrics.
|
||||||
|
func WithMetricAttributes(a ...attribute.KeyValue) Option {
|
||||||
|
return metricAttributesOption{a: a}
|
||||||
|
}
|
||||||
|
@ -62,11 +62,11 @@ func (h *serverHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont
|
|||||||
trace.ContextWithRemoteSpanContext(ctx, trace.SpanContextFromContext(ctx)),
|
trace.ContextWithRemoteSpanContext(ctx, trace.SpanContextFromContext(ctx)),
|
||||||
name,
|
name,
|
||||||
trace.WithSpanKind(trace.SpanKindServer),
|
trace.WithSpanKind(trace.SpanKindServer),
|
||||||
trace.WithAttributes(attrs...),
|
trace.WithAttributes(append(attrs, h.config.SpanAttributes...)...),
|
||||||
)
|
)
|
||||||
|
|
||||||
gctx := gRPCContext{
|
gctx := gRPCContext{
|
||||||
metricAttrs: attrs,
|
metricAttrs: append(attrs, h.config.MetricAttributes...),
|
||||||
record: true,
|
record: true,
|
||||||
}
|
}
|
||||||
if h.config.Filter != nil {
|
if h.config.Filter != nil {
|
||||||
@ -102,11 +102,11 @@ func (h *clientHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) cont
|
|||||||
ctx,
|
ctx,
|
||||||
name,
|
name,
|
||||||
trace.WithSpanKind(trace.SpanKindClient),
|
trace.WithSpanKind(trace.SpanKindClient),
|
||||||
trace.WithAttributes(attrs...),
|
trace.WithAttributes(append(attrs, h.config.SpanAttributes...)...),
|
||||||
)
|
)
|
||||||
|
|
||||||
gctx := gRPCContext{
|
gctx := gRPCContext{
|
||||||
metricAttrs: attrs,
|
metricAttrs: append(attrs, h.config.MetricAttributes...),
|
||||||
record: true,
|
record: true,
|
||||||
}
|
}
|
||||||
if h.config.Filter != nil {
|
if h.config.Filter != nil {
|
||||||
|
@ -5,7 +5,7 @@ package otelgrpc // import "go.opentelemetry.io/contrib/instrumentation/google.g
|
|||||||
|
|
||||||
// Version is the current release version of the gRPC instrumentation.
|
// Version is the current release version of the gRPC instrumentation.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "0.53.0"
|
return "0.54.0"
|
||||||
// This string is updated by the pre_release.sh script during release
|
// This string is updated by the pre_release.sh script during release
|
||||||
}
|
}
|
||||||
|
|
||||||
|
7
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go
generated
vendored
7
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go
generated
vendored
@ -18,13 +18,6 @@ const (
|
|||||||
WriteErrorKey = attribute.Key("http.write_error") // if an error occurred while writing a reply, the string of the error (io.EOF is not recorded)
|
WriteErrorKey = attribute.Key("http.write_error") // if an error occurred while writing a reply, the string of the error (io.EOF is not recorded)
|
||||||
)
|
)
|
||||||
|
|
||||||
// Server HTTP metrics.
|
|
||||||
const (
|
|
||||||
serverRequestSize = "http.server.request.size" // Incoming request bytes total
|
|
||||||
serverResponseSize = "http.server.response.size" // Incoming response bytes total
|
|
||||||
serverDuration = "http.server.duration" // Incoming end to end duration, milliseconds
|
|
||||||
)
|
|
||||||
|
|
||||||
// Client HTTP metrics.
|
// Client HTTP metrics.
|
||||||
const (
|
const (
|
||||||
clientRequestSize = "http.client.request.size" // Outgoing request bytes total
|
clientRequestSize = "http.client.request.size" // Outgoing request bytes total
|
||||||
|
15
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go
generated
vendored
15
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go
generated
vendored
@ -8,6 +8,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptrace"
|
"net/http/httptrace"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel/attribute"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/propagation"
|
"go.opentelemetry.io/otel/propagation"
|
||||||
@ -33,8 +35,9 @@ type config struct {
|
|||||||
SpanNameFormatter func(string, *http.Request) string
|
SpanNameFormatter func(string, *http.Request) string
|
||||||
ClientTrace func(context.Context) *httptrace.ClientTrace
|
ClientTrace func(context.Context) *httptrace.ClientTrace
|
||||||
|
|
||||||
TracerProvider trace.TracerProvider
|
TracerProvider trace.TracerProvider
|
||||||
MeterProvider metric.MeterProvider
|
MeterProvider metric.MeterProvider
|
||||||
|
MetricAttributesFn func(*http.Request) []attribute.KeyValue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Option interface used for setting optional config properties.
|
// Option interface used for setting optional config properties.
|
||||||
@ -194,3 +197,11 @@ func WithServerName(server string) Option {
|
|||||||
c.ServerName = server
|
c.ServerName = server
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithMetricAttributesFn returns an Option to set a function that maps an HTTP request to a slice of attribute.KeyValue.
|
||||||
|
// These attributes will be included in metrics for every request.
|
||||||
|
func WithMetricAttributesFn(metricAttributesFn func(r *http.Request) []attribute.KeyValue) Option {
|
||||||
|
return optionFunc(func(c *config) {
|
||||||
|
c.MetricAttributesFn = metricAttributesFn
|
||||||
|
})
|
||||||
|
}
|
||||||
|
93
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go
generated
vendored
93
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go
generated
vendored
@ -9,11 +9,9 @@ import (
|
|||||||
|
|
||||||
"github.com/felixge/httpsnoop"
|
"github.com/felixge/httpsnoop"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request"
|
||||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv"
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv"
|
||||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil"
|
|
||||||
"go.opentelemetry.io/otel"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
|
||||||
"go.opentelemetry.io/otel/metric"
|
|
||||||
"go.opentelemetry.io/otel/propagation"
|
"go.opentelemetry.io/otel/propagation"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
@ -24,7 +22,6 @@ type middleware struct {
|
|||||||
server string
|
server string
|
||||||
|
|
||||||
tracer trace.Tracer
|
tracer trace.Tracer
|
||||||
meter metric.Meter
|
|
||||||
propagators propagation.TextMapPropagator
|
propagators propagation.TextMapPropagator
|
||||||
spanStartOptions []trace.SpanStartOption
|
spanStartOptions []trace.SpanStartOption
|
||||||
readEvent bool
|
readEvent bool
|
||||||
@ -34,10 +31,7 @@ type middleware struct {
|
|||||||
publicEndpoint bool
|
publicEndpoint bool
|
||||||
publicEndpointFn func(*http.Request) bool
|
publicEndpointFn func(*http.Request) bool
|
||||||
|
|
||||||
traceSemconv semconv.HTTPServer
|
semconv semconv.HTTPServer
|
||||||
requestBytesCounter metric.Int64Counter
|
|
||||||
responseBytesCounter metric.Int64Counter
|
|
||||||
serverLatencyMeasure metric.Float64Histogram
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultHandlerFormatter(operation string, _ *http.Request) string {
|
func defaultHandlerFormatter(operation string, _ *http.Request) string {
|
||||||
@ -56,8 +50,6 @@ func NewHandler(handler http.Handler, operation string, opts ...Option) http.Han
|
|||||||
func NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Handler {
|
func NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Handler {
|
||||||
h := middleware{
|
h := middleware{
|
||||||
operation: operation,
|
operation: operation,
|
||||||
|
|
||||||
traceSemconv: semconv.NewHTTPServer(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultOpts := []Option{
|
defaultOpts := []Option{
|
||||||
@ -67,7 +59,6 @@ func NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Han
|
|||||||
|
|
||||||
c := newConfig(append(defaultOpts, opts...)...)
|
c := newConfig(append(defaultOpts, opts...)...)
|
||||||
h.configure(c)
|
h.configure(c)
|
||||||
h.createMeasures()
|
|
||||||
|
|
||||||
return func(next http.Handler) http.Handler {
|
return func(next http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
@ -78,7 +69,6 @@ func NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Han
|
|||||||
|
|
||||||
func (h *middleware) configure(c *config) {
|
func (h *middleware) configure(c *config) {
|
||||||
h.tracer = c.Tracer
|
h.tracer = c.Tracer
|
||||||
h.meter = c.Meter
|
|
||||||
h.propagators = c.Propagators
|
h.propagators = c.Propagators
|
||||||
h.spanStartOptions = c.SpanStartOptions
|
h.spanStartOptions = c.SpanStartOptions
|
||||||
h.readEvent = c.ReadEvent
|
h.readEvent = c.ReadEvent
|
||||||
@ -88,6 +78,7 @@ func (h *middleware) configure(c *config) {
|
|||||||
h.publicEndpoint = c.PublicEndpoint
|
h.publicEndpoint = c.PublicEndpoint
|
||||||
h.publicEndpointFn = c.PublicEndpointFn
|
h.publicEndpointFn = c.PublicEndpointFn
|
||||||
h.server = c.ServerName
|
h.server = c.ServerName
|
||||||
|
h.semconv = semconv.NewHTTPServer(c.Meter)
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleErr(err error) {
|
func handleErr(err error) {
|
||||||
@ -96,30 +87,6 @@ func handleErr(err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *middleware) createMeasures() {
|
|
||||||
var err error
|
|
||||||
h.requestBytesCounter, err = h.meter.Int64Counter(
|
|
||||||
serverRequestSize,
|
|
||||||
metric.WithUnit("By"),
|
|
||||||
metric.WithDescription("Measures the size of HTTP request messages."),
|
|
||||||
)
|
|
||||||
handleErr(err)
|
|
||||||
|
|
||||||
h.responseBytesCounter, err = h.meter.Int64Counter(
|
|
||||||
serverResponseSize,
|
|
||||||
metric.WithUnit("By"),
|
|
||||||
metric.WithDescription("Measures the size of HTTP response messages."),
|
|
||||||
)
|
|
||||||
handleErr(err)
|
|
||||||
|
|
||||||
h.serverLatencyMeasure, err = h.meter.Float64Histogram(
|
|
||||||
serverDuration,
|
|
||||||
metric.WithUnit("ms"),
|
|
||||||
metric.WithDescription("Measures the duration of inbound HTTP requests."),
|
|
||||||
)
|
|
||||||
handleErr(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// serveHTTP sets up tracing and calls the given next http.Handler with the span
|
// serveHTTP sets up tracing and calls the given next http.Handler with the span
|
||||||
// context injected into the request context.
|
// context injected into the request context.
|
||||||
func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http.Handler) {
|
func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http.Handler) {
|
||||||
@ -134,7 +101,7 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http
|
|||||||
|
|
||||||
ctx := h.propagators.Extract(r.Context(), propagation.HeaderCarrier(r.Header))
|
ctx := h.propagators.Extract(r.Context(), propagation.HeaderCarrier(r.Header))
|
||||||
opts := []trace.SpanStartOption{
|
opts := []trace.SpanStartOption{
|
||||||
trace.WithAttributes(h.traceSemconv.RequestTraceAttrs(h.server, r)...),
|
trace.WithAttributes(h.semconv.RequestTraceAttrs(h.server, r)...),
|
||||||
}
|
}
|
||||||
|
|
||||||
opts = append(opts, h.spanStartOptions...)
|
opts = append(opts, h.spanStartOptions...)
|
||||||
@ -166,14 +133,12 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var bw bodyWrapper
|
|
||||||
// if request body is nil or NoBody, we don't want to mutate the body as it
|
// if request body is nil or NoBody, we don't want to mutate the body as it
|
||||||
// will affect the identity of it in an unforeseeable way because we assert
|
// will affect the identity of it in an unforeseeable way because we assert
|
||||||
// ReadCloser fulfills a certain interface and it is indeed nil or NoBody.
|
// ReadCloser fulfills a certain interface and it is indeed nil or NoBody.
|
||||||
|
bw := request.NewBodyWrapper(r.Body, readRecordFunc)
|
||||||
if r.Body != nil && r.Body != http.NoBody {
|
if r.Body != nil && r.Body != http.NoBody {
|
||||||
bw.ReadCloser = r.Body
|
r.Body = bw
|
||||||
bw.record = readRecordFunc
|
|
||||||
r.Body = &bw
|
|
||||||
}
|
}
|
||||||
|
|
||||||
writeRecordFunc := func(int64) {}
|
writeRecordFunc := func(int64) {}
|
||||||
@ -183,13 +148,7 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rww := &respWriterWrapper{
|
rww := request.NewRespWriterWrapper(w, writeRecordFunc)
|
||||||
ResponseWriter: w,
|
|
||||||
record: writeRecordFunc,
|
|
||||||
ctx: ctx,
|
|
||||||
props: h.propagators,
|
|
||||||
statusCode: http.StatusOK, // default status code in case the Handler doesn't write anything
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrap w to use our ResponseWriter methods while also exposing
|
// Wrap w to use our ResponseWriter methods while also exposing
|
||||||
// other interfaces that w may implement (http.CloseNotifier,
|
// other interfaces that w may implement (http.CloseNotifier,
|
||||||
@ -217,35 +176,35 @@ func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http
|
|||||||
|
|
||||||
next.ServeHTTP(w, r.WithContext(ctx))
|
next.ServeHTTP(w, r.WithContext(ctx))
|
||||||
|
|
||||||
span.SetStatus(semconv.ServerStatus(rww.statusCode))
|
statusCode := rww.StatusCode()
|
||||||
span.SetAttributes(h.traceSemconv.ResponseTraceAttrs(semconv.ResponseTelemetry{
|
bytesWritten := rww.BytesWritten()
|
||||||
StatusCode: rww.statusCode,
|
span.SetStatus(h.semconv.Status(statusCode))
|
||||||
ReadBytes: bw.read.Load(),
|
span.SetAttributes(h.semconv.ResponseTraceAttrs(semconv.ResponseTelemetry{
|
||||||
ReadError: bw.err,
|
StatusCode: statusCode,
|
||||||
WriteBytes: rww.written,
|
ReadBytes: bw.BytesRead(),
|
||||||
WriteError: rww.err,
|
ReadError: bw.Error(),
|
||||||
|
WriteBytes: bytesWritten,
|
||||||
|
WriteError: rww.Error(),
|
||||||
})...)
|
})...)
|
||||||
|
|
||||||
// Add metrics
|
|
||||||
attributes := append(labeler.Get(), semconvutil.HTTPServerRequestMetrics(h.server, r)...)
|
|
||||||
if rww.statusCode > 0 {
|
|
||||||
attributes = append(attributes, semconv.HTTPStatusCode(rww.statusCode))
|
|
||||||
}
|
|
||||||
o := metric.WithAttributeSet(attribute.NewSet(attributes...))
|
|
||||||
addOpts := []metric.AddOption{o} // Allocate vararg slice once.
|
|
||||||
h.requestBytesCounter.Add(ctx, bw.read.Load(), addOpts...)
|
|
||||||
h.responseBytesCounter.Add(ctx, rww.written, addOpts...)
|
|
||||||
|
|
||||||
// Use floating point division here for higher precision (instead of Millisecond method).
|
// Use floating point division here for higher precision (instead of Millisecond method).
|
||||||
elapsedTime := float64(time.Since(requestStartTime)) / float64(time.Millisecond)
|
elapsedTime := float64(time.Since(requestStartTime)) / float64(time.Millisecond)
|
||||||
|
|
||||||
h.serverLatencyMeasure.Record(ctx, elapsedTime, o)
|
h.semconv.RecordMetrics(ctx, semconv.MetricData{
|
||||||
|
ServerName: h.server,
|
||||||
|
Req: r,
|
||||||
|
StatusCode: statusCode,
|
||||||
|
AdditionalAttributes: labeler.Get(),
|
||||||
|
RequestSize: bw.BytesRead(),
|
||||||
|
ResponseSize: bytesWritten,
|
||||||
|
ElapsedTime: elapsedTime,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithRouteTag annotates spans and metrics with the provided route name
|
// WithRouteTag annotates spans and metrics with the provided route name
|
||||||
// with HTTP route attribute.
|
// with HTTP route attribute.
|
||||||
func WithRouteTag(route string, h http.Handler) http.Handler {
|
func WithRouteTag(route string, h http.Handler) http.Handler {
|
||||||
attr := semconv.NewHTTPServer().Route(route)
|
attr := semconv.NewHTTPServer(nil).Route(route)
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
span := trace.SpanFromContext(r.Context())
|
span := trace.SpanFromContext(r.Context())
|
||||||
span.SetAttributes(attr)
|
span.SetAttributes(attr)
|
||||||
|
75
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go
generated
vendored
Normal file
75
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/body_wrapper.go
generated
vendored
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package request // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ io.ReadCloser = &BodyWrapper{}
|
||||||
|
|
||||||
|
// BodyWrapper wraps a http.Request.Body (an io.ReadCloser) to track the number
|
||||||
|
// of bytes read and the last error.
|
||||||
|
type BodyWrapper struct {
|
||||||
|
io.ReadCloser
|
||||||
|
OnRead func(n int64) // must not be nil
|
||||||
|
|
||||||
|
mu sync.Mutex
|
||||||
|
read int64
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBodyWrapper creates a new BodyWrapper.
|
||||||
|
//
|
||||||
|
// The onRead attribute is a callback that will be called every time the data
|
||||||
|
// is read, with the number of bytes being read.
|
||||||
|
func NewBodyWrapper(body io.ReadCloser, onRead func(int64)) *BodyWrapper {
|
||||||
|
return &BodyWrapper{
|
||||||
|
ReadCloser: body,
|
||||||
|
OnRead: onRead,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read reads the data from the io.ReadCloser, and stores the number of bytes
|
||||||
|
// read and the error.
|
||||||
|
func (w *BodyWrapper) Read(b []byte) (int, error) {
|
||||||
|
n, err := w.ReadCloser.Read(b)
|
||||||
|
n1 := int64(n)
|
||||||
|
|
||||||
|
w.updateReadData(n1, err)
|
||||||
|
w.OnRead(n1)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *BodyWrapper) updateReadData(n int64, err error) {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
|
|
||||||
|
w.read += n
|
||||||
|
if err != nil {
|
||||||
|
w.err = err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Closes closes the io.ReadCloser.
|
||||||
|
func (w *BodyWrapper) Close() error {
|
||||||
|
return w.ReadCloser.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
// BytesRead returns the number of bytes read up to this point.
|
||||||
|
func (w *BodyWrapper) BytesRead() int64 {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
|
|
||||||
|
return w.read
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error returns the last error.
|
||||||
|
func (w *BodyWrapper) Error() error {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
|
|
||||||
|
return w.err
|
||||||
|
}
|
112
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go
generated
vendored
Normal file
112
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request/resp_writer_wrapper.go
generated
vendored
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package request // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ http.ResponseWriter = &RespWriterWrapper{}
|
||||||
|
|
||||||
|
// RespWriterWrapper wraps a http.ResponseWriter in order to track the number of
|
||||||
|
// bytes written, the last error, and to catch the first written statusCode.
|
||||||
|
// TODO: The wrapped http.ResponseWriter doesn't implement any of the optional
|
||||||
|
// types (http.Hijacker, http.Pusher, http.CloseNotifier, etc)
|
||||||
|
// that may be useful when using it in real life situations.
|
||||||
|
type RespWriterWrapper struct {
|
||||||
|
http.ResponseWriter
|
||||||
|
OnWrite func(n int64) // must not be nil
|
||||||
|
|
||||||
|
mu sync.RWMutex
|
||||||
|
written int64
|
||||||
|
statusCode int
|
||||||
|
err error
|
||||||
|
wroteHeader bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRespWriterWrapper creates a new RespWriterWrapper.
|
||||||
|
//
|
||||||
|
// The onWrite attribute is a callback that will be called every time the data
|
||||||
|
// is written, with the number of bytes that were written.
|
||||||
|
func NewRespWriterWrapper(w http.ResponseWriter, onWrite func(int64)) *RespWriterWrapper {
|
||||||
|
return &RespWriterWrapper{
|
||||||
|
ResponseWriter: w,
|
||||||
|
OnWrite: onWrite,
|
||||||
|
statusCode: http.StatusOK, // default status code in case the Handler doesn't write anything
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write writes the bytes array into the [ResponseWriter], and tracks the
|
||||||
|
// number of bytes written and last error.
|
||||||
|
func (w *RespWriterWrapper) Write(p []byte) (int, error) {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
|
|
||||||
|
w.writeHeader(http.StatusOK)
|
||||||
|
|
||||||
|
n, err := w.ResponseWriter.Write(p)
|
||||||
|
n1 := int64(n)
|
||||||
|
w.OnWrite(n1)
|
||||||
|
w.written += n1
|
||||||
|
w.err = err
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// WriteHeader persists initial statusCode for span attribution.
|
||||||
|
// All calls to WriteHeader will be propagated to the underlying ResponseWriter
|
||||||
|
// and will persist the statusCode from the first call.
|
||||||
|
// Blocking consecutive calls to WriteHeader alters expected behavior and will
|
||||||
|
// remove warning logs from net/http where developers will notice incorrect handler implementations.
|
||||||
|
func (w *RespWriterWrapper) WriteHeader(statusCode int) {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
|
|
||||||
|
w.writeHeader(statusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeHeader persists the status code for span attribution, and propagates
|
||||||
|
// the call to the underlying ResponseWriter.
|
||||||
|
// It does not acquire a lock, and therefore assumes that is being handled by a
|
||||||
|
// parent method.
|
||||||
|
func (w *RespWriterWrapper) writeHeader(statusCode int) {
|
||||||
|
if !w.wroteHeader {
|
||||||
|
w.wroteHeader = true
|
||||||
|
w.statusCode = statusCode
|
||||||
|
}
|
||||||
|
w.ResponseWriter.WriteHeader(statusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flush implements [http.Flusher].
|
||||||
|
func (w *RespWriterWrapper) Flush() {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
|
||||||
|
if f, ok := w.ResponseWriter.(http.Flusher); ok {
|
||||||
|
f.Flush()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// BytesWritten returns the number of bytes written.
|
||||||
|
func (w *RespWriterWrapper) BytesWritten() int64 {
|
||||||
|
w.mu.RLock()
|
||||||
|
defer w.mu.RUnlock()
|
||||||
|
|
||||||
|
return w.written
|
||||||
|
}
|
||||||
|
|
||||||
|
// BytesWritten returns the HTTP status code that was sent.
|
||||||
|
func (w *RespWriterWrapper) StatusCode() int {
|
||||||
|
w.mu.RLock()
|
||||||
|
defer w.mu.RUnlock()
|
||||||
|
|
||||||
|
return w.statusCode
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error returns the last error.
|
||||||
|
func (w *RespWriterWrapper) Error() error {
|
||||||
|
w.mu.RLock()
|
||||||
|
defer w.mu.RUnlock()
|
||||||
|
|
||||||
|
return w.err
|
||||||
|
}
|
@ -4,6 +4,7 @@
|
|||||||
package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv"
|
package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@ -11,6 +12,7 @@ import (
|
|||||||
|
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
|
"go.opentelemetry.io/otel/metric"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ResponseTelemetry struct {
|
type ResponseTelemetry struct {
|
||||||
@ -23,6 +25,11 @@ type ResponseTelemetry struct {
|
|||||||
|
|
||||||
type HTTPServer struct {
|
type HTTPServer struct {
|
||||||
duplicate bool
|
duplicate bool
|
||||||
|
|
||||||
|
// Old metrics
|
||||||
|
requestBytesCounter metric.Int64Counter
|
||||||
|
responseBytesCounter metric.Int64Counter
|
||||||
|
serverLatencyMeasure metric.Float64Histogram
|
||||||
}
|
}
|
||||||
|
|
||||||
// RequestTraceAttrs returns trace attributes for an HTTP request received by a
|
// RequestTraceAttrs returns trace attributes for an HTTP request received by a
|
||||||
@ -63,15 +70,10 @@ func (s HTTPServer) Route(route string) attribute.KeyValue {
|
|||||||
return oldHTTPServer{}.Route(route)
|
return oldHTTPServer{}.Route(route)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHTTPServer() HTTPServer {
|
// Status returns a span status code and message for an HTTP status code
|
||||||
env := strings.ToLower(os.Getenv("OTEL_HTTP_CLIENT_COMPATIBILITY_MODE"))
|
|
||||||
return HTTPServer{duplicate: env == "http/dup"}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServerStatus returns a span status code and message for an HTTP status code
|
|
||||||
// value returned by a server. Status codes in the 400-499 range are not
|
// value returned by a server. Status codes in the 400-499 range are not
|
||||||
// returned as errors.
|
// returned as errors.
|
||||||
func ServerStatus(code int) (codes.Code, string) {
|
func (s HTTPServer) Status(code int) (codes.Code, string) {
|
||||||
if code < 100 || code >= 600 {
|
if code < 100 || code >= 600 {
|
||||||
return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code)
|
return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code)
|
||||||
}
|
}
|
||||||
@ -80,3 +82,84 @@ func ServerStatus(code int) (codes.Code, string) {
|
|||||||
}
|
}
|
||||||
return codes.Unset, ""
|
return codes.Unset, ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MetricData struct {
|
||||||
|
ServerName string
|
||||||
|
Req *http.Request
|
||||||
|
StatusCode int
|
||||||
|
AdditionalAttributes []attribute.KeyValue
|
||||||
|
|
||||||
|
RequestSize int64
|
||||||
|
ResponseSize int64
|
||||||
|
ElapsedTime float64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s HTTPServer) RecordMetrics(ctx context.Context, md MetricData) {
|
||||||
|
if s.requestBytesCounter == nil || s.responseBytesCounter == nil || s.serverLatencyMeasure == nil {
|
||||||
|
// This will happen if an HTTPServer{} is used insted of NewHTTPServer.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
attributes := oldHTTPServer{}.MetricAttributes(md.ServerName, md.Req, md.StatusCode, md.AdditionalAttributes)
|
||||||
|
o := metric.WithAttributeSet(attribute.NewSet(attributes...))
|
||||||
|
addOpts := []metric.AddOption{o} // Allocate vararg slice once.
|
||||||
|
s.requestBytesCounter.Add(ctx, md.RequestSize, addOpts...)
|
||||||
|
s.responseBytesCounter.Add(ctx, md.ResponseSize, addOpts...)
|
||||||
|
s.serverLatencyMeasure.Record(ctx, md.ElapsedTime, o)
|
||||||
|
|
||||||
|
// TODO: Duplicate Metrics
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHTTPServer(meter metric.Meter) HTTPServer {
|
||||||
|
env := strings.ToLower(os.Getenv("OTEL_SEMCONV_STABILITY_OPT_IN"))
|
||||||
|
duplicate := env == "http/dup"
|
||||||
|
server := HTTPServer{
|
||||||
|
duplicate: duplicate,
|
||||||
|
}
|
||||||
|
server.requestBytesCounter, server.responseBytesCounter, server.serverLatencyMeasure = oldHTTPServer{}.createMeasures(meter)
|
||||||
|
return server
|
||||||
|
}
|
||||||
|
|
||||||
|
type HTTPClient struct {
|
||||||
|
duplicate bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewHTTPClient() HTTPClient {
|
||||||
|
env := strings.ToLower(os.Getenv("OTEL_SEMCONV_STABILITY_OPT_IN"))
|
||||||
|
return HTTPClient{duplicate: env == "http/dup"}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RequestTraceAttrs returns attributes for an HTTP request made by a client.
|
||||||
|
func (c HTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue {
|
||||||
|
if c.duplicate {
|
||||||
|
return append(oldHTTPClient{}.RequestTraceAttrs(req), newHTTPClient{}.RequestTraceAttrs(req)...)
|
||||||
|
}
|
||||||
|
return oldHTTPClient{}.RequestTraceAttrs(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResponseTraceAttrs returns metric attributes for an HTTP request made by a client.
|
||||||
|
func (c HTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue {
|
||||||
|
if c.duplicate {
|
||||||
|
return append(oldHTTPClient{}.ResponseTraceAttrs(resp), newHTTPClient{}.ResponseTraceAttrs(resp)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return oldHTTPClient{}.ResponseTraceAttrs(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c HTTPClient) Status(code int) (codes.Code, string) {
|
||||||
|
if code < 100 || code >= 600 {
|
||||||
|
return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code)
|
||||||
|
}
|
||||||
|
if code >= 400 {
|
||||||
|
return codes.Error, ""
|
||||||
|
}
|
||||||
|
return codes.Unset, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c HTTPClient) ErrorType(err error) attribute.KeyValue {
|
||||||
|
if c.duplicate {
|
||||||
|
return newHTTPClient{}.ErrorType(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return attribute.KeyValue{}
|
||||||
|
}
|
||||||
|
@ -4,11 +4,14 @@
|
|||||||
package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv"
|
package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
semconvNew "go.opentelemetry.io/otel/semconv/v1.24.0"
|
semconvNew "go.opentelemetry.io/otel/semconv/v1.26.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
type newHTTPServer struct{}
|
type newHTTPServer struct{}
|
||||||
@ -195,3 +198,151 @@ func (n newHTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.Ke
|
|||||||
func (n newHTTPServer) Route(route string) attribute.KeyValue {
|
func (n newHTTPServer) Route(route string) attribute.KeyValue {
|
||||||
return semconvNew.HTTPRoute(route)
|
return semconvNew.HTTPRoute(route)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type newHTTPClient struct{}
|
||||||
|
|
||||||
|
// RequestTraceAttrs returns trace attributes for an HTTP request made by a client.
|
||||||
|
func (n newHTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue {
|
||||||
|
/*
|
||||||
|
below attributes are returned:
|
||||||
|
- http.request.method
|
||||||
|
- http.request.method.original
|
||||||
|
- url.full
|
||||||
|
- server.address
|
||||||
|
- server.port
|
||||||
|
- network.protocol.name
|
||||||
|
- network.protocol.version
|
||||||
|
*/
|
||||||
|
numOfAttributes := 3 // URL, server address, proto, and method.
|
||||||
|
|
||||||
|
var urlHost string
|
||||||
|
if req.URL != nil {
|
||||||
|
urlHost = req.URL.Host
|
||||||
|
}
|
||||||
|
var requestHost string
|
||||||
|
var requestPort int
|
||||||
|
for _, hostport := range []string{urlHost, req.Header.Get("Host")} {
|
||||||
|
requestHost, requestPort = splitHostPort(hostport)
|
||||||
|
if requestHost != "" || requestPort > 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eligiblePort := requiredHTTPPort(req.URL != nil && req.URL.Scheme == "https", requestPort)
|
||||||
|
if eligiblePort > 0 {
|
||||||
|
numOfAttributes++
|
||||||
|
}
|
||||||
|
useragent := req.UserAgent()
|
||||||
|
if useragent != "" {
|
||||||
|
numOfAttributes++
|
||||||
|
}
|
||||||
|
|
||||||
|
protoName, protoVersion := netProtocol(req.Proto)
|
||||||
|
if protoName != "" && protoName != "http" {
|
||||||
|
numOfAttributes++
|
||||||
|
}
|
||||||
|
if protoVersion != "" {
|
||||||
|
numOfAttributes++
|
||||||
|
}
|
||||||
|
|
||||||
|
method, originalMethod := n.method(req.Method)
|
||||||
|
if originalMethod != (attribute.KeyValue{}) {
|
||||||
|
numOfAttributes++
|
||||||
|
}
|
||||||
|
|
||||||
|
attrs := make([]attribute.KeyValue, 0, numOfAttributes)
|
||||||
|
|
||||||
|
attrs = append(attrs, method)
|
||||||
|
if originalMethod != (attribute.KeyValue{}) {
|
||||||
|
attrs = append(attrs, originalMethod)
|
||||||
|
}
|
||||||
|
|
||||||
|
var u string
|
||||||
|
if req.URL != nil {
|
||||||
|
// Remove any username/password info that may be in the URL.
|
||||||
|
userinfo := req.URL.User
|
||||||
|
req.URL.User = nil
|
||||||
|
u = req.URL.String()
|
||||||
|
// Restore any username/password info that was removed.
|
||||||
|
req.URL.User = userinfo
|
||||||
|
}
|
||||||
|
attrs = append(attrs, semconvNew.URLFull(u))
|
||||||
|
|
||||||
|
attrs = append(attrs, semconvNew.ServerAddress(requestHost))
|
||||||
|
if eligiblePort > 0 {
|
||||||
|
attrs = append(attrs, semconvNew.ServerPort(eligiblePort))
|
||||||
|
}
|
||||||
|
|
||||||
|
if protoName != "" && protoName != "http" {
|
||||||
|
attrs = append(attrs, semconvNew.NetworkProtocolName(protoName))
|
||||||
|
}
|
||||||
|
if protoVersion != "" {
|
||||||
|
attrs = append(attrs, semconvNew.NetworkProtocolVersion(protoVersion))
|
||||||
|
}
|
||||||
|
|
||||||
|
return attrs
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResponseTraceAttrs returns trace attributes for an HTTP response made by a client.
|
||||||
|
func (n newHTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue {
|
||||||
|
/*
|
||||||
|
below attributes are returned:
|
||||||
|
- http.response.status_code
|
||||||
|
- error.type
|
||||||
|
*/
|
||||||
|
var count int
|
||||||
|
if resp.StatusCode > 0 {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
|
if isErrorStatusCode(resp.StatusCode) {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
|
attrs := make([]attribute.KeyValue, 0, count)
|
||||||
|
if resp.StatusCode > 0 {
|
||||||
|
attrs = append(attrs, semconvNew.HTTPResponseStatusCode(resp.StatusCode))
|
||||||
|
}
|
||||||
|
|
||||||
|
if isErrorStatusCode(resp.StatusCode) {
|
||||||
|
errorType := strconv.Itoa(resp.StatusCode)
|
||||||
|
attrs = append(attrs, semconvNew.ErrorTypeKey.String(errorType))
|
||||||
|
}
|
||||||
|
return attrs
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n newHTTPClient) ErrorType(err error) attribute.KeyValue {
|
||||||
|
t := reflect.TypeOf(err)
|
||||||
|
var value string
|
||||||
|
if t.PkgPath() == "" && t.Name() == "" {
|
||||||
|
// Likely a builtin type.
|
||||||
|
value = t.String()
|
||||||
|
} else {
|
||||||
|
value = fmt.Sprintf("%s.%s", t.PkgPath(), t.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
if value == "" {
|
||||||
|
return semconvNew.ErrorTypeOther
|
||||||
|
}
|
||||||
|
|
||||||
|
return semconvNew.ErrorTypeKey.String(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n newHTTPClient) method(method string) (attribute.KeyValue, attribute.KeyValue) {
|
||||||
|
if method == "" {
|
||||||
|
return semconvNew.HTTPRequestMethodGet, attribute.KeyValue{}
|
||||||
|
}
|
||||||
|
if attr, ok := methodLookup[method]; ok {
|
||||||
|
return attr, attribute.KeyValue{}
|
||||||
|
}
|
||||||
|
|
||||||
|
orig := semconvNew.HTTPRequestMethodOriginal(method)
|
||||||
|
if attr, ok := methodLookup[strings.ToUpper(method)]; ok {
|
||||||
|
return attr, orig
|
||||||
|
}
|
||||||
|
return semconvNew.HTTPRequestMethodGet, orig
|
||||||
|
}
|
||||||
|
|
||||||
|
func isErrorStatusCode(code int) bool {
|
||||||
|
return code >= 400 || code < 100
|
||||||
|
}
|
@ -9,8 +9,9 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
semconvNew "go.opentelemetry.io/otel/semconv/v1.24.0"
|
semconvNew "go.opentelemetry.io/otel/semconv/v1.26.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
// splitHostPort splits a network address hostport of the form "host",
|
// splitHostPort splits a network address hostport of the form "host",
|
||||||
@ -49,7 +50,7 @@ func splitHostPort(hostport string) (host string, port int) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return host, int(p)
|
return host, int(p) // nolint: gosec // Byte size checked 16 above.
|
||||||
}
|
}
|
||||||
|
|
||||||
func requiredHTTPPort(https bool, port int) int { // nolint:revive
|
func requiredHTTPPort(https bool, port int) int { // nolint:revive
|
||||||
@ -89,3 +90,9 @@ var methodLookup = map[string]attribute.KeyValue{
|
|||||||
http.MethodPut: semconvNew.HTTPRequestMethodPut,
|
http.MethodPut: semconvNew.HTTPRequestMethodPut,
|
||||||
http.MethodTrace: semconvNew.HTTPRequestMethodTrace,
|
http.MethodTrace: semconvNew.HTTPRequestMethodTrace,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleErr(err error) {
|
||||||
|
if err != nil {
|
||||||
|
otel.Handle(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -7,9 +7,13 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"slices"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil"
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
|
"go.opentelemetry.io/otel/metric"
|
||||||
|
"go.opentelemetry.io/otel/metric/noop"
|
||||||
semconv "go.opentelemetry.io/otel/semconv/v1.20.0"
|
semconv "go.opentelemetry.io/otel/semconv/v1.20.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -72,3 +76,117 @@ func (o oldHTTPServer) Route(route string) attribute.KeyValue {
|
|||||||
func HTTPStatusCode(status int) attribute.KeyValue {
|
func HTTPStatusCode(status int) attribute.KeyValue {
|
||||||
return semconv.HTTPStatusCode(status)
|
return semconv.HTTPStatusCode(status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Server HTTP metrics.
|
||||||
|
const (
|
||||||
|
serverRequestSize = "http.server.request.size" // Incoming request bytes total
|
||||||
|
serverResponseSize = "http.server.response.size" // Incoming response bytes total
|
||||||
|
serverDuration = "http.server.duration" // Incoming end to end duration, milliseconds
|
||||||
|
)
|
||||||
|
|
||||||
|
func (h oldHTTPServer) createMeasures(meter metric.Meter) (metric.Int64Counter, metric.Int64Counter, metric.Float64Histogram) {
|
||||||
|
if meter == nil {
|
||||||
|
return noop.Int64Counter{}, noop.Int64Counter{}, noop.Float64Histogram{}
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
requestBytesCounter, err := meter.Int64Counter(
|
||||||
|
serverRequestSize,
|
||||||
|
metric.WithUnit("By"),
|
||||||
|
metric.WithDescription("Measures the size of HTTP request messages."),
|
||||||
|
)
|
||||||
|
handleErr(err)
|
||||||
|
|
||||||
|
responseBytesCounter, err := meter.Int64Counter(
|
||||||
|
serverResponseSize,
|
||||||
|
metric.WithUnit("By"),
|
||||||
|
metric.WithDescription("Measures the size of HTTP response messages."),
|
||||||
|
)
|
||||||
|
handleErr(err)
|
||||||
|
|
||||||
|
serverLatencyMeasure, err := meter.Float64Histogram(
|
||||||
|
serverDuration,
|
||||||
|
metric.WithUnit("ms"),
|
||||||
|
metric.WithDescription("Measures the duration of inbound HTTP requests."),
|
||||||
|
)
|
||||||
|
handleErr(err)
|
||||||
|
|
||||||
|
return requestBytesCounter, responseBytesCounter, serverLatencyMeasure
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o oldHTTPServer) MetricAttributes(server string, req *http.Request, statusCode int, additionalAttributes []attribute.KeyValue) []attribute.KeyValue {
|
||||||
|
n := len(additionalAttributes) + 3
|
||||||
|
var host string
|
||||||
|
var p int
|
||||||
|
if server == "" {
|
||||||
|
host, p = splitHostPort(req.Host)
|
||||||
|
} else {
|
||||||
|
// Prioritize the primary server name.
|
||||||
|
host, p = splitHostPort(server)
|
||||||
|
if p < 0 {
|
||||||
|
_, p = splitHostPort(req.Host)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hostPort := requiredHTTPPort(req.TLS != nil, p)
|
||||||
|
if hostPort > 0 {
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
protoName, protoVersion := netProtocol(req.Proto)
|
||||||
|
if protoName != "" {
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
if protoVersion != "" {
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
|
||||||
|
if statusCode > 0 {
|
||||||
|
n++
|
||||||
|
}
|
||||||
|
|
||||||
|
attributes := slices.Grow(additionalAttributes, n)
|
||||||
|
attributes = append(attributes,
|
||||||
|
o.methodMetric(req.Method),
|
||||||
|
o.scheme(req.TLS != nil),
|
||||||
|
semconv.NetHostName(host))
|
||||||
|
|
||||||
|
if hostPort > 0 {
|
||||||
|
attributes = append(attributes, semconv.NetHostPort(hostPort))
|
||||||
|
}
|
||||||
|
if protoName != "" {
|
||||||
|
attributes = append(attributes, semconv.NetProtocolName(protoName))
|
||||||
|
}
|
||||||
|
if protoVersion != "" {
|
||||||
|
attributes = append(attributes, semconv.NetProtocolVersion(protoVersion))
|
||||||
|
}
|
||||||
|
|
||||||
|
if statusCode > 0 {
|
||||||
|
attributes = append(attributes, semconv.HTTPStatusCode(statusCode))
|
||||||
|
}
|
||||||
|
return attributes
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o oldHTTPServer) methodMetric(method string) attribute.KeyValue {
|
||||||
|
method = strings.ToUpper(method)
|
||||||
|
switch method {
|
||||||
|
case http.MethodConnect, http.MethodDelete, http.MethodGet, http.MethodHead, http.MethodOptions, http.MethodPatch, http.MethodPost, http.MethodPut, http.MethodTrace:
|
||||||
|
default:
|
||||||
|
method = "_OTHER"
|
||||||
|
}
|
||||||
|
return semconv.HTTPMethod(method)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o oldHTTPServer) scheme(https bool) attribute.KeyValue { // nolint:revive
|
||||||
|
if https {
|
||||||
|
return semconv.HTTPSchemeHTTPS
|
||||||
|
}
|
||||||
|
return semconv.HTTPSchemeHTTP
|
||||||
|
}
|
||||||
|
|
||||||
|
type oldHTTPClient struct{}
|
||||||
|
|
||||||
|
func (o oldHTTPClient) RequestTraceAttrs(req *http.Request) []attribute.KeyValue {
|
||||||
|
return semconvutil.HTTPClientRequest(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o oldHTTPClient) ResponseTraceAttrs(resp *http.Response) []attribute.KeyValue {
|
||||||
|
return semconvutil.HTTPClientResponse(resp)
|
||||||
|
}
|
||||||
|
@ -195,7 +195,7 @@ func splitHostPort(hostport string) (host string, port int) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return host, int(p)
|
return host, int(p) // nolint: gosec // Bitsize checked to be 16 above.
|
||||||
}
|
}
|
||||||
|
|
||||||
func netProtocol(proto string) (name string, version string) {
|
func netProtocol(proto string) (name string, version string) {
|
||||||
|
64
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go
generated
vendored
64
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go
generated
vendored
@ -11,13 +11,15 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request"
|
||||||
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv"
|
||||||
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil"
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil"
|
||||||
"go.opentelemetry.io/otel"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"go.opentelemetry.io/otel/propagation"
|
"go.opentelemetry.io/otel/propagation"
|
||||||
semconv "go.opentelemetry.io/otel/semconv/v1.20.0"
|
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -26,14 +28,16 @@ import (
|
|||||||
type Transport struct {
|
type Transport struct {
|
||||||
rt http.RoundTripper
|
rt http.RoundTripper
|
||||||
|
|
||||||
tracer trace.Tracer
|
tracer trace.Tracer
|
||||||
meter metric.Meter
|
meter metric.Meter
|
||||||
propagators propagation.TextMapPropagator
|
propagators propagation.TextMapPropagator
|
||||||
spanStartOptions []trace.SpanStartOption
|
spanStartOptions []trace.SpanStartOption
|
||||||
filters []Filter
|
filters []Filter
|
||||||
spanNameFormatter func(string, *http.Request) string
|
spanNameFormatter func(string, *http.Request) string
|
||||||
clientTrace func(context.Context) *httptrace.ClientTrace
|
clientTrace func(context.Context) *httptrace.ClientTrace
|
||||||
|
metricAttributesFn func(*http.Request) []attribute.KeyValue
|
||||||
|
|
||||||
|
semconv semconv.HTTPClient
|
||||||
requestBytesCounter metric.Int64Counter
|
requestBytesCounter metric.Int64Counter
|
||||||
responseBytesCounter metric.Int64Counter
|
responseBytesCounter metric.Int64Counter
|
||||||
latencyMeasure metric.Float64Histogram
|
latencyMeasure metric.Float64Histogram
|
||||||
@ -53,7 +57,8 @@ func NewTransport(base http.RoundTripper, opts ...Option) *Transport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t := Transport{
|
t := Transport{
|
||||||
rt: base,
|
rt: base,
|
||||||
|
semconv: semconv.NewHTTPClient(),
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultOpts := []Option{
|
defaultOpts := []Option{
|
||||||
@ -76,6 +81,7 @@ func (t *Transport) applyConfig(c *config) {
|
|||||||
t.filters = c.Filters
|
t.filters = c.Filters
|
||||||
t.spanNameFormatter = c.SpanNameFormatter
|
t.spanNameFormatter = c.SpanNameFormatter
|
||||||
t.clientTrace = c.ClientTrace
|
t.clientTrace = c.ClientTrace
|
||||||
|
t.metricAttributesFn = c.MetricAttributesFn
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) createMeasures() {
|
func (t *Transport) createMeasures() {
|
||||||
@ -143,45 +149,49 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) {
|
|||||||
|
|
||||||
r = r.Clone(ctx) // According to RoundTripper spec, we shouldn't modify the origin request.
|
r = r.Clone(ctx) // According to RoundTripper spec, we shouldn't modify the origin request.
|
||||||
|
|
||||||
// use a body wrapper to determine the request size
|
|
||||||
var bw bodyWrapper
|
|
||||||
// if request body is nil or NoBody, we don't want to mutate the body as it
|
// if request body is nil or NoBody, we don't want to mutate the body as it
|
||||||
// will affect the identity of it in an unforeseeable way because we assert
|
// will affect the identity of it in an unforeseeable way because we assert
|
||||||
// ReadCloser fulfills a certain interface and it is indeed nil or NoBody.
|
// ReadCloser fulfills a certain interface and it is indeed nil or NoBody.
|
||||||
|
bw := request.NewBodyWrapper(r.Body, func(int64) {})
|
||||||
if r.Body != nil && r.Body != http.NoBody {
|
if r.Body != nil && r.Body != http.NoBody {
|
||||||
bw.ReadCloser = r.Body
|
r.Body = bw
|
||||||
// noop to prevent nil panic. not using this record fun yet.
|
|
||||||
bw.record = func(int64) {}
|
|
||||||
r.Body = &bw
|
|
||||||
}
|
}
|
||||||
|
|
||||||
span.SetAttributes(semconvutil.HTTPClientRequest(r)...)
|
span.SetAttributes(t.semconv.RequestTraceAttrs(r)...)
|
||||||
t.propagators.Inject(ctx, propagation.HeaderCarrier(r.Header))
|
t.propagators.Inject(ctx, propagation.HeaderCarrier(r.Header))
|
||||||
|
|
||||||
res, err := t.rt.RoundTrip(r)
|
res, err := t.rt.RoundTrip(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.RecordError(err)
|
// set error type attribute if the error is part of the predefined
|
||||||
|
// error types.
|
||||||
|
// otherwise, record it as an exception
|
||||||
|
if errType := t.semconv.ErrorType(err); errType.Valid() {
|
||||||
|
span.SetAttributes(errType)
|
||||||
|
} else {
|
||||||
|
span.RecordError(err)
|
||||||
|
}
|
||||||
|
|
||||||
span.SetStatus(codes.Error, err.Error())
|
span.SetStatus(codes.Error, err.Error())
|
||||||
span.End()
|
span.End()
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// metrics
|
// metrics
|
||||||
metricAttrs := append(labeler.Get(), semconvutil.HTTPClientRequestMetrics(r)...)
|
metricAttrs := append(append(labeler.Get(), semconvutil.HTTPClientRequestMetrics(r)...), t.metricAttributesFromRequest(r)...)
|
||||||
if res.StatusCode > 0 {
|
if res.StatusCode > 0 {
|
||||||
metricAttrs = append(metricAttrs, semconv.HTTPStatusCode(res.StatusCode))
|
metricAttrs = append(metricAttrs, semconv.HTTPStatusCode(res.StatusCode))
|
||||||
}
|
}
|
||||||
o := metric.WithAttributeSet(attribute.NewSet(metricAttrs...))
|
o := metric.WithAttributeSet(attribute.NewSet(metricAttrs...))
|
||||||
addOpts := []metric.AddOption{o} // Allocate vararg slice once.
|
|
||||||
t.requestBytesCounter.Add(ctx, bw.read.Load(), addOpts...)
|
t.requestBytesCounter.Add(ctx, bw.BytesRead(), o)
|
||||||
// For handling response bytes we leverage a callback when the client reads the http response
|
// For handling response bytes we leverage a callback when the client reads the http response
|
||||||
readRecordFunc := func(n int64) {
|
readRecordFunc := func(n int64) {
|
||||||
t.responseBytesCounter.Add(ctx, n, addOpts...)
|
t.responseBytesCounter.Add(ctx, n, o)
|
||||||
}
|
}
|
||||||
|
|
||||||
// traces
|
// traces
|
||||||
span.SetAttributes(semconvutil.HTTPClientResponse(res)...)
|
span.SetAttributes(t.semconv.ResponseTraceAttrs(res)...)
|
||||||
span.SetStatus(semconvutil.HTTPClientStatus(res.StatusCode))
|
span.SetStatus(t.semconv.Status(res.StatusCode))
|
||||||
|
|
||||||
res.Body = newWrappedBody(span, readRecordFunc, res.Body)
|
res.Body = newWrappedBody(span, readRecordFunc, res.Body)
|
||||||
|
|
||||||
@ -193,6 +203,14 @@ func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) {
|
|||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Transport) metricAttributesFromRequest(r *http.Request) []attribute.KeyValue {
|
||||||
|
var attributeForRequest []attribute.KeyValue
|
||||||
|
if t.metricAttributesFn != nil {
|
||||||
|
attributeForRequest = t.metricAttributesFn(r)
|
||||||
|
}
|
||||||
|
return attributeForRequest
|
||||||
|
}
|
||||||
|
|
||||||
// newWrappedBody returns a new and appropriately scoped *wrappedBody as an
|
// newWrappedBody returns a new and appropriately scoped *wrappedBody as an
|
||||||
// io.ReadCloser. If the passed body implements io.Writer, the returned value
|
// io.ReadCloser. If the passed body implements io.Writer, the returned value
|
||||||
// will implement io.ReadWriteCloser.
|
// will implement io.ReadWriteCloser.
|
||||||
|
2
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go
generated
vendored
2
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go
generated
vendored
@ -5,7 +5,7 @@ package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http
|
|||||||
|
|
||||||
// Version is the current release version of the otelhttp instrumentation.
|
// Version is the current release version of the otelhttp instrumentation.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "0.53.0"
|
return "0.54.0"
|
||||||
// This string is updated by the pre_release.sh script during release
|
// This string is updated by the pre_release.sh script during release
|
||||||
}
|
}
|
||||||
|
|
||||||
|
99
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go
generated
vendored
99
vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go
generated
vendored
@ -1,99 +0,0 @@
|
|||||||
// Copyright The OpenTelemetry Authors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"sync/atomic"
|
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/propagation"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ io.ReadCloser = &bodyWrapper{}
|
|
||||||
|
|
||||||
// bodyWrapper wraps a http.Request.Body (an io.ReadCloser) to track the number
|
|
||||||
// of bytes read and the last error.
|
|
||||||
type bodyWrapper struct {
|
|
||||||
io.ReadCloser
|
|
||||||
record func(n int64) // must not be nil
|
|
||||||
|
|
||||||
read atomic.Int64
|
|
||||||
err error
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *bodyWrapper) Read(b []byte) (int, error) {
|
|
||||||
n, err := w.ReadCloser.Read(b)
|
|
||||||
n1 := int64(n)
|
|
||||||
w.read.Add(n1)
|
|
||||||
w.err = err
|
|
||||||
w.record(n1)
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *bodyWrapper) Close() error {
|
|
||||||
return w.ReadCloser.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ http.ResponseWriter = &respWriterWrapper{}
|
|
||||||
|
|
||||||
// respWriterWrapper wraps a http.ResponseWriter in order to track the number of
|
|
||||||
// bytes written, the last error, and to catch the first written statusCode.
|
|
||||||
// TODO: The wrapped http.ResponseWriter doesn't implement any of the optional
|
|
||||||
// types (http.Hijacker, http.Pusher, http.CloseNotifier, http.Flusher, etc)
|
|
||||||
// that may be useful when using it in real life situations.
|
|
||||||
type respWriterWrapper struct {
|
|
||||||
http.ResponseWriter
|
|
||||||
record func(n int64) // must not be nil
|
|
||||||
|
|
||||||
// used to inject the header
|
|
||||||
ctx context.Context
|
|
||||||
|
|
||||||
props propagation.TextMapPropagator
|
|
||||||
|
|
||||||
written int64
|
|
||||||
statusCode int
|
|
||||||
err error
|
|
||||||
wroteHeader bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *respWriterWrapper) Header() http.Header {
|
|
||||||
return w.ResponseWriter.Header()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *respWriterWrapper) Write(p []byte) (int, error) {
|
|
||||||
if !w.wroteHeader {
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
}
|
|
||||||
n, err := w.ResponseWriter.Write(p)
|
|
||||||
n1 := int64(n)
|
|
||||||
w.record(n1)
|
|
||||||
w.written += n1
|
|
||||||
w.err = err
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// WriteHeader persists initial statusCode for span attribution.
|
|
||||||
// All calls to WriteHeader will be propagated to the underlying ResponseWriter
|
|
||||||
// and will persist the statusCode from the first call.
|
|
||||||
// Blocking consecutive calls to WriteHeader alters expected behavior and will
|
|
||||||
// remove warning logs from net/http where developers will notice incorrect handler implementations.
|
|
||||||
func (w *respWriterWrapper) WriteHeader(statusCode int) {
|
|
||||||
if !w.wroteHeader {
|
|
||||||
w.wroteHeader = true
|
|
||||||
w.statusCode = statusCode
|
|
||||||
}
|
|
||||||
w.ResponseWriter.WriteHeader(statusCode)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *respWriterWrapper) Flush() {
|
|
||||||
if !w.wroteHeader {
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
}
|
|
||||||
|
|
||||||
if f, ok := w.ResponseWriter.(http.Flusher); ok {
|
|
||||||
f.Flush()
|
|
||||||
}
|
|
||||||
}
|
|
2
vendor/go.opentelemetry.io/otel/.golangci.yml
generated
vendored
2
vendor/go.opentelemetry.io/otel/.golangci.yml
generated
vendored
@ -9,6 +9,8 @@ linters:
|
|||||||
disable-all: true
|
disable-all: true
|
||||||
# Specifically enable linters we want to use.
|
# Specifically enable linters we want to use.
|
||||||
enable:
|
enable:
|
||||||
|
- asasalint
|
||||||
|
- bodyclose
|
||||||
- depguard
|
- depguard
|
||||||
- errcheck
|
- errcheck
|
||||||
- errorlint
|
- errorlint
|
||||||
|
67
vendor/go.opentelemetry.io/otel/CHANGELOG.md
generated
vendored
67
vendor/go.opentelemetry.io/otel/CHANGELOG.md
generated
vendored
@ -8,6 +8,64 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
<!-- Released section -->
|
||||||
|
<!-- Don't change this section unless doing release -->
|
||||||
|
|
||||||
|
## [1.29.0/0.51.0/0.5.0] 2024-08-23
|
||||||
|
|
||||||
|
This release is the last to support [Go 1.21].
|
||||||
|
The next release will require at least [Go 1.22].
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Add MacOS ARM64 platform to the compatibility testing suite. (#5577)
|
||||||
|
- Add `InstrumentationScope` field to `SpanStub` in `go.opentelemetry.io/otel/sdk/trace/tracetest`, as a replacement for the deprecated `InstrumentationLibrary`. (#5627)
|
||||||
|
- Make the initial release of `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`.
|
||||||
|
This new module contains an OTLP exporter that transmits log telemetry using gRPC.
|
||||||
|
This module is unstable and breaking changes may be introduced.
|
||||||
|
See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5629)
|
||||||
|
- Add `Walk` function to `TraceState` in `go.opentelemetry.io/otel/trace` to iterate all the key-value pairs. (#5651)
|
||||||
|
- Bridge the trace state in `go.opentelemetry.io/otel/bridge/opencensus`. (#5651)
|
||||||
|
- Zero value of `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` no longer panics. (#5665)
|
||||||
|
- The `FilterProcessor` interface type is added in `go.opentelemetry.io/otel/sdk/log/internal/x`.
|
||||||
|
This is an optional and experimental interface that log `Processor`s can implement to instruct the `Logger` if a `Record` will be processed or not.
|
||||||
|
It replaces the existing `Enabled` method that is removed from the `Processor` interface itself.
|
||||||
|
It does not fall within the scope of the OpenTelemetry Go versioning and stability [policy](./VERSIONING.md) and it may be changed in backwards incompatible ways or removed in feature releases. (#5692)
|
||||||
|
- Support [Go 1.23]. (#5720)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- `NewMemberRaw`, `NewKeyProperty` and `NewKeyValuePropertyRaw` in `go.opentelemetry.io/otel/baggage` allow UTF-8 string in key. (#5132)
|
||||||
|
- `Processor.OnEmit` in `go.opentelemetry.io/otel/sdk/log` now accepts a pointer to `Record` instead of a value so that the record modifications done in a processor are propagated to subsequent registered processors. (#5636)
|
||||||
|
- `SimpleProcessor.Enabled` in `go.opentelemetry.io/otel/sdk/log` now returns `false` if the exporter is `nil`. (#5665)
|
||||||
|
- Update the concurrency requirements of `Exporter` in `go.opentelemetry.io/otel/sdk/log`. (#5666)
|
||||||
|
- `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` synchronizes `OnEmit` calls. (#5666)
|
||||||
|
- The `Processor` interface in `go.opentelemetry.io/otel/sdk/log` no longer includes the `Enabled` method.
|
||||||
|
See the `FilterProcessor` interface type added in `go.opentelemetry.io/otel/sdk/log/internal/x` to continue providing this functionality. (#5692)
|
||||||
|
- The `SimpleProcessor` type in `go.opentelemetry.io/otel/sdk/log` is no longer comparable. (#5693)
|
||||||
|
- The `BatchProcessor` type in `go.opentelemetry.io/otel/sdk/log` is no longer comparable. (#5693)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5584)
|
||||||
|
- Pass the underlying error rather than a generic retry-able failure in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`, `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5541)
|
||||||
|
- Correct the `Tracer`, `Meter`, and `Logger` names used in `go.opentelemetry.io/otel/example/dice`. (#5612)
|
||||||
|
- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/namedtracer`. (#5612)
|
||||||
|
- Correct the `Tracer` name used in `go.opentelemetry.io/otel/example/opencensus`. (#5612)
|
||||||
|
- Correct the `Tracer` and `Meter` names used in `go.opentelemetry.io/otel/example/otel-collector`. (#5612)
|
||||||
|
- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/passthrough`. (#5612)
|
||||||
|
- Correct the `Meter` name used in `go.opentelemetry.io/otel/example/prometheus`. (#5612)
|
||||||
|
- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/zipkin`. (#5612)
|
||||||
|
- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5641)
|
||||||
|
- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5650)
|
||||||
|
- Stop percent encoding header environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` (#5705)
|
||||||
|
- Remove invalid environment variable header keys in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` (#5705)
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- The `Enabled` method of the `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` is removed. (#5692)
|
||||||
|
- The `Enabled` method of the `BatchProcessor` in `go.opentelemetry.io/otel/sdk/log` is removed. (#5692)
|
||||||
|
|
||||||
## [1.28.0/0.50.0/0.4.0] 2024-07-02
|
## [1.28.0/0.50.0/0.4.0] 2024-07-02
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
@ -49,6 +107,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
- Fix stale timestamps reported by the last-value aggregation. (#5517)
|
- Fix stale timestamps reported by the last-value aggregation. (#5517)
|
||||||
- Indicate the `Exporter` in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` must be created by the `New` method. (#5521)
|
- Indicate the `Exporter` in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` must be created by the `New` method. (#5521)
|
||||||
- Improved performance in all `{Bool,Int64,Float64,String}SliceValue` functions of `go.opentelemetry.io/attributes` by reducing the number of allocations. (#5549)
|
- Improved performance in all `{Bool,Int64,Float64,String}SliceValue` functions of `go.opentelemetry.io/attributes` by reducing the number of allocations. (#5549)
|
||||||
|
- Replace invalid percent-encoded octet sequences with replacement char in `go.opentelemetry.io/otel/baggage`. (#5528)
|
||||||
|
|
||||||
## [1.27.0/0.49.0/0.3.0] 2024-05-21
|
## [1.27.0/0.49.0/0.3.0] 2024-05-21
|
||||||
|
|
||||||
@ -175,7 +234,7 @@ The next release will require at least [Go 1.21].
|
|||||||
This module includes OpenTelemetry Go's implementation of the Logs Bridge API.
|
This module includes OpenTelemetry Go's implementation of the Logs Bridge API.
|
||||||
This module is in an alpha state, it is subject to breaking changes.
|
This module is in an alpha state, it is subject to breaking changes.
|
||||||
See our [versioning policy](./VERSIONING.md) for more info. (#4961)
|
See our [versioning policy](./VERSIONING.md) for more info. (#4961)
|
||||||
- ARM64 platform to the compatibility testing suite. (#4994)
|
- Add ARM64 platform to the compatibility testing suite. (#4994)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
@ -3003,7 +3062,8 @@ It contains api and sdk for trace and meter.
|
|||||||
- CircleCI build CI manifest files.
|
- CircleCI build CI manifest files.
|
||||||
- CODEOWNERS file to track owners of this project.
|
- CODEOWNERS file to track owners of this project.
|
||||||
|
|
||||||
[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...HEAD
|
[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.29.0...HEAD
|
||||||
|
[1.29.0/0.51.0/0.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.29.0
|
||||||
[1.28.0/0.50.0/0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.28.0
|
[1.28.0/0.50.0/0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.28.0
|
||||||
[1.27.0/0.49.0/0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.27.0
|
[1.27.0/0.49.0/0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.27.0
|
||||||
[1.26.0/0.48.0/0.2.0-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.26.0
|
[1.26.0/0.48.0/0.2.0-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.26.0
|
||||||
@ -3086,6 +3146,9 @@ It contains api and sdk for trace and meter.
|
|||||||
[0.1.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.1
|
[0.1.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.1
|
||||||
[0.1.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.0
|
[0.1.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.0
|
||||||
|
|
||||||
|
<!-- Released section ended -->
|
||||||
|
|
||||||
|
[Go 1.23]: https://go.dev/doc/go1.23
|
||||||
[Go 1.22]: https://go.dev/doc/go1.22
|
[Go 1.22]: https://go.dev/doc/go1.22
|
||||||
[Go 1.21]: https://go.dev/doc/go1.21
|
[Go 1.21]: https://go.dev/doc/go1.21
|
||||||
[Go 1.20]: https://go.dev/doc/go1.20
|
[Go 1.20]: https://go.dev/doc/go1.20
|
||||||
|
2
vendor/go.opentelemetry.io/otel/CODEOWNERS
generated
vendored
2
vendor/go.opentelemetry.io/otel/CODEOWNERS
generated
vendored
@ -5,7 +5,7 @@
|
|||||||
#####################################################
|
#####################################################
|
||||||
#
|
#
|
||||||
# Learn about membership in OpenTelemetry community:
|
# Learn about membership in OpenTelemetry community:
|
||||||
# https://github.com/open-telemetry/community/blob/main/community-membership.md
|
# https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Learn about CODEOWNERS file format:
|
# Learn about CODEOWNERS file format:
|
||||||
|
2
vendor/go.opentelemetry.io/otel/CONTRIBUTING.md
generated
vendored
2
vendor/go.opentelemetry.io/otel/CONTRIBUTING.md
generated
vendored
@ -650,7 +650,7 @@ should be canceled.
|
|||||||
### Become an Approver or a Maintainer
|
### Become an Approver or a Maintainer
|
||||||
|
|
||||||
See the [community membership document in OpenTelemetry community
|
See the [community membership document in OpenTelemetry community
|
||||||
repo](https://github.com/open-telemetry/community/blob/main/community-membership.md).
|
repo](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md).
|
||||||
|
|
||||||
[Approver]: #approvers
|
[Approver]: #approvers
|
||||||
[Maintainer]: #maintainers
|
[Maintainer]: #maintainers
|
||||||
|
13
vendor/go.opentelemetry.io/otel/Makefile
generated
vendored
13
vendor/go.opentelemetry.io/otel/Makefile
generated
vendored
@ -178,17 +178,14 @@ test-coverage: $(GOCOVMERGE)
|
|||||||
done; \
|
done; \
|
||||||
$(GOCOVMERGE) $$(find . -name coverage.out) > coverage.txt
|
$(GOCOVMERGE) $$(find . -name coverage.out) > coverage.txt
|
||||||
|
|
||||||
# Adding a directory will include all benchmarks in that directory if a filter is not specified.
|
|
||||||
BENCHMARK_TARGETS := sdk/trace
|
|
||||||
.PHONY: benchmark
|
.PHONY: benchmark
|
||||||
benchmark: $(BENCHMARK_TARGETS:%=benchmark/%)
|
benchmark: $(OTEL_GO_MOD_DIRS:%=benchmark/%)
|
||||||
BENCHMARK_FILTER = .
|
|
||||||
# You can override the filter for a particular directory by adding a rule here.
|
|
||||||
benchmark/sdk/trace: BENCHMARK_FILTER = SpanWithAttributes_8/AlwaysSample
|
|
||||||
benchmark/%:
|
benchmark/%:
|
||||||
@echo "$(GO) test -timeout $(TIMEOUT)s -run=xxxxxMatchNothingxxxxx -bench=$(BENCHMARK_FILTER) $*..." \
|
@echo "$(GO) test -run=xxxxxMatchNothingxxxxx -bench=. $*..." \
|
||||||
&& cd $* \
|
&& cd $* \
|
||||||
$(foreach filter, $(BENCHMARK_FILTER), && $(GO) test -timeout $(TIMEOUT)s -run=xxxxxMatchNothingxxxxx -bench=$(filter))
|
&& $(GO) list ./... \
|
||||||
|
| grep -v third_party \
|
||||||
|
| xargs $(GO) test -run=xxxxxMatchNothingxxxxx -bench=.
|
||||||
|
|
||||||
.PHONY: golangci-lint golangci-lint-fix
|
.PHONY: golangci-lint golangci-lint-fix
|
||||||
golangci-lint-fix: ARGS=--fix
|
golangci-lint-fix: ARGS=--fix
|
||||||
|
37
vendor/go.opentelemetry.io/otel/README.md
generated
vendored
37
vendor/go.opentelemetry.io/otel/README.md
generated
vendored
@ -47,20 +47,29 @@ stop ensuring compatibility with these versions in the following manner:
|
|||||||
|
|
||||||
Currently, this project supports the following environments.
|
Currently, this project supports the following environments.
|
||||||
|
|
||||||
| OS | Go Version | Architecture |
|
| OS | Go Version | Architecture |
|
||||||
|---------|------------|--------------|
|
|----------|------------|--------------|
|
||||||
| Ubuntu | 1.22 | amd64 |
|
| Ubuntu | 1.23 | amd64 |
|
||||||
| Ubuntu | 1.21 | amd64 |
|
| Ubuntu | 1.22 | amd64 |
|
||||||
| Ubuntu | 1.22 | 386 |
|
| Ubuntu | 1.21 | amd64 |
|
||||||
| Ubuntu | 1.21 | 386 |
|
| Ubuntu | 1.23 | 386 |
|
||||||
| Linux | 1.22 | arm64 |
|
| Ubuntu | 1.22 | 386 |
|
||||||
| Linux | 1.21 | arm64 |
|
| Ubuntu | 1.21 | 386 |
|
||||||
| MacOS | 1.22 | amd64 |
|
| Linux | 1.23 | arm64 |
|
||||||
| MacOS | 1.21 | amd64 |
|
| Linux | 1.22 | arm64 |
|
||||||
| Windows | 1.22 | amd64 |
|
| Linux | 1.21 | arm64 |
|
||||||
| Windows | 1.21 | amd64 |
|
| macOS 13 | 1.23 | amd64 |
|
||||||
| Windows | 1.22 | 386 |
|
| macOS 13 | 1.22 | amd64 |
|
||||||
| Windows | 1.21 | 386 |
|
| macOS 13 | 1.21 | amd64 |
|
||||||
|
| macOS | 1.23 | arm64 |
|
||||||
|
| macOS | 1.22 | arm64 |
|
||||||
|
| macOS | 1.21 | arm64 |
|
||||||
|
| Windows | 1.23 | amd64 |
|
||||||
|
| Windows | 1.22 | amd64 |
|
||||||
|
| Windows | 1.21 | amd64 |
|
||||||
|
| Windows | 1.23 | 386 |
|
||||||
|
| Windows | 1.22 | 386 |
|
||||||
|
| Windows | 1.21 | 386 |
|
||||||
|
|
||||||
While this project should work for other systems, no compatibility guarantees
|
While this project should work for other systems, no compatibility guarantees
|
||||||
are made for those systems currently.
|
are made for those systems currently.
|
||||||
|
1
vendor/go.opentelemetry.io/otel/RELEASING.md
generated
vendored
1
vendor/go.opentelemetry.io/otel/RELEASING.md
generated
vendored
@ -69,6 +69,7 @@ Update go.mod for submodules to depend on the new release which will happen in t
|
|||||||
```
|
```
|
||||||
|
|
||||||
- Move all the `Unreleased` changes into a new section following the title scheme (`[<new tag>] - <date of release>`).
|
- Move all the `Unreleased` changes into a new section following the title scheme (`[<new tag>] - <date of release>`).
|
||||||
|
- Make sure the new section is under the comment for released section, like `<!-- Released section -->`, so it is protected from being overwritten in the future.
|
||||||
- Update all the appropriate links at the bottom.
|
- Update all the appropriate links at the bottom.
|
||||||
|
|
||||||
4. Push the changes to upstream and create a Pull Request on GitHub.
|
4. Push the changes to upstream and create a Pull Request on GitHub.
|
||||||
|
150
vendor/go.opentelemetry.io/otel/baggage/baggage.go
generated
vendored
150
vendor/go.opentelemetry.io/otel/baggage/baggage.go
generated
vendored
@ -44,9 +44,15 @@ type Property struct {
|
|||||||
|
|
||||||
// NewKeyProperty returns a new Property for key.
|
// NewKeyProperty returns a new Property for key.
|
||||||
//
|
//
|
||||||
|
// The passed key must be valid, non-empty UTF-8 string.
|
||||||
// If key is invalid, an error will be returned.
|
// If key is invalid, an error will be returned.
|
||||||
|
// However, the specific Propagators that are used to transmit baggage entries across
|
||||||
|
// component boundaries may impose their own restrictions on Property key.
|
||||||
|
// For example, the W3C Baggage specification restricts the Property keys to strings that
|
||||||
|
// satisfy the token definition from RFC7230, Section 3.2.6.
|
||||||
|
// For maximum compatibility, alpha-numeric value are strongly recommended to be used as Property key.
|
||||||
func NewKeyProperty(key string) (Property, error) {
|
func NewKeyProperty(key string) (Property, error) {
|
||||||
if !validateKey(key) {
|
if !validateBaggageName(key) {
|
||||||
return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key)
|
return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,6 +68,10 @@ func NewKeyProperty(key string) (Property, error) {
|
|||||||
// Notice: Consider using [NewKeyValuePropertyRaw] instead
|
// Notice: Consider using [NewKeyValuePropertyRaw] instead
|
||||||
// that does not require percent-encoding of the value.
|
// that does not require percent-encoding of the value.
|
||||||
func NewKeyValueProperty(key, value string) (Property, error) {
|
func NewKeyValueProperty(key, value string) (Property, error) {
|
||||||
|
if !validateKey(key) {
|
||||||
|
return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key)
|
||||||
|
}
|
||||||
|
|
||||||
if !validateValue(value) {
|
if !validateValue(value) {
|
||||||
return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidValue, value)
|
return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidValue, value)
|
||||||
}
|
}
|
||||||
@ -74,11 +84,20 @@ func NewKeyValueProperty(key, value string) (Property, error) {
|
|||||||
|
|
||||||
// NewKeyValuePropertyRaw returns a new Property for key with value.
|
// NewKeyValuePropertyRaw returns a new Property for key with value.
|
||||||
//
|
//
|
||||||
// The passed key must be compliant with W3C Baggage specification.
|
// The passed key must be valid, non-empty UTF-8 string.
|
||||||
|
// The passed value must be valid UTF-8 string.
|
||||||
|
// However, the specific Propagators that are used to transmit baggage entries across
|
||||||
|
// component boundaries may impose their own restrictions on Property key.
|
||||||
|
// For example, the W3C Baggage specification restricts the Property keys to strings that
|
||||||
|
// satisfy the token definition from RFC7230, Section 3.2.6.
|
||||||
|
// For maximum compatibility, alpha-numeric value are strongly recommended to be used as Property key.
|
||||||
func NewKeyValuePropertyRaw(key, value string) (Property, error) {
|
func NewKeyValuePropertyRaw(key, value string) (Property, error) {
|
||||||
if !validateKey(key) {
|
if !validateBaggageName(key) {
|
||||||
return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key)
|
return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key)
|
||||||
}
|
}
|
||||||
|
if !validateBaggageValue(value) {
|
||||||
|
return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidValue, value)
|
||||||
|
}
|
||||||
|
|
||||||
p := Property{
|
p := Property{
|
||||||
key: key,
|
key: key,
|
||||||
@ -115,12 +134,15 @@ func (p Property) validate() error {
|
|||||||
return fmt.Errorf("invalid property: %w", err)
|
return fmt.Errorf("invalid property: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !validateKey(p.key) {
|
if !validateBaggageName(p.key) {
|
||||||
return errFunc(fmt.Errorf("%w: %q", errInvalidKey, p.key))
|
return errFunc(fmt.Errorf("%w: %q", errInvalidKey, p.key))
|
||||||
}
|
}
|
||||||
if !p.hasValue && p.value != "" {
|
if !p.hasValue && p.value != "" {
|
||||||
return errFunc(errors.New("inconsistent value"))
|
return errFunc(errors.New("inconsistent value"))
|
||||||
}
|
}
|
||||||
|
if p.hasValue && !validateBaggageValue(p.value) {
|
||||||
|
return errFunc(fmt.Errorf("%w: %q", errInvalidValue, p.value))
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,7 +160,15 @@ func (p Property) Value() (string, bool) {
|
|||||||
|
|
||||||
// String encodes Property into a header string compliant with the W3C Baggage
|
// String encodes Property into a header string compliant with the W3C Baggage
|
||||||
// specification.
|
// specification.
|
||||||
|
// It would return empty string if the key is invalid with the W3C Baggage
|
||||||
|
// specification. This could happen for a UTF-8 key, as it may contain
|
||||||
|
// invalid characters.
|
||||||
func (p Property) String() string {
|
func (p Property) String() string {
|
||||||
|
// W3C Baggage specification does not allow percent-encoded keys.
|
||||||
|
if !validateKey(p.key) {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
if p.hasValue {
|
if p.hasValue {
|
||||||
return fmt.Sprintf("%s%s%v", p.key, keyValueDelimiter, valueEscape(p.value))
|
return fmt.Sprintf("%s%s%v", p.key, keyValueDelimiter, valueEscape(p.value))
|
||||||
}
|
}
|
||||||
@ -203,9 +233,14 @@ func (p properties) validate() error {
|
|||||||
// String encodes properties into a header string compliant with the W3C Baggage
|
// String encodes properties into a header string compliant with the W3C Baggage
|
||||||
// specification.
|
// specification.
|
||||||
func (p properties) String() string {
|
func (p properties) String() string {
|
||||||
props := make([]string, len(p))
|
props := make([]string, 0, len(p))
|
||||||
for i, prop := range p {
|
for _, prop := range p {
|
||||||
props[i] = prop.String()
|
s := prop.String()
|
||||||
|
|
||||||
|
// Ignored empty properties.
|
||||||
|
if s != "" {
|
||||||
|
props = append(props, s)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return strings.Join(props, propertyDelimiter)
|
return strings.Join(props, propertyDelimiter)
|
||||||
}
|
}
|
||||||
@ -230,6 +265,10 @@ type Member struct {
|
|||||||
// Notice: Consider using [NewMemberRaw] instead
|
// Notice: Consider using [NewMemberRaw] instead
|
||||||
// that does not require percent-encoding of the value.
|
// that does not require percent-encoding of the value.
|
||||||
func NewMember(key, value string, props ...Property) (Member, error) {
|
func NewMember(key, value string, props ...Property) (Member, error) {
|
||||||
|
if !validateKey(key) {
|
||||||
|
return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidKey, key)
|
||||||
|
}
|
||||||
|
|
||||||
if !validateValue(value) {
|
if !validateValue(value) {
|
||||||
return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, value)
|
return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, value)
|
||||||
}
|
}
|
||||||
@ -242,7 +281,13 @@ func NewMember(key, value string, props ...Property) (Member, error) {
|
|||||||
|
|
||||||
// NewMemberRaw returns a new Member from the passed arguments.
|
// NewMemberRaw returns a new Member from the passed arguments.
|
||||||
//
|
//
|
||||||
// The passed key must be compliant with W3C Baggage specification.
|
// The passed key must be valid, non-empty UTF-8 string.
|
||||||
|
// The passed value must be valid UTF-8 string.
|
||||||
|
// However, the specific Propagators that are used to transmit baggage entries across
|
||||||
|
// component boundaries may impose their own restrictions on baggage key.
|
||||||
|
// For example, the W3C Baggage specification restricts the baggage keys to strings that
|
||||||
|
// satisfy the token definition from RFC7230, Section 3.2.6.
|
||||||
|
// For maximum compatibility, alpha-numeric value are strongly recommended to be used as baggage key.
|
||||||
func NewMemberRaw(key, value string, props ...Property) (Member, error) {
|
func NewMemberRaw(key, value string, props ...Property) (Member, error) {
|
||||||
m := Member{
|
m := Member{
|
||||||
key: key,
|
key: key,
|
||||||
@ -294,19 +339,45 @@ func parseMember(member string) (Member, error) {
|
|||||||
return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidKey, key)
|
return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidKey, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
val := strings.TrimSpace(v)
|
rawVal := strings.TrimSpace(v)
|
||||||
if !validateValue(val) {
|
if !validateValue(rawVal) {
|
||||||
return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, v)
|
return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode a percent-encoded value.
|
// Decode a percent-encoded value.
|
||||||
value, err := url.PathUnescape(val)
|
unescapeVal, err := url.PathUnescape(rawVal)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return newInvalidMember(), fmt.Errorf("%w: %w", errInvalidValue, err)
|
return newInvalidMember(), fmt.Errorf("%w: %w", errInvalidValue, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value := replaceInvalidUTF8Sequences(len(rawVal), unescapeVal)
|
||||||
return Member{key: key, value: value, properties: props, hasData: true}, nil
|
return Member{key: key, value: value, properties: props, hasData: true}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// replaceInvalidUTF8Sequences replaces invalid UTF-8 sequences with '<27>'.
|
||||||
|
func replaceInvalidUTF8Sequences(cap int, unescapeVal string) string {
|
||||||
|
if utf8.ValidString(unescapeVal) {
|
||||||
|
return unescapeVal
|
||||||
|
}
|
||||||
|
// W3C baggage spec:
|
||||||
|
// https://github.com/w3c/baggage/blob/8c215efbeebd3fa4b1aceb937a747e56444f22f3/baggage/HTTP_HEADER_FORMAT.md?plain=1#L69
|
||||||
|
|
||||||
|
var b strings.Builder
|
||||||
|
b.Grow(cap)
|
||||||
|
for i := 0; i < len(unescapeVal); {
|
||||||
|
r, size := utf8.DecodeRuneInString(unescapeVal[i:])
|
||||||
|
if r == utf8.RuneError && size == 1 {
|
||||||
|
// Invalid UTF-8 sequence found, replace it with '<27>'
|
||||||
|
_, _ = b.WriteString("<22>")
|
||||||
|
} else {
|
||||||
|
_, _ = b.WriteRune(r)
|
||||||
|
}
|
||||||
|
i += size
|
||||||
|
}
|
||||||
|
|
||||||
|
return b.String()
|
||||||
|
}
|
||||||
|
|
||||||
// validate ensures m conforms to the W3C Baggage specification.
|
// validate ensures m conforms to the W3C Baggage specification.
|
||||||
// A key must be an ASCII string, returning an error otherwise.
|
// A key must be an ASCII string, returning an error otherwise.
|
||||||
func (m Member) validate() error {
|
func (m Member) validate() error {
|
||||||
@ -314,9 +385,12 @@ func (m Member) validate() error {
|
|||||||
return fmt.Errorf("%w: %q", errInvalidMember, m)
|
return fmt.Errorf("%w: %q", errInvalidMember, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !validateKey(m.key) {
|
if !validateBaggageName(m.key) {
|
||||||
return fmt.Errorf("%w: %q", errInvalidKey, m.key)
|
return fmt.Errorf("%w: %q", errInvalidKey, m.key)
|
||||||
}
|
}
|
||||||
|
if !validateBaggageValue(m.value) {
|
||||||
|
return fmt.Errorf("%w: %q", errInvalidValue, m.value)
|
||||||
|
}
|
||||||
return m.properties.validate()
|
return m.properties.validate()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,10 +405,15 @@ func (m Member) Properties() []Property { return m.properties.Copy() }
|
|||||||
|
|
||||||
// String encodes Member into a header string compliant with the W3C Baggage
|
// String encodes Member into a header string compliant with the W3C Baggage
|
||||||
// specification.
|
// specification.
|
||||||
|
// It would return empty string if the key is invalid with the W3C Baggage
|
||||||
|
// specification. This could happen for a UTF-8 key, as it may contain
|
||||||
|
// invalid characters.
|
||||||
func (m Member) String() string {
|
func (m Member) String() string {
|
||||||
// A key is just an ASCII string. A value is restricted to be
|
// W3C Baggage specification does not allow percent-encoded keys.
|
||||||
// US-ASCII characters excluding CTLs, whitespace,
|
if !validateKey(m.key) {
|
||||||
// DQUOTE, comma, semicolon, and backslash.
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
s := m.key + keyValueDelimiter + valueEscape(m.value)
|
s := m.key + keyValueDelimiter + valueEscape(m.value)
|
||||||
if len(m.properties) > 0 {
|
if len(m.properties) > 0 {
|
||||||
s += propertyDelimiter + m.properties.String()
|
s += propertyDelimiter + m.properties.String()
|
||||||
@ -448,7 +527,7 @@ func (b Baggage) Member(key string) Member {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Members returns all the baggage list-members.
|
// Members returns all the baggage list-members.
|
||||||
// The order of the returned list-members does not have significance.
|
// The order of the returned list-members is not significant.
|
||||||
//
|
//
|
||||||
// The returned members are not validated, as we assume the validation happened
|
// The returned members are not validated, as we assume the validation happened
|
||||||
// when they were added to the Baggage.
|
// when they were added to the Baggage.
|
||||||
@ -469,8 +548,8 @@ func (b Baggage) Members() []Member {
|
|||||||
return members
|
return members
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetMember returns a copy the Baggage with the member included. If the
|
// SetMember returns a copy of the Baggage with the member included. If the
|
||||||
// baggage contains a Member with the same key the existing Member is
|
// baggage contains a Member with the same key, the existing Member is
|
||||||
// replaced.
|
// replaced.
|
||||||
//
|
//
|
||||||
// If member is invalid according to the W3C Baggage specification, an error
|
// If member is invalid according to the W3C Baggage specification, an error
|
||||||
@ -528,14 +607,22 @@ func (b Baggage) Len() int {
|
|||||||
|
|
||||||
// String encodes Baggage into a header string compliant with the W3C Baggage
|
// String encodes Baggage into a header string compliant with the W3C Baggage
|
||||||
// specification.
|
// specification.
|
||||||
|
// It would ignore members where the member key is invalid with the W3C Baggage
|
||||||
|
// specification. This could happen for a UTF-8 key, as it may contain
|
||||||
|
// invalid characters.
|
||||||
func (b Baggage) String() string {
|
func (b Baggage) String() string {
|
||||||
members := make([]string, 0, len(b.list))
|
members := make([]string, 0, len(b.list))
|
||||||
for k, v := range b.list {
|
for k, v := range b.list {
|
||||||
members = append(members, Member{
|
s := Member{
|
||||||
key: k,
|
key: k,
|
||||||
value: v.Value,
|
value: v.Value,
|
||||||
properties: fromInternalProperties(v.Properties),
|
properties: fromInternalProperties(v.Properties),
|
||||||
}.String())
|
}.String()
|
||||||
|
|
||||||
|
// Ignored empty members.
|
||||||
|
if s != "" {
|
||||||
|
members = append(members, s)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return strings.Join(members, listDelimiter)
|
return strings.Join(members, listDelimiter)
|
||||||
}
|
}
|
||||||
@ -607,10 +694,12 @@ func parsePropertyInternal(s string) (p Property, ok bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Decode a percent-encoded value.
|
// Decode a percent-encoded value.
|
||||||
value, err := url.PathUnescape(s[valueStart:valueEnd])
|
rawVal := s[valueStart:valueEnd]
|
||||||
|
unescapeVal, err := url.PathUnescape(rawVal)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
value := replaceInvalidUTF8Sequences(len(rawVal), unescapeVal)
|
||||||
|
|
||||||
ok = true
|
ok = true
|
||||||
p.key = s[keyStart:keyEnd]
|
p.key = s[keyStart:keyEnd]
|
||||||
@ -720,6 +809,24 @@ var safeKeyCharset = [utf8.RuneSelf]bool{
|
|||||||
'~': true,
|
'~': true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validateBaggageName checks if the string is a valid OpenTelemetry Baggage name.
|
||||||
|
// Baggage name is a valid, non-empty UTF-8 string.
|
||||||
|
func validateBaggageName(s string) bool {
|
||||||
|
if len(s) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return utf8.ValidString(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// validateBaggageValue checks if the string is a valid OpenTelemetry Baggage value.
|
||||||
|
// Baggage value is a valid UTF-8 strings.
|
||||||
|
// Empty string is also a valid UTF-8 string.
|
||||||
|
func validateBaggageValue(s string) bool {
|
||||||
|
return utf8.ValidString(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// validateKey checks if the string is a valid W3C Baggage key.
|
||||||
func validateKey(s string) bool {
|
func validateKey(s string) bool {
|
||||||
if len(s) == 0 {
|
if len(s) == 0 {
|
||||||
return false
|
return false
|
||||||
@ -738,6 +845,7 @@ func validateKeyChar(c int32) bool {
|
|||||||
return c >= 0 && c < int32(utf8.RuneSelf) && safeKeyCharset[c]
|
return c >= 0 && c < int32(utf8.RuneSelf) && safeKeyCharset[c]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validateValue checks if the string is a valid W3C Baggage value.
|
||||||
func validateValue(s string) bool {
|
func validateValue(s string) bool {
|
||||||
for _, c := range s {
|
for _, c := range s {
|
||||||
if !validateValueChar(c) {
|
if !validateValueChar(c) {
|
||||||
|
2
vendor/go.opentelemetry.io/otel/codes/codes.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/codes/codes.go
generated
vendored
@ -83,7 +83,7 @@ func (c *Code) UnmarshalJSON(b []byte) error {
|
|||||||
return fmt.Errorf("invalid code: %q", ci)
|
return fmt.Errorf("invalid code: %q", ci)
|
||||||
}
|
}
|
||||||
|
|
||||||
*c = Code(ci)
|
*c = Code(ci) // nolint: gosec // Bit size of 32 check above.
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return fmt.Errorf("invalid code: %q", string(b))
|
return fmt.Errorf("invalid code: %q", string(b))
|
||||||
|
2
vendor/go.opentelemetry.io/otel/doc.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/doc.go
generated
vendored
@ -17,6 +17,8 @@ To read more about tracing, see go.opentelemetry.io/otel/trace.
|
|||||||
|
|
||||||
To read more about metrics, see go.opentelemetry.io/otel/metric.
|
To read more about metrics, see go.opentelemetry.io/otel/metric.
|
||||||
|
|
||||||
|
To read more about logs, see go.opentelemetry.io/otel/log.
|
||||||
|
|
||||||
To read more about propagation, see go.opentelemetry.io/otel/propagation and
|
To read more about propagation, see go.opentelemetry.io/otel/propagation and
|
||||||
go.opentelemetry.io/otel/baggage.
|
go.opentelemetry.io/otel/baggage.
|
||||||
*/
|
*/
|
||||||
|
22
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/span.go
generated
vendored
22
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform/span.go
generated
vendored
@ -4,6 +4,8 @@
|
|||||||
package tracetransform // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform"
|
package tracetransform // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/sdk/instrumentation"
|
"go.opentelemetry.io/otel/sdk/instrumentation"
|
||||||
@ -102,9 +104,9 @@ func span(sd tracesdk.ReadOnlySpan) *tracepb.Span {
|
|||||||
Name: sd.Name(),
|
Name: sd.Name(),
|
||||||
Attributes: KeyValues(sd.Attributes()),
|
Attributes: KeyValues(sd.Attributes()),
|
||||||
Events: spanEvents(sd.Events()),
|
Events: spanEvents(sd.Events()),
|
||||||
DroppedAttributesCount: uint32(sd.DroppedAttributes()),
|
DroppedAttributesCount: clampUint32(sd.DroppedAttributes()),
|
||||||
DroppedEventsCount: uint32(sd.DroppedEvents()),
|
DroppedEventsCount: clampUint32(sd.DroppedEvents()),
|
||||||
DroppedLinksCount: uint32(sd.DroppedLinks()),
|
DroppedLinksCount: clampUint32(sd.DroppedLinks()),
|
||||||
}
|
}
|
||||||
|
|
||||||
if psid := sd.Parent().SpanID(); psid.IsValid() {
|
if psid := sd.Parent().SpanID(); psid.IsValid() {
|
||||||
@ -115,6 +117,16 @@ func span(sd tracesdk.ReadOnlySpan) *tracepb.Span {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func clampUint32(v int) uint32 {
|
||||||
|
if v < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
if int64(v) > math.MaxUint32 {
|
||||||
|
return math.MaxUint32
|
||||||
|
}
|
||||||
|
return uint32(v) // nolint: gosec // Overflow/Underflow checked.
|
||||||
|
}
|
||||||
|
|
||||||
// status transform a span code and message into an OTLP span status.
|
// status transform a span code and message into an OTLP span status.
|
||||||
func status(status codes.Code, message string) *tracepb.Status {
|
func status(status codes.Code, message string) *tracepb.Status {
|
||||||
var c tracepb.Status_StatusCode
|
var c tracepb.Status_StatusCode
|
||||||
@ -153,7 +165,7 @@ func links(links []tracesdk.Link) []*tracepb.Span_Link {
|
|||||||
TraceId: tid[:],
|
TraceId: tid[:],
|
||||||
SpanId: sid[:],
|
SpanId: sid[:],
|
||||||
Attributes: KeyValues(otLink.Attributes),
|
Attributes: KeyValues(otLink.Attributes),
|
||||||
DroppedAttributesCount: uint32(otLink.DroppedAttributeCount),
|
DroppedAttributesCount: clampUint32(otLink.DroppedAttributeCount),
|
||||||
Flags: flags,
|
Flags: flags,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -182,7 +194,7 @@ func spanEvents(es []tracesdk.Event) []*tracepb.Span_Event {
|
|||||||
Name: es[i].Name,
|
Name: es[i].Name,
|
||||||
TimeUnixNano: uint64(es[i].Time.UnixNano()),
|
TimeUnixNano: uint64(es[i].Time.UnixNano()),
|
||||||
Attributes: KeyValues(es[i].Attributes),
|
Attributes: KeyValues(es[i].Attributes),
|
||||||
DroppedAttributesCount: uint32(es[i].DroppedAttributeCount),
|
DroppedAttributesCount: clampUint32(es[i].DroppedAttributeCount),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return events
|
return events
|
||||||
|
5
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/doc.go
generated
vendored
5
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/doc.go
generated
vendored
@ -12,9 +12,8 @@ The environment variables described below can be used for configuration.
|
|||||||
OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT (default: "https://localhost:4317") -
|
OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT (default: "https://localhost:4317") -
|
||||||
target to which the exporter sends telemetry.
|
target to which the exporter sends telemetry.
|
||||||
The target syntax is defined in https://github.com/grpc/grpc/blob/master/doc/naming.md.
|
The target syntax is defined in https://github.com/grpc/grpc/blob/master/doc/naming.md.
|
||||||
The value must contain a host.
|
The value must contain a scheme ("http" or "https") and host.
|
||||||
The value may additionally a port, a scheme, and a path.
|
The value may additionally contain a port, and a path.
|
||||||
The value accepts "http" and "https" scheme.
|
|
||||||
The value should not contain a query string or fragment.
|
The value should not contain a query string or fragment.
|
||||||
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT takes precedence over OTEL_EXPORTER_OTLP_ENDPOINT.
|
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT takes precedence over OTEL_EXPORTER_OTLP_ENDPOINT.
|
||||||
The configuration can be overridden by [WithEndpoint], [WithEndpointURL], [WithInsecure], and [WithGRPCConn] options.
|
The configuration can be overridden by [WithEndpoint], [WithEndpointURL], [WithInsecure], and [WithGRPCConn] options.
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/internal/global"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
)
|
)
|
||||||
@ -163,12 +164,16 @@ func stringToHeader(value string) map[string]string {
|
|||||||
global.Error(errors.New("missing '="), "parse headers", "input", header)
|
global.Error(errors.New("missing '="), "parse headers", "input", header)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
name, err := url.PathUnescape(n)
|
|
||||||
if err != nil {
|
trimmedName := strings.TrimSpace(n)
|
||||||
global.Error(err, "escape header key", "key", n)
|
|
||||||
|
// Validate the key.
|
||||||
|
if !isValidHeaderKey(trimmedName) {
|
||||||
|
global.Error(errors.New("invalid header key"), "parse headers", "key", trimmedName)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
trimmedName := strings.TrimSpace(name)
|
|
||||||
|
// Only decode the value.
|
||||||
value, err := url.PathUnescape(v)
|
value, err := url.PathUnescape(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Error(err, "escape header value", "value", v)
|
global.Error(err, "escape header value", "value", v)
|
||||||
@ -189,3 +194,22 @@ func createCertPool(certBytes []byte) (*x509.CertPool, error) {
|
|||||||
}
|
}
|
||||||
return cp, nil
|
return cp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isValidHeaderKey(key string) bool {
|
||||||
|
if key == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for _, c := range key {
|
||||||
|
if !isTokenChar(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func isTokenChar(c rune) bool {
|
||||||
|
return c <= unicode.MaxASCII && (unicode.IsLetter(c) ||
|
||||||
|
unicode.IsDigit(c) ||
|
||||||
|
c == '!' || c == '#' || c == '$' || c == '%' || c == '&' || c == '\'' || c == '*' ||
|
||||||
|
c == '+' || c == '-' || c == '.' || c == '^' || c == '_' || c == '`' || c == '|' || c == '~')
|
||||||
|
}
|
||||||
|
57
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/client.go
generated
vendored
57
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/client.go
generated
vendored
@ -14,6 +14,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -151,7 +152,7 @@ func (d *client) UploadTraces(ctx context.Context, protoSpans []*tracepb.Resourc
|
|||||||
resp, err := d.client.Do(request.Request)
|
resp, err := d.client.Do(request.Request)
|
||||||
var urlErr *url.Error
|
var urlErr *url.Error
|
||||||
if errors.As(err, &urlErr) && urlErr.Temporary() {
|
if errors.As(err, &urlErr) && urlErr.Temporary() {
|
||||||
return newResponseError(http.Header{})
|
return newResponseError(http.Header{}, err)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -198,11 +199,27 @@ func (d *client) UploadTraces(ctx context.Context, protoSpans []*tracepb.Resourc
|
|||||||
sc == http.StatusBadGateway,
|
sc == http.StatusBadGateway,
|
||||||
sc == http.StatusServiceUnavailable,
|
sc == http.StatusServiceUnavailable,
|
||||||
sc == http.StatusGatewayTimeout:
|
sc == http.StatusGatewayTimeout:
|
||||||
// Retry-able failures. Drain the body to reuse the connection.
|
// Retry-able failures.
|
||||||
if _, err := io.Copy(io.Discard, resp.Body); err != nil {
|
rErr := newResponseError(resp.Header, nil)
|
||||||
otel.Handle(err)
|
|
||||||
|
// server may return a message with the response
|
||||||
|
// body, so we read it to include in the error
|
||||||
|
// message to be returned. It will help in
|
||||||
|
// debugging the actual issue.
|
||||||
|
var respData bytes.Buffer
|
||||||
|
if _, err := io.Copy(&respData, resp.Body); err != nil {
|
||||||
|
_ = resp.Body.Close()
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
return newResponseError(resp.Header)
|
|
||||||
|
// overwrite the error message with the response body
|
||||||
|
// if it is not empty
|
||||||
|
if respStr := strings.TrimSpace(respData.String()); respStr != "" {
|
||||||
|
// Include response for context.
|
||||||
|
e := errors.New(respStr)
|
||||||
|
rErr = newResponseError(resp.Header, e)
|
||||||
|
}
|
||||||
|
return rErr
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("failed to send to %s: %s", request.URL, resp.Status)
|
return fmt.Errorf("failed to send to %s: %s", request.URL, resp.Status)
|
||||||
}
|
}
|
||||||
@ -291,24 +308,50 @@ func (r *request) reset(ctx context.Context) {
|
|||||||
// retryableError represents a request failure that can be retried.
|
// retryableError represents a request failure that can be retried.
|
||||||
type retryableError struct {
|
type retryableError struct {
|
||||||
throttle int64
|
throttle int64
|
||||||
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
// newResponseError returns a retryableError and will extract any explicit
|
// newResponseError returns a retryableError and will extract any explicit
|
||||||
// throttle delay contained in headers.
|
// throttle delay contained in headers. The returned error wraps wrapped
|
||||||
func newResponseError(header http.Header) error {
|
// if it is not nil.
|
||||||
|
func newResponseError(header http.Header, wrapped error) error {
|
||||||
var rErr retryableError
|
var rErr retryableError
|
||||||
if s, ok := header["Retry-After"]; ok {
|
if s, ok := header["Retry-After"]; ok {
|
||||||
if t, err := strconv.ParseInt(s[0], 10, 64); err == nil {
|
if t, err := strconv.ParseInt(s[0], 10, 64); err == nil {
|
||||||
rErr.throttle = t
|
rErr.throttle = t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rErr.err = wrapped
|
||||||
return rErr
|
return rErr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e retryableError) Error() string {
|
func (e retryableError) Error() string {
|
||||||
|
if e.err != nil {
|
||||||
|
return fmt.Sprintf("retry-able request failure: %s", e.err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
return "retry-able request failure"
|
return "retry-able request failure"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e retryableError) Unwrap() error {
|
||||||
|
return e.err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e retryableError) As(target interface{}) bool {
|
||||||
|
if e.err == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
switch v := target.(type) {
|
||||||
|
case **retryableError:
|
||||||
|
*v = &e
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// evaluate returns if err is retry-able. If it is and it includes an explicit
|
// evaluate returns if err is retry-able. If it is and it includes an explicit
|
||||||
// throttling delay, that delay is also returned.
|
// throttling delay, that delay is also returned.
|
||||||
func evaluate(err error) (bool, time.Duration) {
|
func evaluate(err error) (bool, time.Duration) {
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/internal/global"
|
"go.opentelemetry.io/otel/internal/global"
|
||||||
)
|
)
|
||||||
@ -163,12 +164,16 @@ func stringToHeader(value string) map[string]string {
|
|||||||
global.Error(errors.New("missing '="), "parse headers", "input", header)
|
global.Error(errors.New("missing '="), "parse headers", "input", header)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
name, err := url.PathUnescape(n)
|
|
||||||
if err != nil {
|
trimmedName := strings.TrimSpace(n)
|
||||||
global.Error(err, "escape header key", "key", n)
|
|
||||||
|
// Validate the key.
|
||||||
|
if !isValidHeaderKey(trimmedName) {
|
||||||
|
global.Error(errors.New("invalid header key"), "parse headers", "key", trimmedName)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
trimmedName := strings.TrimSpace(name)
|
|
||||||
|
// Only decode the value.
|
||||||
value, err := url.PathUnescape(v)
|
value, err := url.PathUnescape(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Error(err, "escape header value", "value", v)
|
global.Error(err, "escape header value", "value", v)
|
||||||
@ -189,3 +194,22 @@ func createCertPool(certBytes []byte) (*x509.CertPool, error) {
|
|||||||
}
|
}
|
||||||
return cp, nil
|
return cp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isValidHeaderKey(key string) bool {
|
||||||
|
if key == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for _, c := range key {
|
||||||
|
if !isTokenChar(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func isTokenChar(c rune) bool {
|
||||||
|
return c <= unicode.MaxASCII && (unicode.IsLetter(c) ||
|
||||||
|
unicode.IsDigit(c) ||
|
||||||
|
c == '!' || c == '#' || c == '$' || c == '%' || c == '&' || c == '\'' || c == '*' ||
|
||||||
|
c == '+' || c == '-' || c == '.' || c == '^' || c == '_' || c == '`' || c == '|' || c == '~')
|
||||||
|
}
|
||||||
|
11
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/options.go
generated
vendored
11
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/options.go
generated
vendored
@ -62,8 +62,10 @@ func (w wrappedOption) applyHTTPOption(cfg otlpconfig.Config) otlpconfig.Config
|
|||||||
//
|
//
|
||||||
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
||||||
// environment variable is set, and this option is not passed, that variable
|
// environment variable is set, and this option is not passed, that variable
|
||||||
// value will be used. If both are set, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
// value will be used. If both environment variables are set,
|
||||||
// will take precedence. Note, both environment variables include the full
|
// OTEL_EXPORTER_OTLP_TRACES_ENDPOINT will take precedence. If an environment
|
||||||
|
// variable is set, and this option is passed, this option will take precedence.
|
||||||
|
// Note, both environment variables include the full
|
||||||
// scheme and path, while WithEndpoint sets only the host and port.
|
// scheme and path, while WithEndpoint sets only the host and port.
|
||||||
//
|
//
|
||||||
// If both this option and WithEndpointURL are used, the last used option will
|
// If both this option and WithEndpointURL are used, the last used option will
|
||||||
@ -82,8 +84,9 @@ func WithEndpoint(endpoint string) Option {
|
|||||||
//
|
//
|
||||||
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
// If the OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
||||||
// environment variable is set, and this option is not passed, that variable
|
// environment variable is set, and this option is not passed, that variable
|
||||||
// value will be used. If both are set, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
// value will be used. If both environment variables are set,
|
||||||
// will take precedence.
|
// OTEL_EXPORTER_OTLP_TRACES_ENDPOINT will take precedence. If an environment
|
||||||
|
// variable is set, and this option is passed, this option will take precedence.
|
||||||
//
|
//
|
||||||
// If both this option and WithEndpoint are used, the last used option will
|
// If both this option and WithEndpoint are used, the last used option will
|
||||||
// take precedence.
|
// take precedence.
|
||||||
|
2
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/version.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/exporters/otlp/otlptrace/version.go
generated
vendored
@ -5,5 +5,5 @@ package otlptrace // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
|||||||
|
|
||||||
// Version is the current release version of the OpenTelemetry OTLP trace exporter in use.
|
// Version is the current release version of the OpenTelemetry OTLP trace exporter in use.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "1.28.0"
|
return "1.29.0"
|
||||||
}
|
}
|
||||||
|
9
vendor/go.opentelemetry.io/otel/internal/rawhelpers.go
generated
vendored
9
vendor/go.opentelemetry.io/otel/internal/rawhelpers.go
generated
vendored
@ -24,7 +24,8 @@ func Int64ToRaw(i int64) uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func RawToInt64(r uint64) int64 {
|
func RawToInt64(r uint64) int64 {
|
||||||
return int64(r)
|
// Assumes original was a valid int64 (overflow not checked).
|
||||||
|
return int64(r) // nolint: gosec
|
||||||
}
|
}
|
||||||
|
|
||||||
func Float64ToRaw(f float64) uint64 {
|
func Float64ToRaw(f float64) uint64 {
|
||||||
@ -36,9 +37,11 @@ func RawToFloat64(r uint64) float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func RawPtrToFloat64Ptr(r *uint64) *float64 {
|
func RawPtrToFloat64Ptr(r *uint64) *float64 {
|
||||||
return (*float64)(unsafe.Pointer(r))
|
// Assumes original was a valid *float64 (overflow not checked).
|
||||||
|
return (*float64)(unsafe.Pointer(r)) // nolint: gosec
|
||||||
}
|
}
|
||||||
|
|
||||||
func RawPtrToInt64Ptr(r *uint64) *int64 {
|
func RawPtrToInt64Ptr(r *uint64) *int64 {
|
||||||
return (*int64)(unsafe.Pointer(r))
|
// Assumes original was a valid *int64 (overflow not checked).
|
||||||
|
return (*int64)(unsafe.Pointer(r)) // nolint: gosec
|
||||||
}
|
}
|
||||||
|
13
vendor/go.opentelemetry.io/otel/metric/meter.go
generated
vendored
13
vendor/go.opentelemetry.io/otel/metric/meter.go
generated
vendored
@ -52,6 +52,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Int64Counter(name string, options ...Int64CounterOption) (Int64Counter, error)
|
Int64Counter(name string, options ...Int64CounterOption) (Int64Counter, error)
|
||||||
|
|
||||||
// Int64UpDownCounter returns a new Int64UpDownCounter instrument
|
// Int64UpDownCounter returns a new Int64UpDownCounter instrument
|
||||||
// identified by name and configured with options. The instrument is used
|
// identified by name and configured with options. The instrument is used
|
||||||
// to synchronously record int64 measurements during a computational
|
// to synchronously record int64 measurements during a computational
|
||||||
@ -61,6 +62,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Int64UpDownCounter(name string, options ...Int64UpDownCounterOption) (Int64UpDownCounter, error)
|
Int64UpDownCounter(name string, options ...Int64UpDownCounterOption) (Int64UpDownCounter, error)
|
||||||
|
|
||||||
// Int64Histogram returns a new Int64Histogram instrument identified by
|
// Int64Histogram returns a new Int64Histogram instrument identified by
|
||||||
// name and configured with options. The instrument is used to
|
// name and configured with options. The instrument is used to
|
||||||
// synchronously record the distribution of int64 measurements during a
|
// synchronously record the distribution of int64 measurements during a
|
||||||
@ -70,6 +72,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Int64Histogram(name string, options ...Int64HistogramOption) (Int64Histogram, error)
|
Int64Histogram(name string, options ...Int64HistogramOption) (Int64Histogram, error)
|
||||||
|
|
||||||
// Int64Gauge returns a new Int64Gauge instrument identified by name and
|
// Int64Gauge returns a new Int64Gauge instrument identified by name and
|
||||||
// configured with options. The instrument is used to synchronously record
|
// configured with options. The instrument is used to synchronously record
|
||||||
// instantaneous int64 measurements during a computational operation.
|
// instantaneous int64 measurements during a computational operation.
|
||||||
@ -78,6 +81,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Int64Gauge(name string, options ...Int64GaugeOption) (Int64Gauge, error)
|
Int64Gauge(name string, options ...Int64GaugeOption) (Int64Gauge, error)
|
||||||
|
|
||||||
// Int64ObservableCounter returns a new Int64ObservableCounter identified
|
// Int64ObservableCounter returns a new Int64ObservableCounter identified
|
||||||
// by name and configured with options. The instrument is used to
|
// by name and configured with options. The instrument is used to
|
||||||
// asynchronously record increasing int64 measurements once per a
|
// asynchronously record increasing int64 measurements once per a
|
||||||
@ -92,6 +96,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Int64ObservableCounter(name string, options ...Int64ObservableCounterOption) (Int64ObservableCounter, error)
|
Int64ObservableCounter(name string, options ...Int64ObservableCounterOption) (Int64ObservableCounter, error)
|
||||||
|
|
||||||
// Int64ObservableUpDownCounter returns a new Int64ObservableUpDownCounter
|
// Int64ObservableUpDownCounter returns a new Int64ObservableUpDownCounter
|
||||||
// instrument identified by name and configured with options. The
|
// instrument identified by name and configured with options. The
|
||||||
// instrument is used to asynchronously record int64 measurements once per
|
// instrument is used to asynchronously record int64 measurements once per
|
||||||
@ -106,6 +111,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Int64ObservableUpDownCounter(name string, options ...Int64ObservableUpDownCounterOption) (Int64ObservableUpDownCounter, error)
|
Int64ObservableUpDownCounter(name string, options ...Int64ObservableUpDownCounterOption) (Int64ObservableUpDownCounter, error)
|
||||||
|
|
||||||
// Int64ObservableGauge returns a new Int64ObservableGauge instrument
|
// Int64ObservableGauge returns a new Int64ObservableGauge instrument
|
||||||
// identified by name and configured with options. The instrument is used
|
// identified by name and configured with options. The instrument is used
|
||||||
// to asynchronously record instantaneous int64 measurements once per a
|
// to asynchronously record instantaneous int64 measurements once per a
|
||||||
@ -130,6 +136,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Float64Counter(name string, options ...Float64CounterOption) (Float64Counter, error)
|
Float64Counter(name string, options ...Float64CounterOption) (Float64Counter, error)
|
||||||
|
|
||||||
// Float64UpDownCounter returns a new Float64UpDownCounter instrument
|
// Float64UpDownCounter returns a new Float64UpDownCounter instrument
|
||||||
// identified by name and configured with options. The instrument is used
|
// identified by name and configured with options. The instrument is used
|
||||||
// to synchronously record float64 measurements during a computational
|
// to synchronously record float64 measurements during a computational
|
||||||
@ -139,6 +146,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Float64UpDownCounter(name string, options ...Float64UpDownCounterOption) (Float64UpDownCounter, error)
|
Float64UpDownCounter(name string, options ...Float64UpDownCounterOption) (Float64UpDownCounter, error)
|
||||||
|
|
||||||
// Float64Histogram returns a new Float64Histogram instrument identified by
|
// Float64Histogram returns a new Float64Histogram instrument identified by
|
||||||
// name and configured with options. The instrument is used to
|
// name and configured with options. The instrument is used to
|
||||||
// synchronously record the distribution of float64 measurements during a
|
// synchronously record the distribution of float64 measurements during a
|
||||||
@ -148,6 +156,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Float64Histogram(name string, options ...Float64HistogramOption) (Float64Histogram, error)
|
Float64Histogram(name string, options ...Float64HistogramOption) (Float64Histogram, error)
|
||||||
|
|
||||||
// Float64Gauge returns a new Float64Gauge instrument identified by name and
|
// Float64Gauge returns a new Float64Gauge instrument identified by name and
|
||||||
// configured with options. The instrument is used to synchronously record
|
// configured with options. The instrument is used to synchronously record
|
||||||
// instantaneous float64 measurements during a computational operation.
|
// instantaneous float64 measurements during a computational operation.
|
||||||
@ -156,6 +165,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Float64Gauge(name string, options ...Float64GaugeOption) (Float64Gauge, error)
|
Float64Gauge(name string, options ...Float64GaugeOption) (Float64Gauge, error)
|
||||||
|
|
||||||
// Float64ObservableCounter returns a new Float64ObservableCounter
|
// Float64ObservableCounter returns a new Float64ObservableCounter
|
||||||
// instrument identified by name and configured with options. The
|
// instrument identified by name and configured with options. The
|
||||||
// instrument is used to asynchronously record increasing float64
|
// instrument is used to asynchronously record increasing float64
|
||||||
@ -170,6 +180,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Float64ObservableCounter(name string, options ...Float64ObservableCounterOption) (Float64ObservableCounter, error)
|
Float64ObservableCounter(name string, options ...Float64ObservableCounterOption) (Float64ObservableCounter, error)
|
||||||
|
|
||||||
// Float64ObservableUpDownCounter returns a new
|
// Float64ObservableUpDownCounter returns a new
|
||||||
// Float64ObservableUpDownCounter instrument identified by name and
|
// Float64ObservableUpDownCounter instrument identified by name and
|
||||||
// configured with options. The instrument is used to asynchronously record
|
// configured with options. The instrument is used to asynchronously record
|
||||||
@ -184,6 +195,7 @@ type Meter interface {
|
|||||||
// See the Instrument Name section of the package documentation for more
|
// See the Instrument Name section of the package documentation for more
|
||||||
// information.
|
// information.
|
||||||
Float64ObservableUpDownCounter(name string, options ...Float64ObservableUpDownCounterOption) (Float64ObservableUpDownCounter, error)
|
Float64ObservableUpDownCounter(name string, options ...Float64ObservableUpDownCounterOption) (Float64ObservableUpDownCounter, error)
|
||||||
|
|
||||||
// Float64ObservableGauge returns a new Float64ObservableGauge instrument
|
// Float64ObservableGauge returns a new Float64ObservableGauge instrument
|
||||||
// identified by name and configured with options. The instrument is used
|
// identified by name and configured with options. The instrument is used
|
||||||
// to asynchronously record instantaneous float64 measurements once per a
|
// to asynchronously record instantaneous float64 measurements once per a
|
||||||
@ -242,6 +254,7 @@ type Observer interface {
|
|||||||
|
|
||||||
// ObserveFloat64 records the float64 value for obsrv.
|
// ObserveFloat64 records the float64 value for obsrv.
|
||||||
ObserveFloat64(obsrv Float64Observable, value float64, opts ...ObserveOption)
|
ObserveFloat64(obsrv Float64Observable, value float64, opts ...ObserveOption)
|
||||||
|
|
||||||
// ObserveInt64 records the int64 value for obsrv.
|
// ObserveInt64 records the int64 value for obsrv.
|
||||||
ObserveInt64(obsrv Int64Observable, value int64, opts ...ObserveOption)
|
ObserveInt64(obsrv Int64Observable, value int64, opts ...ObserveOption)
|
||||||
}
|
}
|
||||||
|
3
vendor/go.opentelemetry.io/otel/sdk/instrumentation/library.go
generated
vendored
3
vendor/go.opentelemetry.io/otel/sdk/instrumentation/library.go
generated
vendored
@ -4,5 +4,6 @@
|
|||||||
package instrumentation // import "go.opentelemetry.io/otel/sdk/instrumentation"
|
package instrumentation // import "go.opentelemetry.io/otel/sdk/instrumentation"
|
||||||
|
|
||||||
// Library represents the instrumentation library.
|
// Library represents the instrumentation library.
|
||||||
// Deprecated: please use Scope instead.
|
//
|
||||||
|
// Deprecated: use [Scope] instead.
|
||||||
type Library = Scope
|
type Library = Scope
|
||||||
|
2
vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/sdk/trace/snapshot.go
generated
vendored
@ -99,7 +99,7 @@ func (s snapshot) InstrumentationScope() instrumentation.Scope {
|
|||||||
|
|
||||||
// InstrumentationLibrary returns information about the instrumentation
|
// InstrumentationLibrary returns information about the instrumentation
|
||||||
// library that created the span.
|
// library that created the span.
|
||||||
func (s snapshot) InstrumentationLibrary() instrumentation.Library {
|
func (s snapshot) InstrumentationLibrary() instrumentation.Library { //nolint:staticcheck // This method needs to be define for backwards compatibility
|
||||||
return s.instrumentationScope
|
return s.instrumentationScope
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
vendor/go.opentelemetry.io/otel/sdk/trace/span.go
generated
vendored
4
vendor/go.opentelemetry.io/otel/sdk/trace/span.go
generated
vendored
@ -62,7 +62,7 @@ type ReadOnlySpan interface {
|
|||||||
// InstrumentationLibrary returns information about the instrumentation
|
// InstrumentationLibrary returns information about the instrumentation
|
||||||
// library that created the span.
|
// library that created the span.
|
||||||
// Deprecated: please use InstrumentationScope instead.
|
// Deprecated: please use InstrumentationScope instead.
|
||||||
InstrumentationLibrary() instrumentation.Library
|
InstrumentationLibrary() instrumentation.Library //nolint:staticcheck // This method needs to be define for backwards compatibility
|
||||||
// Resource returns information about the entity that produced the span.
|
// Resource returns information about the entity that produced the span.
|
||||||
Resource() *resource.Resource
|
Resource() *resource.Resource
|
||||||
// DroppedAttributes returns the number of attributes dropped by the span
|
// DroppedAttributes returns the number of attributes dropped by the span
|
||||||
@ -642,7 +642,7 @@ func (s *recordingSpan) InstrumentationScope() instrumentation.Scope {
|
|||||||
|
|
||||||
// InstrumentationLibrary returns the instrumentation.Library associated with
|
// InstrumentationLibrary returns the instrumentation.Library associated with
|
||||||
// the Tracer that created this span.
|
// the Tracer that created this span.
|
||||||
func (s *recordingSpan) InstrumentationLibrary() instrumentation.Library {
|
func (s *recordingSpan) InstrumentationLibrary() instrumentation.Library { //nolint:staticcheck // This method needs to be define for backwards compatibility
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.Unlock()
|
||||||
return s.tracer.instrumentationScope
|
return s.tracer.instrumentationScope
|
||||||
|
45
vendor/go.opentelemetry.io/otel/sdk/trace/tracetest/span.go
generated
vendored
45
vendor/go.opentelemetry.io/otel/sdk/trace/tracetest/span.go
generated
vendored
@ -45,22 +45,25 @@ func (s SpanStubs) Snapshots() []tracesdk.ReadOnlySpan {
|
|||||||
|
|
||||||
// SpanStub is a stand-in for a Span.
|
// SpanStub is a stand-in for a Span.
|
||||||
type SpanStub struct {
|
type SpanStub struct {
|
||||||
Name string
|
Name string
|
||||||
SpanContext trace.SpanContext
|
SpanContext trace.SpanContext
|
||||||
Parent trace.SpanContext
|
Parent trace.SpanContext
|
||||||
SpanKind trace.SpanKind
|
SpanKind trace.SpanKind
|
||||||
StartTime time.Time
|
StartTime time.Time
|
||||||
EndTime time.Time
|
EndTime time.Time
|
||||||
Attributes []attribute.KeyValue
|
Attributes []attribute.KeyValue
|
||||||
Events []tracesdk.Event
|
Events []tracesdk.Event
|
||||||
Links []tracesdk.Link
|
Links []tracesdk.Link
|
||||||
Status tracesdk.Status
|
Status tracesdk.Status
|
||||||
DroppedAttributes int
|
DroppedAttributes int
|
||||||
DroppedEvents int
|
DroppedEvents int
|
||||||
DroppedLinks int
|
DroppedLinks int
|
||||||
ChildSpanCount int
|
ChildSpanCount int
|
||||||
Resource *resource.Resource
|
Resource *resource.Resource
|
||||||
InstrumentationLibrary instrumentation.Library
|
InstrumentationScope instrumentation.Scope
|
||||||
|
|
||||||
|
// Deprecated: use InstrumentationScope instead.
|
||||||
|
InstrumentationLibrary instrumentation.Library //nolint:staticcheck // This method needs to be define for backwards compatibility
|
||||||
}
|
}
|
||||||
|
|
||||||
// SpanStubFromReadOnlySpan returns a SpanStub populated from ro.
|
// SpanStubFromReadOnlySpan returns a SpanStub populated from ro.
|
||||||
@ -85,12 +88,18 @@ func SpanStubFromReadOnlySpan(ro tracesdk.ReadOnlySpan) SpanStub {
|
|||||||
DroppedLinks: ro.DroppedLinks(),
|
DroppedLinks: ro.DroppedLinks(),
|
||||||
ChildSpanCount: ro.ChildSpanCount(),
|
ChildSpanCount: ro.ChildSpanCount(),
|
||||||
Resource: ro.Resource(),
|
Resource: ro.Resource(),
|
||||||
|
InstrumentationScope: ro.InstrumentationScope(),
|
||||||
InstrumentationLibrary: ro.InstrumentationScope(),
|
InstrumentationLibrary: ro.InstrumentationScope(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Snapshot returns a read-only copy of the SpanStub.
|
// Snapshot returns a read-only copy of the SpanStub.
|
||||||
func (s SpanStub) Snapshot() tracesdk.ReadOnlySpan {
|
func (s SpanStub) Snapshot() tracesdk.ReadOnlySpan {
|
||||||
|
scopeOrLibrary := s.InstrumentationScope
|
||||||
|
if scopeOrLibrary.Name == "" && scopeOrLibrary.Version == "" && scopeOrLibrary.SchemaURL == "" {
|
||||||
|
scopeOrLibrary = s.InstrumentationLibrary
|
||||||
|
}
|
||||||
|
|
||||||
return spanSnapshot{
|
return spanSnapshot{
|
||||||
name: s.Name,
|
name: s.Name,
|
||||||
spanContext: s.SpanContext,
|
spanContext: s.SpanContext,
|
||||||
@ -107,7 +116,7 @@ func (s SpanStub) Snapshot() tracesdk.ReadOnlySpan {
|
|||||||
droppedLinks: s.DroppedLinks,
|
droppedLinks: s.DroppedLinks,
|
||||||
childSpanCount: s.ChildSpanCount,
|
childSpanCount: s.ChildSpanCount,
|
||||||
resource: s.Resource,
|
resource: s.Resource,
|
||||||
instrumentationScope: s.InstrumentationLibrary,
|
instrumentationScope: scopeOrLibrary,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,6 +161,6 @@ func (s spanSnapshot) InstrumentationScope() instrumentation.Scope {
|
|||||||
return s.instrumentationScope
|
return s.instrumentationScope
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s spanSnapshot) InstrumentationLibrary() instrumentation.Library {
|
func (s spanSnapshot) InstrumentationLibrary() instrumentation.Library { //nolint:staticcheck // This method needs to be define for backwards compatibility
|
||||||
return s.instrumentationScope
|
return s.instrumentationScope
|
||||||
}
|
}
|
||||||
|
2
vendor/go.opentelemetry.io/otel/sdk/version.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/sdk/version.go
generated
vendored
@ -5,5 +5,5 @@ package sdk // import "go.opentelemetry.io/otel/sdk"
|
|||||||
|
|
||||||
// Version is the current release version of the OpenTelemetry SDK in use.
|
// Version is the current release version of the OpenTelemetry SDK in use.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "1.28.0"
|
return "1.29.0"
|
||||||
}
|
}
|
||||||
|
3
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md
generated
vendored
3
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md
generated
vendored
@ -1,3 +0,0 @@
|
|||||||
# Semconv v1.24.0
|
|
||||||
|
|
||||||
[](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.24.0)
|
|
4387
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go
generated
vendored
4387
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go
generated
vendored
File diff suppressed because it is too large
Load Diff
9
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go
generated
vendored
9
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go
generated
vendored
@ -1,9 +0,0 @@
|
|||||||
// Copyright The OpenTelemetry Authors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
// Package semconv implements OpenTelemetry semantic conventions.
|
|
||||||
//
|
|
||||||
// OpenTelemetry semantic conventions are agreed standardized naming
|
|
||||||
// patterns for OpenTelemetry things. This package represents the v1.24.0
|
|
||||||
// version of the OpenTelemetry semantic conventions.
|
|
||||||
package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0"
|
|
200
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go
generated
vendored
200
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go
generated
vendored
@ -1,200 +0,0 @@
|
|||||||
// Copyright The OpenTelemetry Authors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
// Code generated from semantic convention specification. DO NOT EDIT.
|
|
||||||
|
|
||||||
package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0"
|
|
||||||
|
|
||||||
import "go.opentelemetry.io/otel/attribute"
|
|
||||||
|
|
||||||
// This event represents an occurrence of a lifecycle transition on the iOS
|
|
||||||
// platform.
|
|
||||||
const (
|
|
||||||
// IosStateKey is the attribute Key conforming to the "ios.state" semantic
|
|
||||||
// conventions. It represents the this attribute represents the state the
|
|
||||||
// application has transitioned into at the occurrence of the event.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// RequirementLevel: Required
|
|
||||||
// Stability: experimental
|
|
||||||
// Note: The iOS lifecycle states are defined in the [UIApplicationDelegate
|
|
||||||
// documentation](https://developer.apple.com/documentation/uikit/uiapplicationdelegate#1656902),
|
|
||||||
// and from which the `OS terminology` column values are derived.
|
|
||||||
IosStateKey = attribute.Key("ios.state")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// The app has become `active`. Associated with UIKit notification `applicationDidBecomeActive`
|
|
||||||
IosStateActive = IosStateKey.String("active")
|
|
||||||
// The app is now `inactive`. Associated with UIKit notification `applicationWillResignActive`
|
|
||||||
IosStateInactive = IosStateKey.String("inactive")
|
|
||||||
// The app is now in the background. This value is associated with UIKit notification `applicationDidEnterBackground`
|
|
||||||
IosStateBackground = IosStateKey.String("background")
|
|
||||||
// The app is now in the foreground. This value is associated with UIKit notification `applicationWillEnterForeground`
|
|
||||||
IosStateForeground = IosStateKey.String("foreground")
|
|
||||||
// The app is about to terminate. Associated with UIKit notification `applicationWillTerminate`
|
|
||||||
IosStateTerminate = IosStateKey.String("terminate")
|
|
||||||
)
|
|
||||||
|
|
||||||
// This event represents an occurrence of a lifecycle transition on the Android
|
|
||||||
// platform.
|
|
||||||
const (
|
|
||||||
// AndroidStateKey is the attribute Key conforming to the "android.state"
|
|
||||||
// semantic conventions. It represents the this attribute represents the
|
|
||||||
// state the application has transitioned into at the occurrence of the
|
|
||||||
// event.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// RequirementLevel: Required
|
|
||||||
// Stability: experimental
|
|
||||||
// Note: The Android lifecycle states are defined in [Activity lifecycle
|
|
||||||
// callbacks](https://developer.android.com/guide/components/activities/activity-lifecycle#lc),
|
|
||||||
// and from which the `OS identifiers` are derived.
|
|
||||||
AndroidStateKey = attribute.Key("android.state")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time
|
|
||||||
AndroidStateCreated = AndroidStateKey.String("created")
|
|
||||||
// Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state
|
|
||||||
AndroidStateBackground = AndroidStateKey.String("background")
|
|
||||||
// Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states
|
|
||||||
AndroidStateForeground = AndroidStateKey.String("foreground")
|
|
||||||
)
|
|
||||||
|
|
||||||
// This semantic convention defines the attributes used to represent a feature
|
|
||||||
// flag evaluation as an event.
|
|
||||||
const (
|
|
||||||
// FeatureFlagKeyKey is the attribute Key conforming to the
|
|
||||||
// "feature_flag.key" semantic conventions. It represents the unique
|
|
||||||
// identifier of the feature flag.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// RequirementLevel: Required
|
|
||||||
// Stability: experimental
|
|
||||||
// Examples: 'logo-color'
|
|
||||||
FeatureFlagKeyKey = attribute.Key("feature_flag.key")
|
|
||||||
|
|
||||||
// FeatureFlagProviderNameKey is the attribute Key conforming to the
|
|
||||||
// "feature_flag.provider_name" semantic conventions. It represents the
|
|
||||||
// name of the service provider that performs the flag evaluation.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// RequirementLevel: Recommended
|
|
||||||
// Stability: experimental
|
|
||||||
// Examples: 'Flag Manager'
|
|
||||||
FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider_name")
|
|
||||||
|
|
||||||
// FeatureFlagVariantKey is the attribute Key conforming to the
|
|
||||||
// "feature_flag.variant" semantic conventions. It represents the sHOULD be
|
|
||||||
// a semantic identifier for a value. If one is unavailable, a stringified
|
|
||||||
// version of the value can be used.
|
|
||||||
//
|
|
||||||
// Type: string
|
|
||||||
// RequirementLevel: Recommended
|
|
||||||
// Stability: experimental
|
|
||||||
// Examples: 'red', 'true', 'on'
|
|
||||||
// Note: A semantic identifier, commonly referred to as a variant, provides
|
|
||||||
// a means
|
|
||||||
// for referring to a value without including the value itself. This can
|
|
||||||
// provide additional context for understanding the meaning behind a value.
|
|
||||||
// For example, the variant `red` maybe be used for the value `#c05543`.
|
|
||||||
//
|
|
||||||
// A stringified version of the value can be used in situations where a
|
|
||||||
// semantic identifier is unavailable. String representation of the value
|
|
||||||
// should be determined by the implementer.
|
|
||||||
FeatureFlagVariantKey = attribute.Key("feature_flag.variant")
|
|
||||||
)
|
|
||||||
|
|
||||||
// FeatureFlagKey returns an attribute KeyValue conforming to the
|
|
||||||
// "feature_flag.key" semantic conventions. It represents the unique identifier
|
|
||||||
// of the feature flag.
|
|
||||||
func FeatureFlagKey(val string) attribute.KeyValue {
|
|
||||||
return FeatureFlagKeyKey.String(val)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FeatureFlagProviderName returns an attribute KeyValue conforming to the
|
|
||||||
// "feature_flag.provider_name" semantic conventions. It represents the name of
|
|
||||||
// the service provider that performs the flag evaluation.
|
|
||||||
func FeatureFlagProviderName(val string) attribute.KeyValue {
|
|
||||||
return FeatureFlagProviderNameKey.String(val)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FeatureFlagVariant returns an attribute KeyValue conforming to the
|
|
||||||
// "feature_flag.variant" semantic conventions. It represents the sHOULD be a
|
|
||||||
// semantic identifier for a value. If one is unavailable, a stringified
|
|
||||||
// version of the value can be used.
|
|
||||||
func FeatureFlagVariant(val string) attribute.KeyValue {
|
|
||||||
return FeatureFlagVariantKey.String(val)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RPC received/sent message.
|
|
||||||
const (
|
|
||||||
// MessageCompressedSizeKey is the attribute Key conforming to the
|
|
||||||
// "message.compressed_size" semantic conventions. It represents the
|
|
||||||
// compressed size of the message in bytes.
|
|
||||||
//
|
|
||||||
// Type: int
|
|
||||||
// RequirementLevel: Optional
|
|
||||||
// Stability: experimental
|
|
||||||
MessageCompressedSizeKey = attribute.Key("message.compressed_size")
|
|
||||||
|
|
||||||
// MessageIDKey is the attribute Key conforming to the "message.id"
|
|
||||||
// semantic conventions. It represents the mUST be calculated as two
|
|
||||||
// different counters starting from `1` one for sent messages and one for
|
|
||||||
// received message.
|
|
||||||
//
|
|
||||||
// Type: int
|
|
||||||
// RequirementLevel: Optional
|
|
||||||
// Stability: experimental
|
|
||||||
// Note: This way we guarantee that the values will be consistent between
|
|
||||||
// different implementations.
|
|
||||||
MessageIDKey = attribute.Key("message.id")
|
|
||||||
|
|
||||||
// MessageTypeKey is the attribute Key conforming to the "message.type"
|
|
||||||
// semantic conventions. It represents the whether this is a received or
|
|
||||||
// sent message.
|
|
||||||
//
|
|
||||||
// Type: Enum
|
|
||||||
// RequirementLevel: Optional
|
|
||||||
// Stability: experimental
|
|
||||||
MessageTypeKey = attribute.Key("message.type")
|
|
||||||
|
|
||||||
// MessageUncompressedSizeKey is the attribute Key conforming to the
|
|
||||||
// "message.uncompressed_size" semantic conventions. It represents the
|
|
||||||
// uncompressed size of the message in bytes.
|
|
||||||
//
|
|
||||||
// Type: int
|
|
||||||
// RequirementLevel: Optional
|
|
||||||
// Stability: experimental
|
|
||||||
MessageUncompressedSizeKey = attribute.Key("message.uncompressed_size")
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// sent
|
|
||||||
MessageTypeSent = MessageTypeKey.String("SENT")
|
|
||||||
// received
|
|
||||||
MessageTypeReceived = MessageTypeKey.String("RECEIVED")
|
|
||||||
)
|
|
||||||
|
|
||||||
// MessageCompressedSize returns an attribute KeyValue conforming to the
|
|
||||||
// "message.compressed_size" semantic conventions. It represents the compressed
|
|
||||||
// size of the message in bytes.
|
|
||||||
func MessageCompressedSize(val int) attribute.KeyValue {
|
|
||||||
return MessageCompressedSizeKey.Int(val)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MessageID returns an attribute KeyValue conforming to the "message.id"
|
|
||||||
// semantic conventions. It represents the mUST be calculated as two different
|
|
||||||
// counters starting from `1` one for sent messages and one for received
|
|
||||||
// message.
|
|
||||||
func MessageID(val int) attribute.KeyValue {
|
|
||||||
return MessageIDKey.Int(val)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MessageUncompressedSize returns an attribute KeyValue conforming to the
|
|
||||||
// "message.uncompressed_size" semantic conventions. It represents the
|
|
||||||
// uncompressed size of the message in bytes.
|
|
||||||
func MessageUncompressedSize(val int) attribute.KeyValue {
|
|
||||||
return MessageUncompressedSizeKey.Int(val)
|
|
||||||
}
|
|
9
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go
generated
vendored
9
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go
generated
vendored
@ -1,9 +0,0 @@
|
|||||||
// Copyright The OpenTelemetry Authors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0"
|
|
||||||
|
|
||||||
const (
|
|
||||||
// ExceptionEventName is the name of the Span event representing an exception.
|
|
||||||
ExceptionEventName = "exception"
|
|
||||||
)
|
|
1071
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go
generated
vendored
1071
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2545
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go
generated
vendored
2545
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go
generated
vendored
File diff suppressed because it is too large
Load Diff
9
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go
generated
vendored
9
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go
generated
vendored
@ -1,9 +0,0 @@
|
|||||||
// Copyright The OpenTelemetry Authors
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0"
|
|
||||||
|
|
||||||
// SchemaURL is the schema URL that matches the version of the semantic conventions
|
|
||||||
// that this package defines. Semconv packages starting from v1.4.0 must declare
|
|
||||||
// non-empty schema URL in the form https://opentelemetry.io/schemas/<version>
|
|
||||||
const SchemaURL = "https://opentelemetry.io/schemas/1.24.0"
|
|
1323
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go
generated
vendored
1323
vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go
generated
vendored
File diff suppressed because it is too large
Load Diff
59
vendor/go.opentelemetry.io/otel/trace/provider.go
generated
vendored
Normal file
59
vendor/go.opentelemetry.io/otel/trace/provider.go
generated
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package trace // import "go.opentelemetry.io/otel/trace"
|
||||||
|
|
||||||
|
import "go.opentelemetry.io/otel/trace/embedded"
|
||||||
|
|
||||||
|
// TracerProvider provides Tracers that are used by instrumentation code to
|
||||||
|
// trace computational workflows.
|
||||||
|
//
|
||||||
|
// A TracerProvider is the collection destination of all Spans from Tracers it
|
||||||
|
// provides, it represents a unique telemetry collection pipeline. How that
|
||||||
|
// pipeline is defined, meaning how those Spans are collected, processed, and
|
||||||
|
// where they are exported, depends on its implementation. Instrumentation
|
||||||
|
// authors do not need to define this implementation, rather just use the
|
||||||
|
// provided Tracers to instrument code.
|
||||||
|
//
|
||||||
|
// Commonly, instrumentation code will accept a TracerProvider implementation
|
||||||
|
// at runtime from its users or it can simply use the globally registered one
|
||||||
|
// (see https://pkg.go.dev/go.opentelemetry.io/otel#GetTracerProvider).
|
||||||
|
//
|
||||||
|
// Warning: Methods may be added to this interface in minor releases. See
|
||||||
|
// package documentation on API implementation for information on how to set
|
||||||
|
// default behavior for unimplemented methods.
|
||||||
|
type TracerProvider interface {
|
||||||
|
// Users of the interface can ignore this. This embedded type is only used
|
||||||
|
// by implementations of this interface. See the "API Implementations"
|
||||||
|
// section of the package documentation for more information.
|
||||||
|
embedded.TracerProvider
|
||||||
|
|
||||||
|
// Tracer returns a unique Tracer scoped to be used by instrumentation code
|
||||||
|
// to trace computational workflows. The scope and identity of that
|
||||||
|
// instrumentation code is uniquely defined by the name and options passed.
|
||||||
|
//
|
||||||
|
// The passed name needs to uniquely identify instrumentation code.
|
||||||
|
// Therefore, it is recommended that name is the Go package name of the
|
||||||
|
// library providing instrumentation (note: not the code being
|
||||||
|
// instrumented). Instrumentation libraries can have multiple versions,
|
||||||
|
// therefore, the WithInstrumentationVersion option should be used to
|
||||||
|
// distinguish these different codebases. Additionally, instrumentation
|
||||||
|
// libraries may sometimes use traces to communicate different domains of
|
||||||
|
// workflow data (i.e. using spans to communicate workflow events only). If
|
||||||
|
// this is the case, the WithScopeAttributes option should be used to
|
||||||
|
// uniquely identify Tracers that handle the different domains of workflow
|
||||||
|
// data.
|
||||||
|
//
|
||||||
|
// If the same name and options are passed multiple times, the same Tracer
|
||||||
|
// will be returned (it is up to the implementation if this will be the
|
||||||
|
// same underlying instance of that Tracer or not). It is not necessary to
|
||||||
|
// call this multiple times with the same name and options to get an
|
||||||
|
// up-to-date Tracer. All implementations will ensure any TracerProvider
|
||||||
|
// configuration changes are propagated to all provided Tracers.
|
||||||
|
//
|
||||||
|
// If name is empty, then an implementation defined default name will be
|
||||||
|
// used instead.
|
||||||
|
//
|
||||||
|
// This method is safe to call concurrently.
|
||||||
|
Tracer(name string, options ...TracerOption) Tracer
|
||||||
|
}
|
177
vendor/go.opentelemetry.io/otel/trace/span.go
generated
vendored
Normal file
177
vendor/go.opentelemetry.io/otel/trace/span.go
generated
vendored
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package trace // import "go.opentelemetry.io/otel/trace"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel/attribute"
|
||||||
|
"go.opentelemetry.io/otel/codes"
|
||||||
|
"go.opentelemetry.io/otel/trace/embedded"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Span is the individual component of a trace. It represents a single named
|
||||||
|
// and timed operation of a workflow that is traced. A Tracer is used to
|
||||||
|
// create a Span and it is then up to the operation the Span represents to
|
||||||
|
// properly end the Span when the operation itself ends.
|
||||||
|
//
|
||||||
|
// Warning: Methods may be added to this interface in minor releases. See
|
||||||
|
// package documentation on API implementation for information on how to set
|
||||||
|
// default behavior for unimplemented methods.
|
||||||
|
type Span interface {
|
||||||
|
// Users of the interface can ignore this. This embedded type is only used
|
||||||
|
// by implementations of this interface. See the "API Implementations"
|
||||||
|
// section of the package documentation for more information.
|
||||||
|
embedded.Span
|
||||||
|
|
||||||
|
// End completes the Span. The Span is considered complete and ready to be
|
||||||
|
// delivered through the rest of the telemetry pipeline after this method
|
||||||
|
// is called. Therefore, updates to the Span are not allowed after this
|
||||||
|
// method has been called.
|
||||||
|
End(options ...SpanEndOption)
|
||||||
|
|
||||||
|
// AddEvent adds an event with the provided name and options.
|
||||||
|
AddEvent(name string, options ...EventOption)
|
||||||
|
|
||||||
|
// AddLink adds a link.
|
||||||
|
// Adding links at span creation using WithLinks is preferred to calling AddLink
|
||||||
|
// later, for contexts that are available during span creation, because head
|
||||||
|
// sampling decisions can only consider information present during span creation.
|
||||||
|
AddLink(link Link)
|
||||||
|
|
||||||
|
// IsRecording returns the recording state of the Span. It will return
|
||||||
|
// true if the Span is active and events can be recorded.
|
||||||
|
IsRecording() bool
|
||||||
|
|
||||||
|
// RecordError will record err as an exception span event for this span. An
|
||||||
|
// additional call to SetStatus is required if the Status of the Span should
|
||||||
|
// be set to Error, as this method does not change the Span status. If this
|
||||||
|
// span is not being recorded or err is nil then this method does nothing.
|
||||||
|
RecordError(err error, options ...EventOption)
|
||||||
|
|
||||||
|
// SpanContext returns the SpanContext of the Span. The returned SpanContext
|
||||||
|
// is usable even after the End method has been called for the Span.
|
||||||
|
SpanContext() SpanContext
|
||||||
|
|
||||||
|
// SetStatus sets the status of the Span in the form of a code and a
|
||||||
|
// description, provided the status hasn't already been set to a higher
|
||||||
|
// value before (OK > Error > Unset). The description is only included in a
|
||||||
|
// status when the code is for an error.
|
||||||
|
SetStatus(code codes.Code, description string)
|
||||||
|
|
||||||
|
// SetName sets the Span name.
|
||||||
|
SetName(name string)
|
||||||
|
|
||||||
|
// SetAttributes sets kv as attributes of the Span. If a key from kv
|
||||||
|
// already exists for an attribute of the Span it will be overwritten with
|
||||||
|
// the value contained in kv.
|
||||||
|
SetAttributes(kv ...attribute.KeyValue)
|
||||||
|
|
||||||
|
// TracerProvider returns a TracerProvider that can be used to generate
|
||||||
|
// additional Spans on the same telemetry pipeline as the current Span.
|
||||||
|
TracerProvider() TracerProvider
|
||||||
|
}
|
||||||
|
|
||||||
|
// Link is the relationship between two Spans. The relationship can be within
|
||||||
|
// the same Trace or across different Traces.
|
||||||
|
//
|
||||||
|
// For example, a Link is used in the following situations:
|
||||||
|
//
|
||||||
|
// 1. Batch Processing: A batch of operations may contain operations
|
||||||
|
// associated with one or more traces/spans. Since there can only be one
|
||||||
|
// parent SpanContext, a Link is used to keep reference to the
|
||||||
|
// SpanContext of all operations in the batch.
|
||||||
|
// 2. Public Endpoint: A SpanContext for an in incoming client request on a
|
||||||
|
// public endpoint should be considered untrusted. In such a case, a new
|
||||||
|
// trace with its own identity and sampling decision needs to be created,
|
||||||
|
// but this new trace needs to be related to the original trace in some
|
||||||
|
// form. A Link is used to keep reference to the original SpanContext and
|
||||||
|
// track the relationship.
|
||||||
|
type Link struct {
|
||||||
|
// SpanContext of the linked Span.
|
||||||
|
SpanContext SpanContext
|
||||||
|
|
||||||
|
// Attributes describe the aspects of the link.
|
||||||
|
Attributes []attribute.KeyValue
|
||||||
|
}
|
||||||
|
|
||||||
|
// LinkFromContext returns a link encapsulating the SpanContext in the provided
|
||||||
|
// ctx.
|
||||||
|
func LinkFromContext(ctx context.Context, attrs ...attribute.KeyValue) Link {
|
||||||
|
return Link{
|
||||||
|
SpanContext: SpanContextFromContext(ctx),
|
||||||
|
Attributes: attrs,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SpanKind is the role a Span plays in a Trace.
|
||||||
|
type SpanKind int
|
||||||
|
|
||||||
|
// As a convenience, these match the proto definition, see
|
||||||
|
// https://github.com/open-telemetry/opentelemetry-proto/blob/30d237e1ff3ab7aa50e0922b5bebdd93505090af/opentelemetry/proto/trace/v1/trace.proto#L101-L129
|
||||||
|
//
|
||||||
|
// The unspecified value is not a valid `SpanKind`. Use `ValidateSpanKind()`
|
||||||
|
// to coerce a span kind to a valid value.
|
||||||
|
const (
|
||||||
|
// SpanKindUnspecified is an unspecified SpanKind and is not a valid
|
||||||
|
// SpanKind. SpanKindUnspecified should be replaced with SpanKindInternal
|
||||||
|
// if it is received.
|
||||||
|
SpanKindUnspecified SpanKind = 0
|
||||||
|
// SpanKindInternal is a SpanKind for a Span that represents an internal
|
||||||
|
// operation within an application.
|
||||||
|
SpanKindInternal SpanKind = 1
|
||||||
|
// SpanKindServer is a SpanKind for a Span that represents the operation
|
||||||
|
// of handling a request from a client.
|
||||||
|
SpanKindServer SpanKind = 2
|
||||||
|
// SpanKindClient is a SpanKind for a Span that represents the operation
|
||||||
|
// of client making a request to a server.
|
||||||
|
SpanKindClient SpanKind = 3
|
||||||
|
// SpanKindProducer is a SpanKind for a Span that represents the operation
|
||||||
|
// of a producer sending a message to a message broker. Unlike
|
||||||
|
// SpanKindClient and SpanKindServer, there is often no direct
|
||||||
|
// relationship between this kind of Span and a SpanKindConsumer kind. A
|
||||||
|
// SpanKindProducer Span will end once the message is accepted by the
|
||||||
|
// message broker which might not overlap with the processing of that
|
||||||
|
// message.
|
||||||
|
SpanKindProducer SpanKind = 4
|
||||||
|
// SpanKindConsumer is a SpanKind for a Span that represents the operation
|
||||||
|
// of a consumer receiving a message from a message broker. Like
|
||||||
|
// SpanKindProducer Spans, there is often no direct relationship between
|
||||||
|
// this Span and the Span that produced the message.
|
||||||
|
SpanKindConsumer SpanKind = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
// ValidateSpanKind returns a valid span kind value. This will coerce
|
||||||
|
// invalid values into the default value, SpanKindInternal.
|
||||||
|
func ValidateSpanKind(spanKind SpanKind) SpanKind {
|
||||||
|
switch spanKind {
|
||||||
|
case SpanKindInternal,
|
||||||
|
SpanKindServer,
|
||||||
|
SpanKindClient,
|
||||||
|
SpanKindProducer,
|
||||||
|
SpanKindConsumer:
|
||||||
|
// valid
|
||||||
|
return spanKind
|
||||||
|
default:
|
||||||
|
return SpanKindInternal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the specified name of the SpanKind in lower-case.
|
||||||
|
func (sk SpanKind) String() string {
|
||||||
|
switch sk {
|
||||||
|
case SpanKindInternal:
|
||||||
|
return "internal"
|
||||||
|
case SpanKindServer:
|
||||||
|
return "server"
|
||||||
|
case SpanKindClient:
|
||||||
|
return "client"
|
||||||
|
case SpanKindProducer:
|
||||||
|
return "producer"
|
||||||
|
case SpanKindConsumer:
|
||||||
|
return "consumer"
|
||||||
|
default:
|
||||||
|
return "unspecified"
|
||||||
|
}
|
||||||
|
}
|
249
vendor/go.opentelemetry.io/otel/trace/trace.go
generated
vendored
249
vendor/go.opentelemetry.io/otel/trace/trace.go
generated
vendored
@ -5,13 +5,8 @@ package trace // import "go.opentelemetry.io/otel/trace"
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
"go.opentelemetry.io/otel/attribute"
|
|
||||||
"go.opentelemetry.io/otel/codes"
|
|
||||||
"go.opentelemetry.io/otel/trace/embedded"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -326,247 +321,3 @@ func (sc SpanContext) MarshalJSON() ([]byte, error) {
|
|||||||
Remote: sc.remote,
|
Remote: sc.remote,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Span is the individual component of a trace. It represents a single named
|
|
||||||
// and timed operation of a workflow that is traced. A Tracer is used to
|
|
||||||
// create a Span and it is then up to the operation the Span represents to
|
|
||||||
// properly end the Span when the operation itself ends.
|
|
||||||
//
|
|
||||||
// Warning: Methods may be added to this interface in minor releases. See
|
|
||||||
// package documentation on API implementation for information on how to set
|
|
||||||
// default behavior for unimplemented methods.
|
|
||||||
type Span interface {
|
|
||||||
// Users of the interface can ignore this. This embedded type is only used
|
|
||||||
// by implementations of this interface. See the "API Implementations"
|
|
||||||
// section of the package documentation for more information.
|
|
||||||
embedded.Span
|
|
||||||
|
|
||||||
// End completes the Span. The Span is considered complete and ready to be
|
|
||||||
// delivered through the rest of the telemetry pipeline after this method
|
|
||||||
// is called. Therefore, updates to the Span are not allowed after this
|
|
||||||
// method has been called.
|
|
||||||
End(options ...SpanEndOption)
|
|
||||||
|
|
||||||
// AddEvent adds an event with the provided name and options.
|
|
||||||
AddEvent(name string, options ...EventOption)
|
|
||||||
|
|
||||||
// AddLink adds a link.
|
|
||||||
// Adding links at span creation using WithLinks is preferred to calling AddLink
|
|
||||||
// later, for contexts that are available during span creation, because head
|
|
||||||
// sampling decisions can only consider information present during span creation.
|
|
||||||
AddLink(link Link)
|
|
||||||
|
|
||||||
// IsRecording returns the recording state of the Span. It will return
|
|
||||||
// true if the Span is active and events can be recorded.
|
|
||||||
IsRecording() bool
|
|
||||||
|
|
||||||
// RecordError will record err as an exception span event for this span. An
|
|
||||||
// additional call to SetStatus is required if the Status of the Span should
|
|
||||||
// be set to Error, as this method does not change the Span status. If this
|
|
||||||
// span is not being recorded or err is nil then this method does nothing.
|
|
||||||
RecordError(err error, options ...EventOption)
|
|
||||||
|
|
||||||
// SpanContext returns the SpanContext of the Span. The returned SpanContext
|
|
||||||
// is usable even after the End method has been called for the Span.
|
|
||||||
SpanContext() SpanContext
|
|
||||||
|
|
||||||
// SetStatus sets the status of the Span in the form of a code and a
|
|
||||||
// description, provided the status hasn't already been set to a higher
|
|
||||||
// value before (OK > Error > Unset). The description is only included in a
|
|
||||||
// status when the code is for an error.
|
|
||||||
SetStatus(code codes.Code, description string)
|
|
||||||
|
|
||||||
// SetName sets the Span name.
|
|
||||||
SetName(name string)
|
|
||||||
|
|
||||||
// SetAttributes sets kv as attributes of the Span. If a key from kv
|
|
||||||
// already exists for an attribute of the Span it will be overwritten with
|
|
||||||
// the value contained in kv.
|
|
||||||
SetAttributes(kv ...attribute.KeyValue)
|
|
||||||
|
|
||||||
// TracerProvider returns a TracerProvider that can be used to generate
|
|
||||||
// additional Spans on the same telemetry pipeline as the current Span.
|
|
||||||
TracerProvider() TracerProvider
|
|
||||||
}
|
|
||||||
|
|
||||||
// Link is the relationship between two Spans. The relationship can be within
|
|
||||||
// the same Trace or across different Traces.
|
|
||||||
//
|
|
||||||
// For example, a Link is used in the following situations:
|
|
||||||
//
|
|
||||||
// 1. Batch Processing: A batch of operations may contain operations
|
|
||||||
// associated with one or more traces/spans. Since there can only be one
|
|
||||||
// parent SpanContext, a Link is used to keep reference to the
|
|
||||||
// SpanContext of all operations in the batch.
|
|
||||||
// 2. Public Endpoint: A SpanContext for an in incoming client request on a
|
|
||||||
// public endpoint should be considered untrusted. In such a case, a new
|
|
||||||
// trace with its own identity and sampling decision needs to be created,
|
|
||||||
// but this new trace needs to be related to the original trace in some
|
|
||||||
// form. A Link is used to keep reference to the original SpanContext and
|
|
||||||
// track the relationship.
|
|
||||||
type Link struct {
|
|
||||||
// SpanContext of the linked Span.
|
|
||||||
SpanContext SpanContext
|
|
||||||
|
|
||||||
// Attributes describe the aspects of the link.
|
|
||||||
Attributes []attribute.KeyValue
|
|
||||||
}
|
|
||||||
|
|
||||||
// LinkFromContext returns a link encapsulating the SpanContext in the provided ctx.
|
|
||||||
func LinkFromContext(ctx context.Context, attrs ...attribute.KeyValue) Link {
|
|
||||||
return Link{
|
|
||||||
SpanContext: SpanContextFromContext(ctx),
|
|
||||||
Attributes: attrs,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SpanKind is the role a Span plays in a Trace.
|
|
||||||
type SpanKind int
|
|
||||||
|
|
||||||
// As a convenience, these match the proto definition, see
|
|
||||||
// https://github.com/open-telemetry/opentelemetry-proto/blob/30d237e1ff3ab7aa50e0922b5bebdd93505090af/opentelemetry/proto/trace/v1/trace.proto#L101-L129
|
|
||||||
//
|
|
||||||
// The unspecified value is not a valid `SpanKind`. Use `ValidateSpanKind()`
|
|
||||||
// to coerce a span kind to a valid value.
|
|
||||||
const (
|
|
||||||
// SpanKindUnspecified is an unspecified SpanKind and is not a valid
|
|
||||||
// SpanKind. SpanKindUnspecified should be replaced with SpanKindInternal
|
|
||||||
// if it is received.
|
|
||||||
SpanKindUnspecified SpanKind = 0
|
|
||||||
// SpanKindInternal is a SpanKind for a Span that represents an internal
|
|
||||||
// operation within an application.
|
|
||||||
SpanKindInternal SpanKind = 1
|
|
||||||
// SpanKindServer is a SpanKind for a Span that represents the operation
|
|
||||||
// of handling a request from a client.
|
|
||||||
SpanKindServer SpanKind = 2
|
|
||||||
// SpanKindClient is a SpanKind for a Span that represents the operation
|
|
||||||
// of client making a request to a server.
|
|
||||||
SpanKindClient SpanKind = 3
|
|
||||||
// SpanKindProducer is a SpanKind for a Span that represents the operation
|
|
||||||
// of a producer sending a message to a message broker. Unlike
|
|
||||||
// SpanKindClient and SpanKindServer, there is often no direct
|
|
||||||
// relationship between this kind of Span and a SpanKindConsumer kind. A
|
|
||||||
// SpanKindProducer Span will end once the message is accepted by the
|
|
||||||
// message broker which might not overlap with the processing of that
|
|
||||||
// message.
|
|
||||||
SpanKindProducer SpanKind = 4
|
|
||||||
// SpanKindConsumer is a SpanKind for a Span that represents the operation
|
|
||||||
// of a consumer receiving a message from a message broker. Like
|
|
||||||
// SpanKindProducer Spans, there is often no direct relationship between
|
|
||||||
// this Span and the Span that produced the message.
|
|
||||||
SpanKindConsumer SpanKind = 5
|
|
||||||
)
|
|
||||||
|
|
||||||
// ValidateSpanKind returns a valid span kind value. This will coerce
|
|
||||||
// invalid values into the default value, SpanKindInternal.
|
|
||||||
func ValidateSpanKind(spanKind SpanKind) SpanKind {
|
|
||||||
switch spanKind {
|
|
||||||
case SpanKindInternal,
|
|
||||||
SpanKindServer,
|
|
||||||
SpanKindClient,
|
|
||||||
SpanKindProducer,
|
|
||||||
SpanKindConsumer:
|
|
||||||
// valid
|
|
||||||
return spanKind
|
|
||||||
default:
|
|
||||||
return SpanKindInternal
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// String returns the specified name of the SpanKind in lower-case.
|
|
||||||
func (sk SpanKind) String() string {
|
|
||||||
switch sk {
|
|
||||||
case SpanKindInternal:
|
|
||||||
return "internal"
|
|
||||||
case SpanKindServer:
|
|
||||||
return "server"
|
|
||||||
case SpanKindClient:
|
|
||||||
return "client"
|
|
||||||
case SpanKindProducer:
|
|
||||||
return "producer"
|
|
||||||
case SpanKindConsumer:
|
|
||||||
return "consumer"
|
|
||||||
default:
|
|
||||||
return "unspecified"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tracer is the creator of Spans.
|
|
||||||
//
|
|
||||||
// Warning: Methods may be added to this interface in minor releases. See
|
|
||||||
// package documentation on API implementation for information on how to set
|
|
||||||
// default behavior for unimplemented methods.
|
|
||||||
type Tracer interface {
|
|
||||||
// Users of the interface can ignore this. This embedded type is only used
|
|
||||||
// by implementations of this interface. See the "API Implementations"
|
|
||||||
// section of the package documentation for more information.
|
|
||||||
embedded.Tracer
|
|
||||||
|
|
||||||
// Start creates a span and a context.Context containing the newly-created span.
|
|
||||||
//
|
|
||||||
// If the context.Context provided in `ctx` contains a Span then the newly-created
|
|
||||||
// Span will be a child of that span, otherwise it will be a root span. This behavior
|
|
||||||
// can be overridden by providing `WithNewRoot()` as a SpanOption, causing the
|
|
||||||
// newly-created Span to be a root span even if `ctx` contains a Span.
|
|
||||||
//
|
|
||||||
// When creating a Span it is recommended to provide all known span attributes using
|
|
||||||
// the `WithAttributes()` SpanOption as samplers will only have access to the
|
|
||||||
// attributes provided when a Span is created.
|
|
||||||
//
|
|
||||||
// Any Span that is created MUST also be ended. This is the responsibility of the user.
|
|
||||||
// Implementations of this API may leak memory or other resources if Spans are not ended.
|
|
||||||
Start(ctx context.Context, spanName string, opts ...SpanStartOption) (context.Context, Span)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TracerProvider provides Tracers that are used by instrumentation code to
|
|
||||||
// trace computational workflows.
|
|
||||||
//
|
|
||||||
// A TracerProvider is the collection destination of all Spans from Tracers it
|
|
||||||
// provides, it represents a unique telemetry collection pipeline. How that
|
|
||||||
// pipeline is defined, meaning how those Spans are collected, processed, and
|
|
||||||
// where they are exported, depends on its implementation. Instrumentation
|
|
||||||
// authors do not need to define this implementation, rather just use the
|
|
||||||
// provided Tracers to instrument code.
|
|
||||||
//
|
|
||||||
// Commonly, instrumentation code will accept a TracerProvider implementation
|
|
||||||
// at runtime from its users or it can simply use the globally registered one
|
|
||||||
// (see https://pkg.go.dev/go.opentelemetry.io/otel#GetTracerProvider).
|
|
||||||
//
|
|
||||||
// Warning: Methods may be added to this interface in minor releases. See
|
|
||||||
// package documentation on API implementation for information on how to set
|
|
||||||
// default behavior for unimplemented methods.
|
|
||||||
type TracerProvider interface {
|
|
||||||
// Users of the interface can ignore this. This embedded type is only used
|
|
||||||
// by implementations of this interface. See the "API Implementations"
|
|
||||||
// section of the package documentation for more information.
|
|
||||||
embedded.TracerProvider
|
|
||||||
|
|
||||||
// Tracer returns a unique Tracer scoped to be used by instrumentation code
|
|
||||||
// to trace computational workflows. The scope and identity of that
|
|
||||||
// instrumentation code is uniquely defined by the name and options passed.
|
|
||||||
//
|
|
||||||
// The passed name needs to uniquely identify instrumentation code.
|
|
||||||
// Therefore, it is recommended that name is the Go package name of the
|
|
||||||
// library providing instrumentation (note: not the code being
|
|
||||||
// instrumented). Instrumentation libraries can have multiple versions,
|
|
||||||
// therefore, the WithInstrumentationVersion option should be used to
|
|
||||||
// distinguish these different codebases. Additionally, instrumentation
|
|
||||||
// libraries may sometimes use traces to communicate different domains of
|
|
||||||
// workflow data (i.e. using spans to communicate workflow events only). If
|
|
||||||
// this is the case, the WithScopeAttributes option should be used to
|
|
||||||
// uniquely identify Tracers that handle the different domains of workflow
|
|
||||||
// data.
|
|
||||||
//
|
|
||||||
// If the same name and options are passed multiple times, the same Tracer
|
|
||||||
// will be returned (it is up to the implementation if this will be the
|
|
||||||
// same underlying instance of that Tracer or not). It is not necessary to
|
|
||||||
// call this multiple times with the same name and options to get an
|
|
||||||
// up-to-date Tracer. All implementations will ensure any TracerProvider
|
|
||||||
// configuration changes are propagated to all provided Tracers.
|
|
||||||
//
|
|
||||||
// If name is empty, then an implementation defined default name will be
|
|
||||||
// used instead.
|
|
||||||
//
|
|
||||||
// This method is safe to call concurrently.
|
|
||||||
Tracer(name string, options ...TracerOption) Tracer
|
|
||||||
}
|
|
||||||
|
37
vendor/go.opentelemetry.io/otel/trace/tracer.go
generated
vendored
Normal file
37
vendor/go.opentelemetry.io/otel/trace/tracer.go
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package trace // import "go.opentelemetry.io/otel/trace"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel/trace/embedded"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Tracer is the creator of Spans.
|
||||||
|
//
|
||||||
|
// Warning: Methods may be added to this interface in minor releases. See
|
||||||
|
// package documentation on API implementation for information on how to set
|
||||||
|
// default behavior for unimplemented methods.
|
||||||
|
type Tracer interface {
|
||||||
|
// Users of the interface can ignore this. This embedded type is only used
|
||||||
|
// by implementations of this interface. See the "API Implementations"
|
||||||
|
// section of the package documentation for more information.
|
||||||
|
embedded.Tracer
|
||||||
|
|
||||||
|
// Start creates a span and a context.Context containing the newly-created span.
|
||||||
|
//
|
||||||
|
// If the context.Context provided in `ctx` contains a Span then the newly-created
|
||||||
|
// Span will be a child of that span, otherwise it will be a root span. This behavior
|
||||||
|
// can be overridden by providing `WithNewRoot()` as a SpanOption, causing the
|
||||||
|
// newly-created Span to be a root span even if `ctx` contains a Span.
|
||||||
|
//
|
||||||
|
// When creating a Span it is recommended to provide all known span attributes using
|
||||||
|
// the `WithAttributes()` SpanOption as samplers will only have access to the
|
||||||
|
// attributes provided when a Span is created.
|
||||||
|
//
|
||||||
|
// Any Span that is created MUST also be ended. This is the responsibility of the user.
|
||||||
|
// Implementations of this API may leak memory or other resources if Spans are not ended.
|
||||||
|
Start(ctx context.Context, spanName string, opts ...SpanStartOption) (context.Context, Span)
|
||||||
|
}
|
10
vendor/go.opentelemetry.io/otel/trace/tracestate.go
generated
vendored
10
vendor/go.opentelemetry.io/otel/trace/tracestate.go
generated
vendored
@ -260,6 +260,16 @@ func (ts TraceState) Get(key string) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Walk walks all key value pairs in the TraceState by calling f
|
||||||
|
// Iteration stops if f returns false.
|
||||||
|
func (ts TraceState) Walk(f func(key, value string) bool) {
|
||||||
|
for _, m := range ts.list {
|
||||||
|
if !f(m.Key, m.Value) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Insert adds a new list-member defined by the key/value pair to the
|
// Insert adds a new list-member defined by the key/value pair to the
|
||||||
// TraceState. If a list-member already exists for the given key, that
|
// TraceState. If a list-member already exists for the given key, that
|
||||||
// list-member's value is updated. The new or updated list-member is always
|
// list-member's value is updated. The new or updated list-member is always
|
||||||
|
42
vendor/go.opentelemetry.io/otel/verify_released_changelog.sh
generated
vendored
Normal file
42
vendor/go.opentelemetry.io/otel/verify_released_changelog.sh
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright The OpenTelemetry Authors
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
TARGET="${1:?Must provide target ref}"
|
||||||
|
|
||||||
|
FILE="CHANGELOG.md"
|
||||||
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
echo "Temp folder: $TEMP_DIR"
|
||||||
|
|
||||||
|
# Only the latest commit of the feature branch is available
|
||||||
|
# automatically. To diff with the base branch, we need to
|
||||||
|
# fetch that too (and we only need its latest commit).
|
||||||
|
git fetch origin "${TARGET}" --depth=1
|
||||||
|
|
||||||
|
# Checkout the previous version on the base branch of the changelog to tmpfolder
|
||||||
|
git --work-tree="$TEMP_DIR" checkout FETCH_HEAD $FILE
|
||||||
|
|
||||||
|
PREVIOUS_FILE="$TEMP_DIR/$FILE"
|
||||||
|
CURRENT_FILE="$FILE"
|
||||||
|
PREVIOUS_LOCKED_FILE="$TEMP_DIR/previous_locked_section.md"
|
||||||
|
CURRENT_LOCKED_FILE="$TEMP_DIR/current_locked_section.md"
|
||||||
|
|
||||||
|
# Extract released sections from the previous version
|
||||||
|
awk '/^<!-- Released section -->/ {flag=1} /^<!-- Released section ended -->/ {flag=0} flag' "$PREVIOUS_FILE" > "$PREVIOUS_LOCKED_FILE"
|
||||||
|
|
||||||
|
# Extract released sections from the current version
|
||||||
|
awk '/^<!-- Released section -->/ {flag=1} /^<!-- Released section ended -->/ {flag=0} flag' "$CURRENT_FILE" > "$CURRENT_LOCKED_FILE"
|
||||||
|
|
||||||
|
# Compare the released sections
|
||||||
|
if ! diff -q "$PREVIOUS_LOCKED_FILE" "$CURRENT_LOCKED_FILE"; then
|
||||||
|
echo "Error: The released sections of the changelog file have been modified."
|
||||||
|
diff "$PREVIOUS_LOCKED_FILE" "$CURRENT_LOCKED_FILE"
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
false
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
echo "The released sections remain unchanged."
|
2
vendor/go.opentelemetry.io/otel/version.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/version.go
generated
vendored
@ -5,5 +5,5 @@ package otel // import "go.opentelemetry.io/otel"
|
|||||||
|
|
||||||
// Version is the current release version of OpenTelemetry in use.
|
// Version is the current release version of OpenTelemetry in use.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "1.28.0"
|
return "1.29.0"
|
||||||
}
|
}
|
||||||
|
8
vendor/go.opentelemetry.io/otel/versions.yaml
generated
vendored
8
vendor/go.opentelemetry.io/otel/versions.yaml
generated
vendored
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
module-sets:
|
module-sets:
|
||||||
stable-v1:
|
stable-v1:
|
||||||
version: v1.28.0
|
version: v1.29.0
|
||||||
modules:
|
modules:
|
||||||
- go.opentelemetry.io/otel
|
- go.opentelemetry.io/otel
|
||||||
- go.opentelemetry.io/otel/bridge/opencensus
|
- go.opentelemetry.io/otel/bridge/opencensus
|
||||||
@ -29,15 +29,16 @@ module-sets:
|
|||||||
- go.opentelemetry.io/otel/sdk/metric
|
- go.opentelemetry.io/otel/sdk/metric
|
||||||
- go.opentelemetry.io/otel/trace
|
- go.opentelemetry.io/otel/trace
|
||||||
experimental-metrics:
|
experimental-metrics:
|
||||||
version: v0.50.0
|
version: v0.51.0
|
||||||
modules:
|
modules:
|
||||||
- go.opentelemetry.io/otel/example/prometheus
|
- go.opentelemetry.io/otel/example/prometheus
|
||||||
- go.opentelemetry.io/otel/exporters/prometheus
|
- go.opentelemetry.io/otel/exporters/prometheus
|
||||||
experimental-logs:
|
experimental-logs:
|
||||||
version: v0.4.0
|
version: v0.5.0
|
||||||
modules:
|
modules:
|
||||||
- go.opentelemetry.io/otel/log
|
- go.opentelemetry.io/otel/log
|
||||||
- go.opentelemetry.io/otel/sdk/log
|
- go.opentelemetry.io/otel/sdk/log
|
||||||
|
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc
|
||||||
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp
|
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp
|
||||||
- go.opentelemetry.io/otel/exporters/stdout/stdoutlog
|
- go.opentelemetry.io/otel/exporters/stdout/stdoutlog
|
||||||
experimental-schema:
|
experimental-schema:
|
||||||
@ -46,4 +47,3 @@ module-sets:
|
|||||||
- go.opentelemetry.io/otel/schema
|
- go.opentelemetry.io/otel/schema
|
||||||
excluded-modules:
|
excluded-modules:
|
||||||
- go.opentelemetry.io/otel/internal/tools
|
- go.opentelemetry.io/otel/internal/tools
|
||||||
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc
|
|
||||||
|
4
vendor/golang.org/x/crypto/LICENSE
generated
vendored
4
vendor/golang.org/x/crypto/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
Copyright 2009 The Go Authors.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are
|
modification, are permitted provided that the following conditions are
|
||||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
|||||||
copyright notice, this list of conditions and the following disclaimer
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
in the documentation and/or other materials provided with the
|
in the documentation and/or other materials provided with the
|
||||||
distribution.
|
distribution.
|
||||||
* Neither the name of Google Inc. nor the names of its
|
* Neither the name of Google LLC nor the names of its
|
||||||
contributors may be used to endorse or promote products derived from
|
contributors may be used to endorse or promote products derived from
|
||||||
this software without specific prior written permission.
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
4
vendor/golang.org/x/net/LICENSE
generated
vendored
4
vendor/golang.org/x/net/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
Copyright 2009 The Go Authors.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are
|
modification, are permitted provided that the following conditions are
|
||||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
|||||||
copyright notice, this list of conditions and the following disclaimer
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
in the documentation and/or other materials provided with the
|
in the documentation and/or other materials provided with the
|
||||||
distribution.
|
distribution.
|
||||||
* Neither the name of Google Inc. nor the names of its
|
* Neither the name of Google LLC nor the names of its
|
||||||
contributors may be used to endorse or promote products derived from
|
contributors may be used to endorse or promote products derived from
|
||||||
this software without specific prior written permission.
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
4
vendor/golang.org/x/oauth2/LICENSE
generated
vendored
4
vendor/golang.org/x/oauth2/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
Copyright 2009 The Go Authors.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are
|
modification, are permitted provided that the following conditions are
|
||||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
|||||||
copyright notice, this list of conditions and the following disclaimer
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
in the documentation and/or other materials provided with the
|
in the documentation and/or other materials provided with the
|
||||||
distribution.
|
distribution.
|
||||||
* Neither the name of Google Inc. nor the names of its
|
* Neither the name of Google LLC nor the names of its
|
||||||
contributors may be used to endorse or promote products derived from
|
contributors may be used to endorse or promote products derived from
|
||||||
this software without specific prior written permission.
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
4
vendor/golang.org/x/term/LICENSE
generated
vendored
4
vendor/golang.org/x/term/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
Copyright 2009 The Go Authors.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are
|
modification, are permitted provided that the following conditions are
|
||||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
|||||||
copyright notice, this list of conditions and the following disclaimer
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
in the documentation and/or other materials provided with the
|
in the documentation and/or other materials provided with the
|
||||||
distribution.
|
distribution.
|
||||||
* Neither the name of Google Inc. nor the names of its
|
* Neither the name of Google LLC nor the names of its
|
||||||
contributors may be used to endorse or promote products derived from
|
contributors may be used to endorse or promote products derived from
|
||||||
this software without specific prior written permission.
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
4
vendor/golang.org/x/text/LICENSE
generated
vendored
4
vendor/golang.org/x/text/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
Copyright 2009 The Go Authors.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are
|
modification, are permitted provided that the following conditions are
|
||||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
|||||||
copyright notice, this list of conditions and the following disclaimer
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
in the documentation and/or other materials provided with the
|
in the documentation and/or other materials provided with the
|
||||||
distribution.
|
distribution.
|
||||||
* Neither the name of Google Inc. nor the names of its
|
* Neither the name of Google LLC nor the names of its
|
||||||
contributors may be used to endorse or promote products derived from
|
contributors may be used to endorse or promote products derived from
|
||||||
this software without specific prior written permission.
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
42
vendor/modules.txt
vendored
42
vendor/modules.txt
vendored
@ -306,8 +306,8 @@ github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus
|
|||||||
# github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0
|
# github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors
|
github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors
|
||||||
# github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0
|
# github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0
|
||||||
## explicit; go 1.20
|
## explicit; go 1.21
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule
|
github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2/runtime
|
github.com/grpc-ecosystem/grpc-gateway/v2/runtime
|
||||||
github.com/grpc-ecosystem/grpc-gateway/v2/utilities
|
github.com/grpc-ecosystem/grpc-gateway/v2/utilities
|
||||||
@ -482,16 +482,17 @@ go.opencensus.io/internal
|
|||||||
go.opencensus.io/trace
|
go.opencensus.io/trace
|
||||||
go.opencensus.io/trace/internal
|
go.opencensus.io/trace/internal
|
||||||
go.opencensus.io/trace/tracestate
|
go.opencensus.io/trace/tracestate
|
||||||
# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0
|
# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/internal
|
||||||
# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0
|
# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
|
||||||
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/request
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil
|
||||||
# go.opentelemetry.io/otel v1.28.0
|
# go.opentelemetry.io/otel v1.29.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/otel
|
go.opentelemetry.io/otel
|
||||||
go.opentelemetry.io/otel/attribute
|
go.opentelemetry.io/otel/attribute
|
||||||
@ -505,32 +506,31 @@ go.opentelemetry.io/otel/propagation
|
|||||||
go.opentelemetry.io/otel/semconv/v1.17.0
|
go.opentelemetry.io/otel/semconv/v1.17.0
|
||||||
go.opentelemetry.io/otel/semconv/v1.20.0
|
go.opentelemetry.io/otel/semconv/v1.20.0
|
||||||
go.opentelemetry.io/otel/semconv/v1.21.0
|
go.opentelemetry.io/otel/semconv/v1.21.0
|
||||||
go.opentelemetry.io/otel/semconv/v1.24.0
|
|
||||||
go.opentelemetry.io/otel/semconv/v1.26.0
|
go.opentelemetry.io/otel/semconv/v1.26.0
|
||||||
# go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0
|
# go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/tracetransform
|
||||||
# go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0
|
# go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/envconfig
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/envconfig
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry
|
||||||
# go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0
|
# go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal/envconfig
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal/envconfig
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal/otlpconfig
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal/otlpconfig
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal/retry
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal/retry
|
||||||
# go.opentelemetry.io/otel/metric v1.28.0
|
# go.opentelemetry.io/otel/metric v1.29.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/otel/metric
|
go.opentelemetry.io/otel/metric
|
||||||
go.opentelemetry.io/otel/metric/embedded
|
go.opentelemetry.io/otel/metric/embedded
|
||||||
go.opentelemetry.io/otel/metric/noop
|
go.opentelemetry.io/otel/metric/noop
|
||||||
# go.opentelemetry.io/otel/sdk v1.28.0
|
# go.opentelemetry.io/otel/sdk v1.29.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/otel/sdk
|
go.opentelemetry.io/otel/sdk
|
||||||
go.opentelemetry.io/otel/sdk/instrumentation
|
go.opentelemetry.io/otel/sdk/instrumentation
|
||||||
@ -539,7 +539,7 @@ go.opentelemetry.io/otel/sdk/internal/x
|
|||||||
go.opentelemetry.io/otel/sdk/resource
|
go.opentelemetry.io/otel/sdk/resource
|
||||||
go.opentelemetry.io/otel/sdk/trace
|
go.opentelemetry.io/otel/sdk/trace
|
||||||
go.opentelemetry.io/otel/sdk/trace/tracetest
|
go.opentelemetry.io/otel/sdk/trace/tracetest
|
||||||
# go.opentelemetry.io/otel/trace v1.28.0
|
# go.opentelemetry.io/otel/trace v1.29.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
go.opentelemetry.io/otel/trace
|
go.opentelemetry.io/otel/trace
|
||||||
go.opentelemetry.io/otel/trace/embedded
|
go.opentelemetry.io/otel/trace/embedded
|
||||||
@ -550,7 +550,7 @@ go.opentelemetry.io/proto/otlp/collector/trace/v1
|
|||||||
go.opentelemetry.io/proto/otlp/common/v1
|
go.opentelemetry.io/proto/otlp/common/v1
|
||||||
go.opentelemetry.io/proto/otlp/resource/v1
|
go.opentelemetry.io/proto/otlp/resource/v1
|
||||||
go.opentelemetry.io/proto/otlp/trace/v1
|
go.opentelemetry.io/proto/otlp/trace/v1
|
||||||
# golang.org/x/crypto v0.25.0
|
# golang.org/x/crypto v0.26.0
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
golang.org/x/crypto/cast5
|
golang.org/x/crypto/cast5
|
||||||
golang.org/x/crypto/openpgp
|
golang.org/x/crypto/openpgp
|
||||||
@ -568,7 +568,7 @@ golang.org/x/exp/slices
|
|||||||
# golang.org/x/mod v0.20.0
|
# golang.org/x/mod v0.20.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/mod/semver
|
golang.org/x/mod/semver
|
||||||
# golang.org/x/net v0.27.0
|
# golang.org/x/net v0.28.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/net/bpf
|
golang.org/x/net/bpf
|
||||||
golang.org/x/net/html
|
golang.org/x/net/html
|
||||||
@ -582,7 +582,7 @@ golang.org/x/net/internal/timeseries
|
|||||||
golang.org/x/net/proxy
|
golang.org/x/net/proxy
|
||||||
golang.org/x/net/trace
|
golang.org/x/net/trace
|
||||||
golang.org/x/net/websocket
|
golang.org/x/net/websocket
|
||||||
# golang.org/x/oauth2 v0.21.0
|
# golang.org/x/oauth2 v0.22.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/oauth2
|
golang.org/x/oauth2
|
||||||
golang.org/x/oauth2/internal
|
golang.org/x/oauth2/internal
|
||||||
@ -600,10 +600,10 @@ golang.org/x/sys/windows/registry
|
|||||||
golang.org/x/sys/windows/svc
|
golang.org/x/sys/windows/svc
|
||||||
golang.org/x/sys/windows/svc/debug
|
golang.org/x/sys/windows/svc/debug
|
||||||
golang.org/x/sys/windows/svc/mgr
|
golang.org/x/sys/windows/svc/mgr
|
||||||
# golang.org/x/term v0.22.0
|
# golang.org/x/term v0.23.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/term
|
golang.org/x/term
|
||||||
# golang.org/x/text v0.16.0
|
# golang.org/x/text v0.17.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/text/secure/bidirule
|
golang.org/x/text/secure/bidirule
|
||||||
golang.org/x/text/transform
|
golang.org/x/text/transform
|
||||||
@ -612,11 +612,11 @@ golang.org/x/text/unicode/norm
|
|||||||
# golang.org/x/time v0.3.0
|
# golang.org/x/time v0.3.0
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/time/rate
|
golang.org/x/time/rate
|
||||||
# google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094
|
# google.golang.org/genproto/googleapis/api v0.0.0-20240822170219-fc7c04adadcd
|
||||||
## explicit; go 1.20
|
## explicit; go 1.21
|
||||||
google.golang.org/genproto/googleapis/api/httpbody
|
google.golang.org/genproto/googleapis/api/httpbody
|
||||||
# google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094
|
# google.golang.org/genproto/googleapis/rpc v0.0.0-20240822170219-fc7c04adadcd
|
||||||
## explicit; go 1.20
|
## explicit; go 1.21
|
||||||
google.golang.org/genproto/googleapis/rpc/code
|
google.golang.org/genproto/googleapis/rpc/code
|
||||||
google.golang.org/genproto/googleapis/rpc/errdetails
|
google.golang.org/genproto/googleapis/rpc/errdetails
|
||||||
google.golang.org/genproto/googleapis/rpc/status
|
google.golang.org/genproto/googleapis/rpc/status
|
||||||
|
Loading…
Reference in New Issue
Block a user